2017-09-12 11:30:39 -04:00
|
|
|
package oci
|
2017-02-13 05:35:14 -05:00
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
2017-09-12 11:30:39 -04:00
|
|
|
// InstanceService enables communicating with the OCI compute API's instance
|
2017-02-13 05:35:14 -05:00
|
|
|
// related endpoints.
|
|
|
|
type InstanceService struct {
|
|
|
|
client *baseClient
|
|
|
|
}
|
|
|
|
|
|
|
|
// NewInstanceService creates a new InstanceService for communicating with the
|
2017-09-12 11:30:39 -04:00
|
|
|
// OCI compute API's instance related endpoints.
|
2017-02-13 05:35:14 -05:00
|
|
|
func NewInstanceService(s *baseClient) *InstanceService {
|
|
|
|
return &InstanceService{
|
|
|
|
client: s.New().Path("instances/"),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-09-12 11:30:39 -04:00
|
|
|
// Instance details a OCI compute instance.
|
2017-02-13 05:35:14 -05:00
|
|
|
type Instance struct {
|
|
|
|
// The Availability Domain the instance is running in.
|
|
|
|
AvailabilityDomain string `json:"availabilityDomain"`
|
|
|
|
|
|
|
|
// The OCID of the compartment that contains the instance.
|
|
|
|
CompartmentID string `json:"compartmentId"`
|
|
|
|
|
|
|
|
// A user-friendly name. Does not have to be unique, and it's changeable.
|
|
|
|
DisplayName string `json:"displayName,omitempty"`
|
|
|
|
|
|
|
|
// The OCID of the instance.
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
|
|
|
// The image used to boot the instance.
|
|
|
|
ImageID string `json:"imageId,omitempty"`
|
|
|
|
|
|
|
|
// The current state of the instance. Allowed values:
|
|
|
|
// - PROVISIONING
|
|
|
|
// - RUNNING
|
|
|
|
// - STARTING
|
|
|
|
// - STOPPING
|
|
|
|
// - STOPPED
|
|
|
|
// - CREATING_IMAGE
|
|
|
|
// - TERMINATING
|
|
|
|
// - TERMINATED
|
|
|
|
LifecycleState string `json:"lifecycleState"`
|
|
|
|
|
|
|
|
// Custom metadata that you provide.
|
|
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
|
|
|
|
|
|
// The region that contains the Availability Domain the instance is running in.
|
|
|
|
Region string `json:"region"`
|
|
|
|
|
|
|
|
// The shape of the instance. The shape determines the number of CPUs
|
|
|
|
// and the amount of memory allocated to the instance.
|
|
|
|
Shape string `json:"shape"`
|
|
|
|
|
|
|
|
// The date and time the instance was created.
|
|
|
|
TimeCreated time.Time `json:"timeCreated"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetInstanceParams are the paramaters available when communicating with the
|
|
|
|
// GetInstance API endpoint.
|
|
|
|
type GetInstanceParams struct {
|
|
|
|
ID string `url:"instanceId,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get returns a single Instance
|
|
|
|
func (s *InstanceService) Get(params *GetInstanceParams) (Instance, error) {
|
|
|
|
instance := Instance{}
|
|
|
|
e := &APIError{}
|
|
|
|
|
|
|
|
_, err := s.client.New().Get(params.ID).Receive(&instance, e)
|
|
|
|
err = firstError(err, e)
|
|
|
|
|
|
|
|
return instance, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// LaunchInstanceParams are the parameters available when communicating with
|
|
|
|
// the LunchInstance API endpoint.
|
|
|
|
type LaunchInstanceParams struct {
|
|
|
|
AvailabilityDomain string `json:"availabilityDomain,omitempty"`
|
|
|
|
CompartmentID string `json:"compartmentId,omitempty"`
|
|
|
|
DisplayName string `json:"displayName,omitempty"`
|
|
|
|
ImageID string `json:"imageId,omitempty"`
|
|
|
|
Metadata map[string]string `json:"metadata,omitempty"`
|
|
|
|
OPCiPXEScript string `json:"opcIpxeScript,omitempty"`
|
|
|
|
Shape string `json:"shape,omitempty"`
|
|
|
|
SubnetID string `json:"subnetId,omitempty"`
|
|
|
|
}
|
|
|
|
|
2017-09-12 11:30:39 -04:00
|
|
|
// Launch creates a new OCI compute instance. It does *not* wait for the
|
2017-02-13 05:35:14 -05:00
|
|
|
// instance to boot.
|
|
|
|
func (s *InstanceService) Launch(params *LaunchInstanceParams) (Instance, error) {
|
|
|
|
instance := &Instance{}
|
|
|
|
e := &APIError{}
|
|
|
|
|
|
|
|
_, err := s.client.New().Post("").SetBody(params).Receive(instance, e)
|
|
|
|
err = firstError(err, e)
|
|
|
|
|
|
|
|
return *instance, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// TerminateInstanceParams are the parameters available when communicating with
|
|
|
|
// the TerminateInstance API endpoint.
|
|
|
|
type TerminateInstanceParams struct {
|
|
|
|
ID string `url:"instanceId,omitempty"`
|
|
|
|
}
|
|
|
|
|
2017-09-12 11:30:39 -04:00
|
|
|
// Terminate terminates a running OCI compute instance.
|
2017-02-13 05:35:14 -05:00
|
|
|
// instance to boot.
|
|
|
|
func (s *InstanceService) Terminate(params *TerminateInstanceParams) error {
|
|
|
|
e := &APIError{}
|
|
|
|
|
|
|
|
_, err := s.client.New().Delete(params.ID).SetBody(params).Receive(nil, e)
|
|
|
|
err = firstError(err, e)
|
|
|
|
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetResourceState GETs the LifecycleState of the given instance id.
|
|
|
|
func (s *InstanceService) GetResourceState(id string) (string, error) {
|
|
|
|
instance, err := s.Get(&GetInstanceParams{ID: id})
|
|
|
|
if err != nil {
|
|
|
|
return "", err
|
|
|
|
}
|
|
|
|
return instance.LifecycleState, nil
|
|
|
|
}
|