Documentation ¶
Overview ¶
Package v1beta1 contains API Schema definitions for the infrastructure v1beta1 API group +kubebuilder:object:generate=true +groupName=infrastructure.cluster.x-k8s.io
Index ¶
- Constants
- Variables
- type PacketCluster
- func (in *PacketCluster) DeepCopy() *PacketCluster
- func (in *PacketCluster) DeepCopyInto(out *PacketCluster)
- func (in *PacketCluster) DeepCopyObject() runtime.Object
- func (c *PacketCluster) Default()
- func (c *PacketCluster) GetConditions() clusterv1.Conditions
- func (*PacketCluster) Hub()
- func (c *PacketCluster) SetConditions(conditions clusterv1.Conditions)
- func (c *PacketCluster) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (c *PacketCluster) ValidateCreate() (admission.Warnings, error)
- func (c *PacketCluster) ValidateDelete() (admission.Warnings, error)
- func (c *PacketCluster) ValidateUpdate(oldRaw runtime.Object) (admission.Warnings, error)
- type PacketClusterList
- type PacketClusterSpec
- type PacketClusterStatus
- type PacketMachine
- func (in *PacketMachine) DeepCopy() *PacketMachine
- func (in *PacketMachine) DeepCopyInto(out *PacketMachine)
- func (in *PacketMachine) DeepCopyObject() runtime.Object
- func (m *PacketMachine) Default()
- func (m *PacketMachine) GetConditions() clusterv1.Conditions
- func (*PacketMachine) Hub()
- func (m *PacketMachine) SetConditions(conditions clusterv1.Conditions)
- func (m *PacketMachine) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (m *PacketMachine) ValidateCreate() (admission.Warnings, error)
- func (m *PacketMachine) ValidateDelete() (admission.Warnings, error)
- func (m *PacketMachine) ValidateUpdate(old runtime.Object) (admission.Warnings, error)
- type PacketMachineList
- type PacketMachineSpec
- type PacketMachineStatus
- type PacketMachineTemplate
- func (in *PacketMachineTemplate) DeepCopy() *PacketMachineTemplate
- func (in *PacketMachineTemplate) DeepCopyInto(out *PacketMachineTemplate)
- func (in *PacketMachineTemplate) DeepCopyObject() runtime.Object
- func (m *PacketMachineTemplate) Default()
- func (*PacketMachineTemplate) Hub()
- func (m *PacketMachineTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error
- func (m *PacketMachineTemplate) ValidateCreate() (admission.Warnings, error)
- func (m *PacketMachineTemplate) ValidateDelete() (admission.Warnings, error)
- func (m *PacketMachineTemplate) ValidateUpdate(_ runtime.Object) (admission.Warnings, error)
- type PacketMachineTemplateList
- type PacketMachineTemplateResource
- type PacketMachineTemplateSpec
- type PacketResourceStatus
- type Tags
- type VIPManagerType
Constants ¶
const ( // DeviceReadyCondition reports on current status of the Equinix Metal device. Ready indicates the instance is in a Running state. DeviceReadyCondition clusterv1.ConditionType = "InstanceReady" // InstanceNotFoundReason used when the instance couldn't be retrieved. InstanceNotFoundReason = "InstanceNotFound" // InstanceTerminatedReason instance is in a terminated state. InstanceTerminatedReason = "InstanceTerminated" // InstanceStoppedReason instance is in a stopped state. InstanceStoppedReason = "InstanceStopped" // InstanceNotReadyReason used when the instance is in a pending state. InstanceNotReadyReason = "InstanceNotReady" // InstanceProvisionStartedReason set when the provisioning of an instance started. InstanceProvisionStartedReason = "InstanceProvisionStarted" // InstanceProvisionFailedReason used for failures during instance provisioning. InstanceProvisionFailedReason = "InstanceProvisionFailed" // WaitingForClusterInfrastructureReason used when machine is waiting for cluster infrastructure to be ready before proceeding. WaitingForClusterInfrastructureReason = "WaitingForClusterInfrastructure" // WaitingForBootstrapDataReason used when machine is waiting for bootstrap data to be ready before proceeding. WaitingForBootstrapDataReason = "WaitingForBootstrapData" )
const ( // ControlPlaneTag defines what we tag the control plane nodes in Equinix Metal. ControlPlaneTag = "kubernetes.io/role:master" // WorkerTag defines what we tag the control plane nodes in Equinix Metal. WorkerTag = "kubernetes.io/role:node" )
const ( // MachineFinalizer allows ReconcilePacketMachine to clean up Packet resources before // removing it from the apiserver. MachineFinalizer = "packetmachine.infrastructure.cluster.x-k8s.io" )
const ( // NetworkInfrastructureReadyCondition reports of current status of cluster infrastructure. NetworkInfrastructureReadyCondition clusterv1.ConditionType = "NetworkInfrastructureReady" )
Variables ¶
var ( // GroupVersion is group version used to register these objects. GroupVersion = schema.GroupVersion{Group: "infrastructure.cluster.x-k8s.io", Version: "v1beta1"} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = schemeBuilder.AddToScheme )
var ( // PacketResourceStatusNew represents a Packet resource requested. // The Packet infrastucture uses a queue to avoid any abuse. So a resource // does not get created straigh away but it can wait for a bit in a queue. PacketResourceStatusNew = PacketResourceStatus("new") // PacketResourceStatusQueued represents a device waiting for his turn to be provisioned. // Time in queue depends on how many creation requests you already issued, or // from how many resources waiting to be deleted we have for you. PacketResourceStatusQueued = PacketResourceStatus("queued") // PacketResourceStatusProvisioning represents a resource that got dequeued // and it is actively processed by a worker. PacketResourceStatusProvisioning = PacketResourceStatus("provisioning") // PacketResourceStatusRunning represents a Packet resource already provisioned and in a active state. PacketResourceStatusRunning = PacketResourceStatus("active") // PacketResourceStatusErrored represents a Packet resource in a errored state. PacketResourceStatusErrored = PacketResourceStatus("errored") // PacketResourceStatusOff represents a Packet resource in off state. PacketResourceStatusOff = PacketResourceStatus("off") )
Functions ¶
This section is empty.
Types ¶
type PacketCluster ¶
type PacketCluster struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec PacketClusterSpec `json:"spec,omitempty"` Status PacketClusterStatus `json:"status,omitempty"` }
PacketCluster is the Schema for the packetclusters API.
func (*PacketCluster) DeepCopy ¶
func (in *PacketCluster) DeepCopy() *PacketCluster
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketCluster.
func (*PacketCluster) DeepCopyInto ¶
func (in *PacketCluster) DeepCopyInto(out *PacketCluster)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PacketCluster) DeepCopyObject ¶
func (in *PacketCluster) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PacketCluster) Default ¶
func (c *PacketCluster) Default()
Default implements webhook.Defaulter so a webhook will be registered for the type.
func (*PacketCluster) GetConditions ¶
func (c *PacketCluster) GetConditions() clusterv1.Conditions
GetConditions returns the list of conditions for an PacketCluster API object.
func (*PacketCluster) Hub ¶
func (*PacketCluster) Hub()
Hub marks PacketCluster as a conversion hub.
func (*PacketCluster) SetConditions ¶
func (c *PacketCluster) SetConditions(conditions clusterv1.Conditions)
SetConditions will set the given conditions on an PacketCluster object.
func (*PacketCluster) SetupWebhookWithManager ¶
func (c *PacketCluster) SetupWebhookWithManager(mgr ctrl.Manager) error
SetupWebhookWithManager sets up and registers the webhook with the manager.
func (*PacketCluster) ValidateCreate ¶
func (c *PacketCluster) ValidateCreate() (admission.Warnings, error)
ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (*PacketCluster) ValidateDelete ¶
func (c *PacketCluster) ValidateDelete() (admission.Warnings, error)
ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (*PacketCluster) ValidateUpdate ¶
ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
type PacketClusterList ¶
type PacketClusterList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []PacketCluster `json:"items"` }
PacketClusterList contains a list of PacketCluster.
func (*PacketClusterList) DeepCopy ¶
func (in *PacketClusterList) DeepCopy() *PacketClusterList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketClusterList.
func (*PacketClusterList) DeepCopyInto ¶
func (in *PacketClusterList) DeepCopyInto(out *PacketClusterList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PacketClusterList) DeepCopyObject ¶
func (in *PacketClusterList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PacketClusterList) Hub ¶
func (*PacketClusterList) Hub()
Hub marks PacketClusterList as a conversion hub.
type PacketClusterSpec ¶
type PacketClusterSpec struct { // ProjectID represents the Packet Project where this cluster will be placed into ProjectID string `json:"projectID"` // Facility represents the Packet facility for this cluster // +optional Facility string `json:"facility,omitempty"` // Metro represents the Packet metro for this cluster // +optional Metro string `json:"metro,omitempty"` // ControlPlaneEndpoint represents the endpoint used to communicate with the control plane. // +optional ControlPlaneEndpoint clusterv1.APIEndpoint `json:"controlPlaneEndpoint"` // VIPManager represents whether this cluster uses CPEM or kube-vip to // manage its vip for the api server IP // +kubebuilder:validation:Enum=CPEM;KUBE_VIP // +kubebuilder:default:=CPEM VIPManager VIPManagerType `json:"vipManager"` }
PacketClusterSpec defines the desired state of PacketCluster.
func (*PacketClusterSpec) DeepCopy ¶
func (in *PacketClusterSpec) DeepCopy() *PacketClusterSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketClusterSpec.
func (*PacketClusterSpec) DeepCopyInto ¶
func (in *PacketClusterSpec) DeepCopyInto(out *PacketClusterSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PacketClusterStatus ¶
type PacketClusterStatus struct { // Ready denotes that the cluster (infrastructure) is ready. // +optional Ready bool `json:"ready"` // Conditions defines current service state of the PacketCluster. // +optional Conditions clusterv1.Conditions `json:"conditions,omitempty"` }
PacketClusterStatus defines the observed state of PacketCluster.
func (*PacketClusterStatus) DeepCopy ¶
func (in *PacketClusterStatus) DeepCopy() *PacketClusterStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketClusterStatus.
func (*PacketClusterStatus) DeepCopyInto ¶
func (in *PacketClusterStatus) DeepCopyInto(out *PacketClusterStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PacketMachine ¶
type PacketMachine struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec PacketMachineSpec `json:"spec,omitempty"` Status PacketMachineStatus `json:"status,omitempty"` }
PacketMachine is the Schema for the packetmachines API.
func (*PacketMachine) DeepCopy ¶
func (in *PacketMachine) DeepCopy() *PacketMachine
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachine.
func (*PacketMachine) DeepCopyInto ¶
func (in *PacketMachine) DeepCopyInto(out *PacketMachine)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PacketMachine) DeepCopyObject ¶
func (in *PacketMachine) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PacketMachine) Default ¶
func (m *PacketMachine) Default()
Default implements webhookutil.defaulter so a webhook will be registered for the type.
func (*PacketMachine) GetConditions ¶
func (m *PacketMachine) GetConditions() clusterv1.Conditions
GetConditions returns the list of conditions for an PacketMachine API object.
func (*PacketMachine) Hub ¶
func (*PacketMachine) Hub()
Hub marks PacketMachine as a conversion hub.
func (*PacketMachine) SetConditions ¶
func (m *PacketMachine) SetConditions(conditions clusterv1.Conditions)
SetConditions will set the given conditions on an PacketMachine object.
func (*PacketMachine) SetupWebhookWithManager ¶
func (m *PacketMachine) SetupWebhookWithManager(mgr ctrl.Manager) error
func (*PacketMachine) ValidateCreate ¶
func (m *PacketMachine) ValidateCreate() (admission.Warnings, error)
ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (*PacketMachine) ValidateDelete ¶
func (m *PacketMachine) ValidateDelete() (admission.Warnings, error)
ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (*PacketMachine) ValidateUpdate ¶
ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
type PacketMachineList ¶
type PacketMachineList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []PacketMachine `json:"items"` }
PacketMachineList contains a list of PacketMachine.
func (*PacketMachineList) DeepCopy ¶
func (in *PacketMachineList) DeepCopy() *PacketMachineList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineList.
func (*PacketMachineList) DeepCopyInto ¶
func (in *PacketMachineList) DeepCopyInto(out *PacketMachineList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PacketMachineList) DeepCopyObject ¶
func (in *PacketMachineList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PacketMachineList) Hub ¶
func (*PacketMachineList) Hub()
Hub marks PacketMachineList as a conversion hub.
type PacketMachineSpec ¶
type PacketMachineSpec struct { OS string `json:"os"` BillingCycle metal.DeviceCreateInputBillingCycle `json:"billingCycle,omitempty"` MachineType string `json:"machineType"` SSHKeys []string `json:"sshKeys,omitempty"` // Facility represents the Packet facility for this machine. // Override from the PacketCluster spec. // +optional Facility string `json:"facility,omitempty"` // Metro represents the Packet metro for this machine // Override from the PacketCluster spec. // +optional Metro string `json:"metro,omitempty"` // IPXEUrl can be used to set the pxe boot url when using custom OSes with this provider. // Note that OS should also be set to "custom_ipxe" if using this value. // +optional IPXEUrl string `json:"ipxeURL,omitempty"` // HardwareReservationID is the unique device hardware reservation ID, a comma separated list of // hardware reservation IDs, or `next-available` to automatically let the Packet api determine one. // +optional HardwareReservationID string `json:"hardwareReservationID,omitempty"` // ProviderID is the unique identifier as specified by the cloud provider. // +optional ProviderID *string `json:"providerID,omitempty"` // Tags is an optional set of tags to add to Packet resources managed by the Packet provider. // +optional Tags Tags `json:"tags,omitempty"` }
PacketMachineSpec defines the desired state of PacketMachine.
func (*PacketMachineSpec) DeepCopy ¶
func (in *PacketMachineSpec) DeepCopy() *PacketMachineSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineSpec.
func (*PacketMachineSpec) DeepCopyInto ¶
func (in *PacketMachineSpec) DeepCopyInto(out *PacketMachineSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PacketMachineStatus ¶
type PacketMachineStatus struct { // Ready is true when the provider resource is ready. // +optional Ready bool `json:"ready"` // Addresses contains the Packet device associated addresses. Addresses []corev1.NodeAddress `json:"addresses,omitempty"` // InstanceStatus is the status of the Packet device instance for this machine. // +optional InstanceStatus *PacketResourceStatus `json:"instanceStatus,omitempty"` // Any transient errors that occur during the reconciliation of Machines // can be added as events to the Machine object and/or logged in the // controller's output. // +optional FailureReason *capierrors.MachineStatusError `json:"failureReason,omitempty"` // FailureMessage will be set in the event that there is a terminal problem // reconciling the Machine and will contain a more verbose string suitable // for logging and human consumption. // // This field should not be set for transitive errors that a controller // faces that are expected to be fixed automatically over // time (like service outages), but instead indicate that something is // fundamentally wrong with the Machine's spec or the configuration of // the controller, and that manual intervention is required. Examples // of terminal errors would be invalid combinations of settings in the // spec, values that are unsupported by the controller, or the // responsible controller itself being critically misconfigured. // // Any transient errors that occur during the reconciliation of Machines // can be added as events to the Machine object and/or logged in the // controller's output. // +optional FailureMessage *string `json:"failureMessage,omitempty"` // Conditions defines current service state of the PacketMachine. // +optional Conditions clusterv1.Conditions `json:"conditions,omitempty"` }
PacketMachineStatus defines the observed state of PacketMachine.
func (*PacketMachineStatus) DeepCopy ¶
func (in *PacketMachineStatus) DeepCopy() *PacketMachineStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineStatus.
func (*PacketMachineStatus) DeepCopyInto ¶
func (in *PacketMachineStatus) DeepCopyInto(out *PacketMachineStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PacketMachineTemplate ¶
type PacketMachineTemplate struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec PacketMachineTemplateSpec `json:"spec,omitempty"` }
PacketMachineTemplate is the Schema for the packetmachinetemplates API.
func (*PacketMachineTemplate) DeepCopy ¶
func (in *PacketMachineTemplate) DeepCopy() *PacketMachineTemplate
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineTemplate.
func (*PacketMachineTemplate) DeepCopyInto ¶
func (in *PacketMachineTemplate) DeepCopyInto(out *PacketMachineTemplate)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PacketMachineTemplate) DeepCopyObject ¶
func (in *PacketMachineTemplate) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PacketMachineTemplate) Default ¶
func (m *PacketMachineTemplate) Default()
Default implements webhookutil.defaulter so a webhook will be registered for the type.
func (*PacketMachineTemplate) Hub ¶
func (*PacketMachineTemplate) Hub()
Hub marks PacketMachineTemplate as a conversion hub.
func (*PacketMachineTemplate) SetupWebhookWithManager ¶
func (m *PacketMachineTemplate) SetupWebhookWithManager(mgr ctrl.Manager) error
func (*PacketMachineTemplate) ValidateCreate ¶
func (m *PacketMachineTemplate) ValidateCreate() (admission.Warnings, error)
ValidateCreate implements webhook.Validator so a webhook will be registered for the type.
func (*PacketMachineTemplate) ValidateDelete ¶
func (m *PacketMachineTemplate) ValidateDelete() (admission.Warnings, error)
ValidateDelete implements webhook.Validator so a webhook will be registered for the type.
func (*PacketMachineTemplate) ValidateUpdate ¶
ValidateUpdate implements webhook.Validator so a webhook will be registered for the type.
type PacketMachineTemplateList ¶
type PacketMachineTemplateList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []PacketMachineTemplate `json:"items"` }
PacketMachineTemplateList contains a list of PacketMachineTemplate.
func (*PacketMachineTemplateList) DeepCopy ¶
func (in *PacketMachineTemplateList) DeepCopy() *PacketMachineTemplateList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineTemplateList.
func (*PacketMachineTemplateList) DeepCopyInto ¶
func (in *PacketMachineTemplateList) DeepCopyInto(out *PacketMachineTemplateList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*PacketMachineTemplateList) DeepCopyObject ¶
func (in *PacketMachineTemplateList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
func (*PacketMachineTemplateList) Hub ¶
func (*PacketMachineTemplateList) Hub()
Hub marks PacketMachineTemplateList as a conversion hub.
type PacketMachineTemplateResource ¶
type PacketMachineTemplateResource struct { // Spec is the specification of the desired behavior of the machine. Spec PacketMachineSpec `json:"spec"` }
PacketMachineTemplateResource describes the data needed to create am PacketMachine from a template.
func (*PacketMachineTemplateResource) DeepCopy ¶
func (in *PacketMachineTemplateResource) DeepCopy() *PacketMachineTemplateResource
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineTemplateResource.
func (*PacketMachineTemplateResource) DeepCopyInto ¶
func (in *PacketMachineTemplateResource) DeepCopyInto(out *PacketMachineTemplateResource)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PacketMachineTemplateSpec ¶
type PacketMachineTemplateSpec struct {
Template PacketMachineTemplateResource `json:"template"`
}
PacketMachineTemplateSpec defines the desired state of PacketMachineTemplate.
func (*PacketMachineTemplateSpec) DeepCopy ¶
func (in *PacketMachineTemplateSpec) DeepCopy() *PacketMachineTemplateSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PacketMachineTemplateSpec.
func (*PacketMachineTemplateSpec) DeepCopyInto ¶
func (in *PacketMachineTemplateSpec) DeepCopyInto(out *PacketMachineTemplateSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type PacketResourceStatus ¶
type PacketResourceStatus string
PacketResourceStatus describes the status of a Packet resource.
type Tags ¶
type Tags []string
Tags defines a slice of tags.
func (Tags) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Tags.
func (Tags) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type VIPManagerType ¶ added in v0.6.0
type VIPManagerType string
VIPManagerType describes if the VIP will be managed by CPEM or kube-vip.
Source Files ¶
- groupversion_info.go
- packetcluster_conversion.go
- packetcluster_types.go
- packetcluster_webhook.go
- packetmachine_conversion.go
- packetmachine_types.go
- packetmachine_webhook.go
- packetmachinetemplate_conversion.go
- packetmachinetemplate_types.go
- packetmachinetemplate_webhook.go
- tags.go
- types.go
- zz_generated.deepcopy.go