diff options
Diffstat (limited to 'vendor/github.com/mitchellh/packer/builder/oracle/oci/client/image.go')
-rw-r--r-- | vendor/github.com/mitchellh/packer/builder/oracle/oci/client/image.go | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/vendor/github.com/mitchellh/packer/builder/oracle/oci/client/image.go b/vendor/github.com/mitchellh/packer/builder/oracle/oci/client/image.go new file mode 100644 index 00000000..802b4650 --- /dev/null +++ b/vendor/github.com/mitchellh/packer/builder/oracle/oci/client/image.go @@ -0,0 +1,122 @@ +package oci + +import ( + "time" +) + +// ImageService enables communicating with the OCI compute API's instance +// related endpoints. +type ImageService struct { + client *baseClient +} + +// NewImageService creates a new ImageService for communicating with the +// OCI compute API's instance related endpoints. +func NewImageService(s *baseClient) *ImageService { + return &ImageService{ + client: s.New().Path("images/"), + } +} + +// Image details a OCI boot disk image. +type Image struct { + // The OCID of the image originally used to launch the instance. + BaseImageID string `json:"baseImageId,omitempty"` + + // The OCID of the compartment containing the instance you want to use + // as the basis for the image. + CompartmentID string `json:"compartmentId"` + + // Whether instances launched with this image can be used to create new + // images. + CreateImageAllowed bool `json:"createImageAllowed"` + + // A user-friendly name for the image. It does not have to be unique, + // and it's changeable. You cannot use an Oracle-provided image name + // as a custom image name. + DisplayName string `json:"displayName,omitempty"` + + // The OCID of the image. + ID string `json:"id"` + + // Current state of the image. Allowed values are: + // - PROVISIONING + // - AVAILABLE + // - DISABLED + // - DELETED + LifecycleState string `json:"lifecycleState"` + + // The image's operating system (e.g. Oracle Linux). + OperatingSystem string `json:"operatingSystem"` + + // The image's operating system version (e.g. 7.2). + OperatingSystemVersion string `json:"operatingSystemVersion"` + + // The date and time the image was created. + TimeCreated time.Time `json:"timeCreated"` +} + +// GetImageParams are the paramaters available when communicating with the +// GetImage API endpoint. +type GetImageParams struct { + ID string `url:"imageId"` +} + +// Get returns a single Image +func (s *ImageService) Get(params *GetImageParams) (Image, error) { + image := Image{} + e := &APIError{} + + _, err := s.client.New().Get(params.ID).Receive(&image, e) + err = firstError(err, e) + + return image, err +} + +// CreateImageParams are the parameters available when communicating with +// the CreateImage API endpoint. +type CreateImageParams struct { + CompartmentID string `json:"compartmentId"` + DisplayName string `json:"displayName,omitempty"` + InstanceID string `json:"instanceId"` +} + +// Create creates a new custom image based on a running compute instance. It +// does *not* wait for the imaging process to finish. +func (s *ImageService) Create(params *CreateImageParams) (Image, error) { + image := Image{} + e := &APIError{} + + _, err := s.client.New().Post("").SetBody(params).Receive(&image, &e) + err = firstError(err, e) + + return image, err +} + +// GetResourceState GETs the LifecycleState of the given image id. +func (s *ImageService) GetResourceState(id string) (string, error) { + image, err := s.Get(&GetImageParams{ID: id}) + if err != nil { + return "", err + } + return image.LifecycleState, nil + +} + +// DeleteImageParams are the parameters available when communicating with +// the DeleteImage API endpoint. +type DeleteImageParams struct { + ID string `url:"imageId"` +} + +// Delete deletes an existing custom image. +// NOTE: Deleting an image results in the API endpoint returning 404 on +// subsequent calls. As such deletion can't be waited on with a Waiter. +func (s *ImageService) Delete(params *DeleteImageParams) error { + e := &APIError{} + + _, err := s.client.New().Delete(params.ID).SetBody(params).Receive(nil, e) + err = firstError(err, e) + + return err +} |