cbclient

package module
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2019 License: Apache-2.0 Imports: 10 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CloudBoltActionResult

type CloudBoltActionResult struct {
	RunActionJob struct {
		Self CloudBoltHALItem `json:"self"`
	} `json:"run-action-job"`
}

CloudBoltActionResult stores metadata about the result of running an action.

type CloudBoltClient

type CloudBoltClient struct {
	// contains filtered or unexported fields
}

CloudBoltClient stores the important metadata necessary to make API requests. - BaseURL follows the pattern "https://cloudbolt.myco.ext:443/". - HTTPClient is a client used to make the API calls. - Token is retrieved in `New` and is included in the Bearer Token of request headers.

func New

func New(protocol string, host string, port string, apiVersion string, username string, password string, httpClient *http.Client) *CloudBoltClient

New returns an initialized CloudBoltClient object. Accepts as input: - HTTP Protocol (protocol) e.g., "https" - HTTP Host (host) e.g., "cloudbolt.intranet" - HTTP Port (port) e.g., "443" - apiVersion (apiVersion) e.g., "v2" - Username (username) e.g., "myUserName" - Password (password) e.g., "My Passphrase!" - User-provided *HTTPClient (httpClient); provide `nil` to get a server with the following defaults:

  • Timeout set to 60 seconds Provide a custom http.Client if you require unique certificate, timeout, etc., configured.

New does not make any API calls. CloudBoltClient.Authenticate must be called to initialize CloudBoltClient.token. This is done automatically when a request receives an HTTP Authorization error.

func (*CloudBoltClient) Authenticate

func (c *CloudBoltClient) Authenticate() (int, error)

Authenticate forces the CloudBoltClient to re-authenticate Returns an error if there is an HTTP error, or if the HTTP Status Code is >=400

func (*CloudBoltClient) DecomOrder

func (c *CloudBoltClient) DecomOrder(grpPath string, envPath string, servers []string) (*CloudBoltOrder, error)

DecomOrder orders the deletion of a CloudBolt resource

  • Group Path (grpPath) e.g., "/api/v2/groups/GRP-123/"
  • Environment Path (envPath) e.g., "/api/v2/environments/ENV-123/"
  • Servers (servers) e.g., []string{ `/api/v2/servers/123/`, `/api/v2/servers/4567/`, `/api/v2/servers/891011/`, }

func (*CloudBoltClient) DeployBlueprint

func (c *CloudBoltClient) DeployBlueprint(grpPath string, bpPath string, resourceName string, bpItems []map[string]interface{}) (*CloudBoltOrder, error)

DeployBlueprint deploys the given:

  • Blueprint (bpPath) e.g., "/api/v2/blueprints/BG-6ic2tw7x/"
  • Group (grpPath) e.g., "/api/v2/groups/GRP-5ukhved7/"
  • Resource Name (resourceName) e.g., "My Resource Name"
  • Blueprint Items/request parameters (bpItems) e.g., []map[string]interface{}{ map[string]interface{}{ "bp-item-name": "bp item name", "bp-item-paramas": map[string]interface{}} "some-param": "param value", "other-param": "foo bar baz", }, "environment": "bp environment", "osbuild": "bp osbuild", } }

func (*CloudBoltClient) GetCloudBoltObject

func (c *CloudBoltClient) GetCloudBoltObject(objPath string, objName string) (*CloudBoltObject, error)

GetCloudBoltObject fetches a given object of type "objPath" with the name "objName" e.g., GetCloudBoltObject("users", "Susan") gets the user with username "Susan"

Caveat:

This makes a generic request to `/api/v2/objPath/?filter=name:objName`
it returns the first element of the `_embedded` list, so if multiple objects are
returned from this query, only the first one will be returned.

So don't lean on this without some sanity checks.

func (*CloudBoltClient) GetGroup

func (c *CloudBoltClient) GetGroup(groupPath string) (*CloudBoltObject, error)

GetGroup accepts a groupPath string parameter of the following format: "/my parent group/some subgroup/a child group/" or just "my parent group"

verifyGroup recursively verifies that this is a valid group/subgroup.

func (*CloudBoltClient) GetJob

func (c *CloudBoltClient) GetJob(jobPath string) (*CloudBoltJob, error)

GetJob fetches the Job object from CloudBolt at the given path - Job Path (jobPath) e.g., "/api/v2/jobs/123/"

func (*CloudBoltClient) GetOrder

func (c *CloudBoltClient) GetOrder(orderID string) (*CloudBoltOrder, error)

GetOrder fetches an Order from CloudBolt - Order ID (orderID) e.g., "123"; formatted into a string like "/api/v2/orders/123"

func (*CloudBoltClient) GetResource

func (c *CloudBoltClient) GetResource(resourcePath string) (*CloudBoltResource, error)

GetResource fetches a Resource object from CloudBolt at the given path - Resource Path (resourcePath) e.g., "/api/v2/resources/service/123/"

func (*CloudBoltClient) GetServer

func (c *CloudBoltClient) GetServer(serverPath string) (*CloudBoltServer, error)

GetServer fetches a Server object from CloudBolt at the given path - Server Path (serverPath) e.g., "/api/v2/servers/123/"

func (*CloudBoltClient) SubmitAction

func (c *CloudBoltClient) SubmitAction(actionPath string) (*CloudBoltActionResult, error)

SubmitAction runs an action on the CloudBolt server - Action Path (actionPath) e.g., "/api/v2/actions/123/"

type CloudBoltGroup

type CloudBoltGroup struct {
	Links struct {
		Self                  CloudBoltHALItem   `json:"self"`
		Parent                CloudBoltHALItem   `json:"parent"`
		Subgroups             []CloudBoltHALItem `json:"subgroups"`
		Environments          []interface{}      `json:"environments"`
		OrderableEnvironments CloudBoltHALItem   `json:"orderable-environments"`
	} `json:"_links"`
	Name         string `json:"name"`
	ID           string `json:"id"`
	Type         string `json:"type"`
	Rate         string `json:"rate"`
	AutoApproval bool   `json:"auto-approval"`
}

CloudBoltGroup contains metadata about a Group in CloudBolt

type CloudBoltHALItem

type CloudBoltHALItem struct {
	Href  string `json:"href"`
	Title string `json:"title"`
}

CloudBoltHALItem stores an object's title and API endpoint. This is a common pattern in the CloudBolt API, so it gets used a lot.

type CloudBoltJob

type CloudBoltJob struct {
	Links struct {
		Self         CloudBoltHALItem `json:"self"`
		Owner        CloudBoltHALItem `json:"owner"`
		Parent       CloudBoltHALItem `json:"parent"`
		Subjobs      []interface{}    `json:"subjobs"`
		Prerequisite struct {
		} `json:"prerequisite"`
		DependentJobs []interface{}      `json:"dependent-jobs"`
		Order         CloudBoltHALItem   `json:"order"`
		Resource      CloudBoltHALItem   `json:"resource"`
		Servers       []CloudBoltHALItem `json:"servers"`
		LogUrls       struct {
			RawLog string `json:"raw-log"`
			ZipLog string `json:"zip-log"`
		} `json:"log_urls"`
	} `json:"_links"`
	Status   string `json:"status"`
	Type     string `json:"type"`
	Progress struct {
		TotalTasks int      `json:"total-tasks"`
		Completed  int      `json:"completed"`
		Messages   []string `json:"messages"`
	} `json:"progress"`
	StartDate string `json:"start-date"`
	EndDate   string `json:"end-date"`
	Output    string `json:"output"`
}

CloudBoltJob contains metadata about a Job. Useful for getting the status of a running or completed job.

type CloudBoltObject

type CloudBoltObject struct {
	Links struct {
		Self CloudBoltHALItem `json:"self"`
	} `json:"_links"`
	Name string `json:"name"`
	ID   string `json:"id"`
}

CloudBoltObject stores the generic output of objects. Most objects in CloudBolt include Links.Self.Href, Links.Self.Title, Name, and ID

type CloudBoltOrder

type CloudBoltOrder struct {
	Links struct {
		Self       CloudBoltHALItem   `json:"self"`
		Group      CloudBoltHALItem   `json:"group"`
		Owner      CloudBoltHALItem   `json:"owner"`
		ApprovedBy CloudBoltHALItem   `json:"approved-by"`
		Actions    CloudBoltHALItem   `json:"actions"`
		Jobs       []CloudBoltHALItem `json:"jobs"`
	} `json:"_links"`
	Name        string `json:"name"`
	ID          string `json:"id"`
	Status      string `json:"status"`
	Rate        string `json:"rate"`
	CreateDate  string `json:"create-date"`
	ApproveDate string `json:"approve-date"`
	Items       struct {
		DeployItems []struct {
			Blueprint               string `json:"blueprint"`
			BlueprintItemsArguments struct {
				BuildItemBuildServer struct {
					Attributes struct {
						Hostname string `json:"hostname"`
						Quantity int    `json:"quantity"`
					} `json:"attributes"`
					OsBuild     string                 `json:"os-build,omitempty"`
					Environment string                 `json:"environment,omitempty"`
					Parameters  map[string]interface{} `json:"parameters"`
				} `json:"build-item-Server"`
			} `json:"blueprint-items-arguments"`
			ResourceName       string `json:"resource-name"`
			ResourceParameters struct {
			} `json:"resource-parameters"`
		} `json:"deploy-items"`
	} `json:"items"`
}

CloudBoltOrder contains metadata about a CloudBolt Order Returned by DeployBlueprint, GetOrder, and DecomOrder

type CloudBoltResource

type CloudBoltResource struct {
	Links struct {
		Self         CloudBoltHALItem `json:"self"`
		Blueprint    CloudBoltHALItem `json:"blueprint"`
		Owner        CloudBoltHALItem `json:"owner"`
		Group        CloudBoltHALItem `json:"group"`
		ResourceType CloudBoltHALItem `json:"resource-type"`
		Servers      []struct {
			Href  string `json:"href"`
			Title string `json:"title"`
			Tier  string `json:"tier"`
		} `json:"servers"`
		Actions []struct {
			Delete CloudBoltHALItem `json:"Delete,omitempty"`
			Scale  CloudBoltHALItem `json:"Scale,omitempty"`
		} `json:"actions"`
		Jobs    CloudBoltHALItem `json:"jobs"`
		History CloudBoltHALItem `json:"history"`
	} `json:"_links"`
	Name        string `json:"name"`
	ID          string `json:"id"`
	Status      string `json:"status"`
	InstallDate string `json:"install-date"`
}

CloudBoltResource contains metadata about Resources (e.g., "Services") in CloudBolt

type CloudBoltResult

type CloudBoltResult struct {
	Links struct {
		Self CloudBoltHALItem `json:"self"`
	} `json:"_links"`
	Total    int               `json:"total"`
	Count    int               `json:"count"`
	Embedded []CloudBoltObject `json:"_embedded"` // TODO: Maybe call this Items?
}

CloudBoltResult stores the response of paginated calls like `/api/v2/blueprints/` These include a link to the page and an `embedded` list of response objects.

type CloudBoltServer

type CloudBoltServer struct {
	Links struct {
		Self            CloudBoltHALItem `json:"self"`
		Owner           CloudBoltHALItem `json:"owner"`
		Group           CloudBoltHALItem `json:"group"`
		Environment     CloudBoltHALItem `json:"environment"`
		ResourceHandler CloudBoltHALItem `json:"resource-handler"`
		Actions         []struct {
			PowerOn     CloudBoltHALItem `json:"power_on,omitempty"`
			PowerOff    CloudBoltHALItem `json:"power_off,omitempty"`
			Reboot      CloudBoltHALItem `json:"reboot,omitempty"`
			RefreshInfo CloudBoltHALItem `json:"refresh_info,omitempty"`
			Snapshot    CloudBoltHALItem `json:"snapshot,omitempty"`
			AdHocScript CloudBoltHALItem `json:"Ad Hoc Script,omitempty"`
		} `json:"actions"`
		ProvisionJob CloudBoltHALItem `json:"provision-job"`
		OsBuild      CloudBoltHALItem `json:"os-build"`
		Jobs         CloudBoltHALItem `json:"jobs"`
		History      CloudBoltHALItem `json:"history"`
	} `json:"_links"`
	Hostname             string        `json:"hostname"`
	PowerStatus          string        `json:"power-status"`
	Status               string        `json:"status"`
	IP                   string        `json:"ip"`
	Mac                  string        `json:"mac"`
	DateAddedToCloudbolt string        `json:"date-added-to-cloudbolt"`
	CPUCnt               int           `json:"cpu-cnt"`
	MemSize              string        `json:"mem-size"`
	DiskSize             string        `json:"disk-size"`
	OsFamily             string        `json:"os-family"`
	Notes                string        `json:"notes"`
	Labels               []interface{} `json:"labels"`
	Credentials          struct {
		Username string `json:"username"`
		Password string `json:"password"`
	} `json:"credentials"`
	// TODO: This should be a more generic map
	Disks []struct {
		UUID             string `json:"uuid"`
		DiskSize         int    `json:"disk-size"`
		Name             string `json:"name"`
		Datastore        string `json:"datastore"`
		ProvisioningType string `json:"provisioning-type"`
	} `json:"disks"`
	Networks []struct {
		Name          string      `json:"name"`
		Network       string      `json:"network"`
		Mac           string      `json:"mac"`
		IP            interface{} `json:"ip"`
		PrivateIP     string      `json:"private-ip"`
		AdditionalIps string      `json:"additional-ips"`
	} `json:"networks"`
	Parameters struct {
	} `json:"parameters"`
	// TODO: This should be a more generic map
	TechSpecificDetails struct {
		VmwareLinkedClone bool   `json:"vmware-linked-clone"`
		VmwareCluster     string `json:"vmware-cluster"`
	} `json:"tech-specific-details"`
}

CloudBoltServer stores metadata about servers in CloudBolt.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL