diff --git a/Makefile b/Makefile index 1f802ad3fa..8c980e5be1 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,7 @@ MOCKGEN := $(TOOLS_BIN_DIR)/mockgen CONVERSION_GEN := $(TOOLS_BIN_DIR)/conversion-gen RELEASE_NOTES_BIN := bin/release-notes RELEASE_NOTES := $(TOOLS_DIR)/$(RELEASE_NOTES_BIN) +GINKGO := $(abspath $(TOOLS_BIN_DIR)/ginkgo) # Define Docker related variables. Releases should modify and double check these vars. REGISTRY ?= gcr.io/$(shell gcloud config get-value project) @@ -128,13 +129,15 @@ endif ## -------------------------------------- ## Binaries ## -------------------------------------- +$(GINKGO): $(TOOLS_DIR)/go.mod + cd $(TOOLS_DIR) && go build -tags=tools -o $(BIN_DIR)/ginkgo github.com/onsi/ginkgo/ginkgo .PHONY: binaries binaries: manager ## Builds and installs all binaries .PHONY: manager manager: ## Build manager binary. - go build -o $(BIN_DIR)/manager . + go build -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/manager . ## -------------------------------------- ## Tooling Binaries @@ -196,7 +199,7 @@ generate-go: $(CONTROLLER_GEN) $(CONVERSION_GEN) $(MOCKGEN) ## Runs Go related g object:headerFile=./hack/boilerplate/boilerplate.generatego.txt $(CONVERSION_GEN) \ - --input-dirs=./api/v1alpha2 \ + --input-dirs=./api/v1alpha3 \ --output-file-base=zz_generated.conversion \ --go-header-file=./hack/boilerplate/boilerplate.generatego.txt go generate ./... @@ -295,20 +298,7 @@ release: clean-release ## Builds and push container images using the latest git .PHONY: release-manifests release-manifests: $(RELEASE_DIR) ## Builds the manifests to publish with a release - kustomize build config > $(RELEASE_DIR)/infrastructure-components.yaml - -.PHONY: release-binary -release-binary: $(RELEASE_DIR) - docker run \ - --rm \ - -e CGO_ENABLED=0 \ - -e GOOS=$(GOOS) \ - -e GOARCH=$(GOARCH) \ - -v "$$(pwd):/workspace$(DOCKER_VOL_OPTS)" \ - -w /workspace \ - golang:1.13.8 \ - go build -a -ldflags '$(LDFLAGS) -extldflags "-static"' \ - -o $(RELEASE_DIR)/$(notdir $(RELEASE_BINARY))-$(GOOS)-$(GOARCH) $(RELEASE_BINARY) + $(KUSTOMIZE) build config > $(RELEASE_DIR)/infrastructure-components.yaml .PHONY: release-staging release-staging: ## Builds and push container images to the staging bucket. @@ -347,7 +337,7 @@ create-cluster: $(CLUSTERCTL) $(ENVSUBST) ## Create a development Kubernetes clu kubectl wait --for=condition=Available --timeout=5m apiservice v1beta1.webhook.cert-manager.io # Deploy CAPI - kubectl apply -f https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.3.0-rc.3/cluster-api-components.yaml + kubectl apply -f https://github.com/kubernetes-sigs/cluster-api/releases/download/v0.3.0/cluster-api-components.yaml # Deploy CAPO kustomize build config | $(ENVSUBST) | kubectl apply -f - @@ -380,7 +370,7 @@ create-cluster: $(CLUSTERCTL) $(ENVSUBST) ## Create a development Kubernetes clu # Deploy calico kubectl --kubeconfig=./kubeconfig apply -f https://docs.projectcalico.org/manifests/calico.yaml - # FIXME: + # Create a worker node with MachineDeployment. kubectl apply -f examples/_out/machinedeployment.yaml diff --git a/PROJECT b/PROJECT index 30b2bb8bed..d848ca5525 100644 --- a/PROJECT +++ b/PROJECT @@ -2,15 +2,6 @@ version: "2" domain: cluster.x-k8s.io repo: sigs.k8s.io/cluster-api-provider-openstack resources: -- group: infrastructure - version: v1alpha2 - kind: OpenStackCluster -- group: infrastructure - version: v1alpha2 - kind: OpenStackMachine -- group: infrastructure - version: v1alpha2 - kind: OpenStackMachineTemplate - group: infrastructure version: v1alpha3 kind: OpenStackCluster diff --git a/api/v1alpha2/groupversion_info.go b/api/v1alpha2/groupversion_info.go deleted file mode 100644 index 524a6cefb3..0000000000 --- a/api/v1alpha2/groupversion_info.go +++ /dev/null @@ -1,36 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package v1alpha2 contains API Schema definitions for the infrastructure v1alpha2 API group -// +kubebuilder:object:generate=true -// +groupName=infrastructure.cluster.x-k8s.io -package v1alpha2 - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - "sigs.k8s.io/controller-runtime/pkg/scheme" -) - -var ( - // GroupVersion is group version used to register these objects - GroupVersion = schema.GroupVersion{Group: "infrastructure.cluster.x-k8s.io", Version: "v1alpha2"} - - // SchemeBuilder is used to add go types to the GroupVersionKind scheme - SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} - - // AddToScheme adds the types in this group-version to the given scheme. - AddToScheme = SchemeBuilder.AddToScheme -) diff --git a/api/v1alpha2/openstackcluster_types.go b/api/v1alpha2/openstackcluster_types.go deleted file mode 100644 index 413f4afca4..0000000000 --- a/api/v1alpha2/openstackcluster_types.go +++ /dev/null @@ -1,160 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha2 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - // ClusterFinalizer allows ReconcileOpenStackCluster to clean up OpenStack resources associated with OpenStackCluster before - // removing it from the apiserver. - ClusterFinalizer = "openstackcluster.infrastructure.cluster.x-k8s.io" -) - -// OpenStackClusterSpec defines the desired state of OpenStackCluster -type OpenStackClusterSpec struct { - - // The name of the secret containing the openstack credentials - // +optional - CloudsSecret *corev1.SecretReference `json:"cloudsSecret"` - - // The name of the cloud to use from the clouds secret - // +optional - CloudName string `json:"cloudName"` - - // NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a - // network, a subnet with NodeCIDR, and a router connected to this subnet. - // If you leave this empty, no network will be created. - NodeCIDR string `json:"nodeCidr,omitempty"` - - // If NodeCIDR cannot be set this can be used to detect an existing network. - Network Filter `json:"network,omitempty"` - - // If NodeCIDR cannot be set this can be used to detect an existing subnet. - Subnet SubnetFilter `json:"subnet,omitempty"` - - // DNSNameservers is the list of nameservers for OpenStack Subnet being created. - // Set this value when you need create a new network/subnet while the access - // through DNS is required. - DNSNameservers []string `json:"dnsNameservers,omitempty"` - // ExternalRouterIPs is an array of externalIPs on the respective subnets. - // This is necessary if the router needs a fixed ip in a specific subnet. - ExternalRouterIPs []ExternalRouterIPParam `json:"externalRouterIPs,omitempty"` - // ExternalNetworkID is the ID of an external OpenStack Network. This is necessary - // to get public internet to the VMs. - ExternalNetworkID string `json:"externalNetworkId,omitempty"` - - // UseOctavia is weather LoadBalancer Service is Octavia or not - // +optional - UseOctavia bool `json:"useOctavia,omitempty"` - - // ManagedAPIServerLoadBalancer defines whether a LoadBalancer for the - // APIServer should be created. If set to true the following properties are - // mandatory: APIServerLoadBalancerFloatingIP, APIServerLoadBalancerPort - // +optional - ManagedAPIServerLoadBalancer bool `json:"managedAPIServerLoadBalancer"` - - // APIServerLoadBalancerFloatingIP is the floatingIP which will be associated - // to the APIServer loadbalancer. The floatingIP will be created if it not - // already exists. - APIServerLoadBalancerFloatingIP string `json:"apiServerLoadBalancerFloatingIP,omitempty"` - - // APIServerLoadBalancerPort is the port on which the listener on the APIServer - // loadbalancer will be created - APIServerLoadBalancerPort int `json:"apiServerLoadBalancerPort,omitempty"` - - // APIServerLoadBalancerAdditionalPorts adds additional ports to the APIServerLoadBalancer - APIServerLoadBalancerAdditionalPorts []int `json:"apiServerLoadBalancerAdditionalPorts,omitempty"` - - // ManagedSecurityGroups defines that kubernetes manages the OpenStack security groups - // for now, that means that we'll create two security groups, one allowing SSH - // and API access from everywhere, and another one that allows all traffic to/from - // machines belonging to that group. In the future, we could make this more flexible. - // +optional - ManagedSecurityGroups bool `json:"managedSecurityGroups"` - - // DisablePortSecurity disables the port security of the network created for the - // Kubernetes cluster, which also disables SecurityGroups - DisablePortSecurity bool `json:"disablePortSecurity,omitempty"` - - // Tags for all resources in cluster - Tags []string `json:"tags,omitempty"` - - // Default: True. In case of server tag errors, set to False - DisableServerTags bool `json:"disableServerTags,omitempty"` - - // CAKeyPair is the key pair for ca certs. - CAKeyPair KeyPair `json:"caKeyPair,omitempty"` - - //EtcdCAKeyPair is the key pair for etcd. - EtcdCAKeyPair KeyPair `json:"etcdCAKeyPair,omitempty"` - - // FrontProxyCAKeyPair is the key pair for FrontProxyKeyPair. - FrontProxyCAKeyPair KeyPair `json:"frontProxyCAKeyPair,omitempty"` - - // SAKeyPair is the service account key pair. - SAKeyPair KeyPair `json:"saKeyPair,omitempty"` -} - -// OpenStackClusterStatus defines the observed state of OpenStackCluster -type OpenStackClusterStatus struct { - Ready bool `json:"ready"` - // APIEndpoints represents the endpoints to communicate with the control plane. - // +optional - APIEndpoints []APIEndpoint `json:"apiEndpoints,omitempty"` - - // Network contains all information about the created OpenStack Network. - // It includes Subnets and Router. - Network *Network `json:"network,omitempty"` - - // ControlPlaneSecurityGroups contains all the information about the OpenStack - // Security Group that needs to be applied to control plane nodes. - // TODO: Maybe instead of two properties, we add a property to the group? - ControlPlaneSecurityGroup *SecurityGroup `json:"controlPlaneSecurityGroup,omitempty"` - - // GlobalSecurityGroup contains all the information about the OpenStack Security - // Group that needs to be applied to all nodes, both control plane and worker nodes. - GlobalSecurityGroup *SecurityGroup `json:"globalSecurityGroup,omitempty"` -} - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=openstackclusters,scope=Namespaced -// +kubebuilder:subresource:status - -// OpenStackCluster is the Schema for the openstackclusters API -type OpenStackCluster struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec OpenStackClusterSpec `json:"spec,omitempty"` - Status OpenStackClusterStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// OpenStackClusterList contains a list of OpenStackCluster -type OpenStackClusterList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []OpenStackCluster `json:"items"` -} - -func init() { - SchemeBuilder.Register(&OpenStackCluster{}, &OpenStackClusterList{}) -} diff --git a/api/v1alpha2/openstackmachine_types.go b/api/v1alpha2/openstackmachine_types.go deleted file mode 100644 index 32833605a1..0000000000 --- a/api/v1alpha2/openstackmachine_types.go +++ /dev/null @@ -1,148 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha2 - -import ( - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "sigs.k8s.io/cluster-api/errors" -) - -const ( - // MachineFinalizer allows ReconcileOpenStackMachine to clean up OpenStack resources associated with OpenStackMachine before - // removing it from the apiserver. - MachineFinalizer = "openstackmachine.infrastructure.cluster.x-k8s.io" -) - -// OpenStackMachineSpec defines the desired state of OpenStackMachine -type OpenStackMachineSpec struct { - - // ProviderID is the unique identifier as specified by the cloud provider. - ProviderID *string `json:"providerID,omitempty"` - - // The name of the secret containing the openstack credentials - // +optional - CloudsSecret *corev1.SecretReference `json:"cloudsSecret"` - - // The name of the cloud to use from the clouds secret - // +optional - CloudName string `json:"cloudName"` - - // The flavor reference for the flavor for your server instance. - Flavor string `json:"flavor"` - - // The name of the image to use for your server instance. - // If the RootVolume is specified, this will be ignored and use rootVolume directly. - Image string `json:"image"` - - // The ssh key to inject in the instance - SSHKeyName string `json:"sshKeyName,omitempty"` - - // A networks object. Required parameter when there are multiple networks defined for the tenant. - // When you do not specify the networks parameter, the server attaches to the only network created for the current tenant. - Networks []NetworkParam `json:"networks,omitempty"` - // The floatingIP which will be associated to the machine, only used for master. - // The floatingIP should have been created and haven't been associated. - FloatingIP string `json:"floatingIP,omitempty"` - - // The availability zone from which to launch the server. - AvailabilityZone string `json:"availabilityZone,omitempty"` - - // The names of the security groups to assign to the instance - SecurityGroups []SecurityGroupParam `json:"securityGroups,omitempty"` - - // The name of the secret containing the user data (startup script in most cases) - UserDataSecret *corev1.SecretReference `json:"userDataSecret,omitempty"` - - // Whether the server instance is created on a trunk port or not. - Trunk bool `json:"trunk,omitempty"` - - // Machine tags - // Requires Nova api 2.52 minimum! - Tags []string `json:"tags,omitempty"` - - // Metadata mapping. Allows you to create a map of key value pairs to add to the server instance. - ServerMetadata map[string]string `json:"serverMetadata,omitempty"` - - // Config Drive support - ConfigDrive *bool `json:"configDrive,omitempty"` - - // The volume metadata to boot from - RootVolume *RootVolume `json:"rootVolume,omitempty"` -} - -// OpenStackMachineStatus defines the observed state of OpenStackMachine -type OpenStackMachineStatus struct { - - // Ready is true when the provider resource is ready. - // +optional - Ready bool `json:"ready"` - - // Addresses contains the OpenStack instance associated addresses. - Addresses []corev1.NodeAddress `json:"addresses,omitempty"` - - // InstanceState is the state of the OpenStack instance for this machine. - // +optional - InstanceState *InstanceState `json:"instanceState,omitempty"` - - ErrorReason *errors.MachineStatusError `json:"errorReason,omitempty"` - - // ErrorMessage 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 - ErrorMessage *string `json:"errorMessage,omitempty"` -} - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=openstackmachines,scope=Namespaced -// +kubebuilder:subresource:status - -// OpenStackMachine is the Schema for the openstackmachines API -type OpenStackMachine struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec OpenStackMachineSpec `json:"spec,omitempty"` - Status OpenStackMachineStatus `json:"status,omitempty"` -} - -// +kubebuilder:object:root=true - -// OpenStackMachineList contains a list of OpenStackMachine -type OpenStackMachineList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []OpenStackMachine `json:"items"` -} - -func init() { - SchemeBuilder.Register(&OpenStackMachine{}, &OpenStackMachineList{}) -} diff --git a/api/v1alpha2/openstackmachinetemplate_types.go b/api/v1alpha2/openstackmachinetemplate_types.go deleted file mode 100644 index d64f7957b2..0000000000 --- a/api/v1alpha2/openstackmachinetemplate_types.go +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package v1alpha2 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// OpenStackMachineTemplateSpec defines the desired state of OpenStackMachineTemplate -type OpenStackMachineTemplateSpec struct { - Template OpenStackMachineTemplateResource `json:"template"` -} - -// +kubebuilder:object:root=true -// +kubebuilder:resource:path=openstackmachinetemplates,scope=Namespaced,categories=cluster-api - -// OpenStackMachineTemplate is the Schema for the openstackmachinetemplates API -type OpenStackMachineTemplate struct { - metav1.TypeMeta `json:",inline"` - metav1.ObjectMeta `json:"metadata,omitempty"` - - Spec OpenStackMachineTemplateSpec `json:"spec,omitempty"` -} - -// +kubebuilder:object:root=true - -// OpenStackMachineTemplateList contains a list of OpenStackMachineTemplate -type OpenStackMachineTemplateList struct { - metav1.TypeMeta `json:",inline"` - metav1.ListMeta `json:"metadata,omitempty"` - Items []OpenStackMachineTemplate `json:"items"` -} - -func init() { - SchemeBuilder.Register(&OpenStackMachineTemplate{}, &OpenStackMachineTemplateList{}) -} diff --git a/api/v1alpha2/types.go b/api/v1alpha2/types.go deleted file mode 100644 index 74b8f4a986..0000000000 --- a/api/v1alpha2/types.go +++ /dev/null @@ -1,213 +0,0 @@ -package v1alpha2 - -// OpenStackMachineTemplateResource describes the data needed to create a OpenStackMachine from a template -type OpenStackMachineTemplateResource struct { - // Spec is the specification of the desired behavior of the machine. - Spec OpenStackMachineSpec `json:"spec"` -} - -type ExternalRouterIPParam struct { - // The FixedIP in the corresponding subnet - FixedIP string `json:"fixedIP,omitempty"` - // The subnet in which the FixedIP is used for the Gateway of this router - Subnet SubnetParam `json:"subnet"` -} - -type SecurityGroupParam struct { - // Security Group UID - UUID string `json:"uuid,omitempty"` - // Security Group name - Name string `json:"name,omitempty"` - // Filters used to query security groups in openstack - Filter SecurityGroupFilter `json:"filter,omitempty"` -} - -type SecurityGroupFilter struct { - ID string `json:"id,omitempty"` - Name string `json:"name,omitempty"` - Description string `json:"description,omitempty"` - TenantID string `json:"tenantId,omitempty"` - ProjectID string `json:"projectId,omitempty"` - Limit int `json:"limit,omitempty"` - Marker string `json:"marker,omitempty"` - SortKey string `json:"sortKey,omitempty"` - SortDir string `json:"sortDir,omitempty"` - Tags string `json:"tags,omitempty"` - TagsAny string `json:"tagsAny,omitempty"` - NotTags string `json:"notTags,omitempty"` - NotTagsAny string `json:"notTagsAny,omitempty"` -} - -type NetworkParam struct { - // The UUID of the network. Required if you omit the port attribute. - UUID string `json:"uuid,omitempty"` - // A fixed IPv4 address for the NIC. - FixedIP string `json:"fixedIp,omitempty"` - // Filters for optional network query - Filter Filter `json:"filter,omitempty"` - // Subnet within a network to use - Subnets []SubnetParam `json:"subnets,omitempty"` -} - -type Filter struct { - Status string `json:"status,omitempty"` - Name string `json:"name,omitempty"` - Description string `json:"description,omitempty"` - AdminStateUp *bool `json:"adminStateUp,omitempty"` - TenantID string `json:"tenantId,omitempty"` - ProjectID string `json:"projectId,omitempty"` - Shared *bool `json:"shared,omitempty"` - ID string `json:"id,omitempty"` - Marker string `json:"marker,omitempty"` - Limit int `json:"limit,omitempty"` - SortKey string `json:"sortKey,omitempty"` - SortDir string `json:"sortDir,omitempty"` - Tags string `json:"tags,omitempty"` - TagsAny string `json:"tagsAny,omitempty"` - NotTags string `json:"notTags,omitempty"` - NotTagsAny string `json:"notTagsAny,omitempty"` -} - -type SubnetParam struct { - // The UUID of the network. Required if you omit the port attribute. - UUID string `json:"uuid,omitempty"` - - // Filters for optional network query - Filter SubnetFilter `json:"filter,omitempty"` -} - -type SubnetFilter struct { - Name string `json:"name,omitempty"` - Description string `json:"description,omitempty"` - EnableDHCP *bool `json:"enableDhcp,omitempty"` - NetworkID string `json:"networkId,omitempty"` - TenantID string `json:"tenantId,omitempty"` - ProjectID string `json:"projectId,omitempty"` - IPVersion int `json:"ipVersion,omitempty"` - GatewayIP string `json:"gateway_ip,omitempty"` - CIDR string `json:"cidr,omitempty"` - IPv6AddressMode string `json:"ipv6AddressMode,omitempty"` - IPv6RAMode string `json:"ipv6RaMode,omitempty"` - ID string `json:"id,omitempty"` - SubnetPoolID string `json:"subnetpoolId,omitempty"` - Limit int `json:"limit,omitempty"` - Marker string `json:"marker,omitempty"` - SortKey string `json:"sortKey,omitempty"` - SortDir string `json:"sortDir,omitempty"` - Tags string `json:"tags,omitempty"` - TagsAny string `json:"tagsAny,omitempty"` - NotTags string `json:"notTags,omitempty"` - NotTagsAny string `json:"notTagsAny,omitempty"` -} - -// APIEndpoint represents a reachable Kubernetes API endpoint. -type APIEndpoint struct { - // The hostname on which the API server is serving. - Host string `json:"host"` - - // The port on which the API server is serving. - Port int `json:"port"` -} - -type RootVolume struct { - SourceType string `json:"sourceType,omitempty"` - SourceUUID string `json:"sourceUUID,omitempty"` - DeviceType string `json:"deviceType,omitempty"` - Size int `json:"diskSize,omitempty"` -} - -// KeyPair is how operators can supply custom keypairs for kubeadm to use. -type KeyPair struct { - // base64 encoded cert and key - Cert []byte `json:"cert,omitempty"` - Key []byte `json:"key,omitempty"` -} - -// HasCertAndKey returns whether a keypair contains cert and key of non-zero length. -func (kp *KeyPair) HasCertAndKey() bool { - return len(kp.Cert) != 0 && len(kp.Key) != 0 -} - -// Network represents basic information about the associated OpenStach Neutron Network -type Network struct { - Name string `json:"name"` - ID string `json:"id"` - - Subnet *Subnet `json:"subnet,omitempty"` - Router *Router `json:"router,omitempty"` - - // Be careful when using APIServerLoadBalancer, because this field is optional and therefore not - // set in all cases - APIServerLoadBalancer *LoadBalancer `json:"apiServerLoadBalancer,omitempty"` -} - -// Subnet represents basic information about the associated OpenStack Neutron Subnet -type Subnet struct { - Name string `json:"name"` - ID string `json:"id"` - - CIDR string `json:"cidr"` -} - -// Router represents basic information about the associated OpenStack Neutron Router -type Router struct { - Name string `json:"name"` - ID string `json:"id"` -} - -// LoadBalancer represents basic information about the associated OpenStack LoadBalancer -type LoadBalancer struct { - Name string `json:"name"` - ID string `json:"id"` - IP string `json:"ip"` - InternalIP string `json:"internalIP"` -} - -// SecurityGroup represents the basic information of the associated -// OpenStack Neutron Security Group. -type SecurityGroup struct { - Name string `json:"name"` - ID string `json:"id"` - Rules []SecurityGroupRule `json:"rules"` -} - -// SecurityGroupRule represent the basic information of the associated OpenStack -// Security Group Role. -type SecurityGroupRule struct { - ID string `json:"name"` - Direction string `json:"direction"` - EtherType string `json:"etherType"` - SecurityGroupID string `json:"securityGroupID"` - PortRangeMin int `json:"portRangeMin"` - PortRangeMax int `json:"portRangeMax"` - Protocol string `json:"protocol"` - RemoteGroupID string `json:"remoteGroupID"` - RemoteIPPrefix string `json:"remoteIPPrefix"` -} - -// Equal checks if two SecurityGroupRules are the same. -func (r SecurityGroupRule) Equal(x SecurityGroupRule) bool { - return (r.Direction == x.Direction && - r.EtherType == x.EtherType && - r.PortRangeMin == x.PortRangeMin && - r.PortRangeMax == x.PortRangeMax && - r.Protocol == x.Protocol && - r.RemoteGroupID == x.RemoteGroupID && - r.RemoteIPPrefix == x.RemoteIPPrefix) - -} - -// InstanceState describes the state of an OpenStack instance. -type InstanceState string - -var ( - InstanceStateBuilding = InstanceState("BUILDING") - - InstanceStateActive = InstanceState("ACTIVE") - - InstanceStateError = InstanceState("ERROR") - - InstanceStateStopped = InstanceState("STOPPED") - - InstanceStateShutoff = InstanceState("SHUTOFF") -) diff --git a/api/v1alpha2/zz_generated.deepcopy.go b/api/v1alpha2/zz_generated.deepcopy.go deleted file mode 100644 index bbf838f943..0000000000 --- a/api/v1alpha2/zz_generated.deepcopy.go +++ /dev/null @@ -1,713 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by controller-gen. DO NOT EDIT. - -package v1alpha2 - -import ( - "k8s.io/api/core/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - "sigs.k8s.io/cluster-api/errors" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *APIEndpoint) DeepCopyInto(out *APIEndpoint) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new APIEndpoint. -func (in *APIEndpoint) DeepCopy() *APIEndpoint { - if in == nil { - return nil - } - out := new(APIEndpoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExternalRouterIPParam) DeepCopyInto(out *ExternalRouterIPParam) { - *out = *in - in.Subnet.DeepCopyInto(&out.Subnet) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalRouterIPParam. -func (in *ExternalRouterIPParam) DeepCopy() *ExternalRouterIPParam { - if in == nil { - return nil - } - out := new(ExternalRouterIPParam) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Filter) DeepCopyInto(out *Filter) { - *out = *in - if in.AdminStateUp != nil { - in, out := &in.AdminStateUp, &out.AdminStateUp - *out = new(bool) - **out = **in - } - if in.Shared != nil { - in, out := &in.Shared, &out.Shared - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Filter. -func (in *Filter) DeepCopy() *Filter { - if in == nil { - return nil - } - out := new(Filter) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KeyPair) DeepCopyInto(out *KeyPair) { - *out = *in - if in.Cert != nil { - in, out := &in.Cert, &out.Cert - *out = make([]byte, len(*in)) - copy(*out, *in) - } - if in.Key != nil { - in, out := &in.Key, &out.Key - *out = make([]byte, len(*in)) - copy(*out, *in) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KeyPair. -func (in *KeyPair) DeepCopy() *KeyPair { - if in == nil { - return nil - } - out := new(KeyPair) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LoadBalancer) DeepCopyInto(out *LoadBalancer) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancer. -func (in *LoadBalancer) DeepCopy() *LoadBalancer { - if in == nil { - return nil - } - out := new(LoadBalancer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Network) DeepCopyInto(out *Network) { - *out = *in - if in.Subnet != nil { - in, out := &in.Subnet, &out.Subnet - *out = new(Subnet) - **out = **in - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(Router) - **out = **in - } - if in.APIServerLoadBalancer != nil { - in, out := &in.APIServerLoadBalancer, &out.APIServerLoadBalancer - *out = new(LoadBalancer) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Network. -func (in *Network) DeepCopy() *Network { - if in == nil { - return nil - } - out := new(Network) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NetworkParam) DeepCopyInto(out *NetworkParam) { - *out = *in - in.Filter.DeepCopyInto(&out.Filter) - if in.Subnets != nil { - in, out := &in.Subnets, &out.Subnets - *out = make([]SubnetParam, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkParam. -func (in *NetworkParam) DeepCopy() *NetworkParam { - if in == nil { - return nil - } - out := new(NetworkParam) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackCluster) DeepCopyInto(out *OpenStackCluster) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackCluster. -func (in *OpenStackCluster) DeepCopy() *OpenStackCluster { - if in == nil { - return nil - } - out := new(OpenStackCluster) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OpenStackCluster) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackClusterList) DeepCopyInto(out *OpenStackClusterList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]OpenStackCluster, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackClusterList. -func (in *OpenStackClusterList) DeepCopy() *OpenStackClusterList { - if in == nil { - return nil - } - out := new(OpenStackClusterList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OpenStackClusterList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackClusterSpec) DeepCopyInto(out *OpenStackClusterSpec) { - *out = *in - if in.CloudsSecret != nil { - in, out := &in.CloudsSecret, &out.CloudsSecret - *out = new(v1.SecretReference) - **out = **in - } - in.Network.DeepCopyInto(&out.Network) - in.Subnet.DeepCopyInto(&out.Subnet) - if in.DNSNameservers != nil { - in, out := &in.DNSNameservers, &out.DNSNameservers - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ExternalRouterIPs != nil { - in, out := &in.ExternalRouterIPs, &out.ExternalRouterIPs - *out = make([]ExternalRouterIPParam, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.APIServerLoadBalancerAdditionalPorts != nil { - in, out := &in.APIServerLoadBalancerAdditionalPorts, &out.APIServerLoadBalancerAdditionalPorts - *out = make([]int, len(*in)) - copy(*out, *in) - } - if in.Tags != nil { - in, out := &in.Tags, &out.Tags - *out = make([]string, len(*in)) - copy(*out, *in) - } - in.CAKeyPair.DeepCopyInto(&out.CAKeyPair) - in.EtcdCAKeyPair.DeepCopyInto(&out.EtcdCAKeyPair) - in.FrontProxyCAKeyPair.DeepCopyInto(&out.FrontProxyCAKeyPair) - in.SAKeyPair.DeepCopyInto(&out.SAKeyPair) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackClusterSpec. -func (in *OpenStackClusterSpec) DeepCopy() *OpenStackClusterSpec { - if in == nil { - return nil - } - out := new(OpenStackClusterSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackClusterStatus) DeepCopyInto(out *OpenStackClusterStatus) { - *out = *in - if in.APIEndpoints != nil { - in, out := &in.APIEndpoints, &out.APIEndpoints - *out = make([]APIEndpoint, len(*in)) - copy(*out, *in) - } - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(Network) - (*in).DeepCopyInto(*out) - } - if in.ControlPlaneSecurityGroup != nil { - in, out := &in.ControlPlaneSecurityGroup, &out.ControlPlaneSecurityGroup - *out = new(SecurityGroup) - (*in).DeepCopyInto(*out) - } - if in.GlobalSecurityGroup != nil { - in, out := &in.GlobalSecurityGroup, &out.GlobalSecurityGroup - *out = new(SecurityGroup) - (*in).DeepCopyInto(*out) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackClusterStatus. -func (in *OpenStackClusterStatus) DeepCopy() *OpenStackClusterStatus { - if in == nil { - return nil - } - out := new(OpenStackClusterStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachine) DeepCopyInto(out *OpenStackMachine) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - in.Status.DeepCopyInto(&out.Status) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachine. -func (in *OpenStackMachine) DeepCopy() *OpenStackMachine { - if in == nil { - return nil - } - out := new(OpenStackMachine) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OpenStackMachine) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineList) DeepCopyInto(out *OpenStackMachineList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]OpenStackMachine, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineList. -func (in *OpenStackMachineList) DeepCopy() *OpenStackMachineList { - if in == nil { - return nil - } - out := new(OpenStackMachineList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OpenStackMachineList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineSpec) DeepCopyInto(out *OpenStackMachineSpec) { - *out = *in - if in.ProviderID != nil { - in, out := &in.ProviderID, &out.ProviderID - *out = new(string) - **out = **in - } - if in.CloudsSecret != nil { - in, out := &in.CloudsSecret, &out.CloudsSecret - *out = new(v1.SecretReference) - **out = **in - } - if in.Networks != nil { - in, out := &in.Networks, &out.Networks - *out = make([]NetworkParam, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.SecurityGroups != nil { - in, out := &in.SecurityGroups, &out.SecurityGroups - *out = make([]SecurityGroupParam, len(*in)) - copy(*out, *in) - } - if in.UserDataSecret != nil { - in, out := &in.UserDataSecret, &out.UserDataSecret - *out = new(v1.SecretReference) - **out = **in - } - if in.Tags != nil { - in, out := &in.Tags, &out.Tags - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.ServerMetadata != nil { - in, out := &in.ServerMetadata, &out.ServerMetadata - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.ConfigDrive != nil { - in, out := &in.ConfigDrive, &out.ConfigDrive - *out = new(bool) - **out = **in - } - if in.RootVolume != nil { - in, out := &in.RootVolume, &out.RootVolume - *out = new(RootVolume) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineSpec. -func (in *OpenStackMachineSpec) DeepCopy() *OpenStackMachineSpec { - if in == nil { - return nil - } - out := new(OpenStackMachineSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineStatus) DeepCopyInto(out *OpenStackMachineStatus) { - *out = *in - if in.Addresses != nil { - in, out := &in.Addresses, &out.Addresses - *out = make([]v1.NodeAddress, len(*in)) - copy(*out, *in) - } - if in.InstanceState != nil { - in, out := &in.InstanceState, &out.InstanceState - *out = new(InstanceState) - **out = **in - } - if in.ErrorReason != nil { - in, out := &in.ErrorReason, &out.ErrorReason - *out = new(errors.MachineStatusError) - **out = **in - } - if in.ErrorMessage != nil { - in, out := &in.ErrorMessage, &out.ErrorMessage - *out = new(string) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineStatus. -func (in *OpenStackMachineStatus) DeepCopy() *OpenStackMachineStatus { - if in == nil { - return nil - } - out := new(OpenStackMachineStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineTemplate) DeepCopyInto(out *OpenStackMachineTemplate) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineTemplate. -func (in *OpenStackMachineTemplate) DeepCopy() *OpenStackMachineTemplate { - if in == nil { - return nil - } - out := new(OpenStackMachineTemplate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OpenStackMachineTemplate) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineTemplateList) DeepCopyInto(out *OpenStackMachineTemplateList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]OpenStackMachineTemplate, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineTemplateList. -func (in *OpenStackMachineTemplateList) DeepCopy() *OpenStackMachineTemplateList { - if in == nil { - return nil - } - out := new(OpenStackMachineTemplateList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *OpenStackMachineTemplateList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineTemplateResource) DeepCopyInto(out *OpenStackMachineTemplateResource) { - *out = *in - in.Spec.DeepCopyInto(&out.Spec) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineTemplateResource. -func (in *OpenStackMachineTemplateResource) DeepCopy() *OpenStackMachineTemplateResource { - if in == nil { - return nil - } - out := new(OpenStackMachineTemplateResource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenStackMachineTemplateSpec) DeepCopyInto(out *OpenStackMachineTemplateSpec) { - *out = *in - in.Template.DeepCopyInto(&out.Template) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackMachineTemplateSpec. -func (in *OpenStackMachineTemplateSpec) DeepCopy() *OpenStackMachineTemplateSpec { - if in == nil { - return nil - } - out := new(OpenStackMachineTemplateSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RootVolume) DeepCopyInto(out *RootVolume) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RootVolume. -func (in *RootVolume) DeepCopy() *RootVolume { - if in == nil { - return nil - } - out := new(RootVolume) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Router) DeepCopyInto(out *Router) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Router. -func (in *Router) DeepCopy() *Router { - if in == nil { - return nil - } - out := new(Router) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecurityGroup) DeepCopyInto(out *SecurityGroup) { - *out = *in - if in.Rules != nil { - in, out := &in.Rules, &out.Rules - *out = make([]SecurityGroupRule, len(*in)) - copy(*out, *in) - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroup. -func (in *SecurityGroup) DeepCopy() *SecurityGroup { - if in == nil { - return nil - } - out := new(SecurityGroup) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecurityGroupFilter) DeepCopyInto(out *SecurityGroupFilter) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroupFilter. -func (in *SecurityGroupFilter) DeepCopy() *SecurityGroupFilter { - if in == nil { - return nil - } - out := new(SecurityGroupFilter) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecurityGroupParam) DeepCopyInto(out *SecurityGroupParam) { - *out = *in - out.Filter = in.Filter -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroupParam. -func (in *SecurityGroupParam) DeepCopy() *SecurityGroupParam { - if in == nil { - return nil - } - out := new(SecurityGroupParam) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecurityGroupRule) DeepCopyInto(out *SecurityGroupRule) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityGroupRule. -func (in *SecurityGroupRule) DeepCopy() *SecurityGroupRule { - if in == nil { - return nil - } - out := new(SecurityGroupRule) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Subnet) DeepCopyInto(out *Subnet) { - *out = *in -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Subnet. -func (in *Subnet) DeepCopy() *Subnet { - if in == nil { - return nil - } - out := new(Subnet) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SubnetFilter) DeepCopyInto(out *SubnetFilter) { - *out = *in - if in.EnableDHCP != nil { - in, out := &in.EnableDHCP, &out.EnableDHCP - *out = new(bool) - **out = **in - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetFilter. -func (in *SubnetFilter) DeepCopy() *SubnetFilter { - if in == nil { - return nil - } - out := new(SubnetFilter) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SubnetParam) DeepCopyInto(out *SubnetParam) { - *out = *in - in.Filter.DeepCopyInto(&out.Filter) -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SubnetParam. -func (in *SubnetParam) DeepCopy() *SubnetParam { - if in == nil { - return nil - } - out := new(SubnetParam) - in.DeepCopyInto(out) - return out -} diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 485be57b3c..ad0d1a55a8 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -8,11 +8,11 @@ steps: env: - DOCKER_CLI_EXPERIMENTAL=enabled - TAG=$_GIT_TAG - - ADDITIONAL_TAG=$_PULL_BASE_REF + - PULL_BASE_REF=$_PULL_BASE_REF args: - release-staging substitutions: # _GIT_TAG will be filled with a git-based tag for the image, of the form vYYYYMMDD-hash, and # can be used as a substitution _GIT_TAG: '12345' - _PULL_BASE_REF: 'dev' \ No newline at end of file + _PULL_BASE_REF: 'dev' diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml index e07db0c565..c2cde878d9 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.6-0.20200226180227-d6efdcdd90e2 + controller-gen.kubebuilder.io/version: v0.2.6 creationTimestamp: null name: openstackclusters.infrastructure.cluster.x-k8s.io spec: @@ -16,486 +16,6 @@ spec: singular: openstackcluster scope: Namespaced versions: - - name: v1alpha2 - schema: - openAPIV3Schema: - description: OpenStackCluster is the Schema for the openstackclusters API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: OpenStackClusterSpec defines the desired state of OpenStackCluster - properties: - apiServerLoadBalancerAdditionalPorts: - description: APIServerLoadBalancerAdditionalPorts adds additional - ports to the APIServerLoadBalancer - items: - type: integer - type: array - apiServerLoadBalancerFloatingIP: - description: APIServerLoadBalancerFloatingIP is the floatingIP which - will be associated to the APIServer loadbalancer. The floatingIP - will be created if it not already exists. - type: string - apiServerLoadBalancerPort: - description: APIServerLoadBalancerPort is the port on which the listener - on the APIServer loadbalancer will be created - type: integer - caKeyPair: - description: CAKeyPair is the key pair for ca certs. - properties: - cert: - description: base64 encoded cert and key - format: byte - type: string - key: - format: byte - type: string - type: object - cloudName: - description: The name of the cloud to use from the clouds secret - type: string - cloudsSecret: - description: The name of the secret containing the openstack credentials - properties: - name: - description: Name is unique within a namespace to reference a - secret resource. - type: string - namespace: - description: Namespace defines the space within which the secret - name must be unique. - type: string - type: object - disablePortSecurity: - description: DisablePortSecurity disables the port security of the - network created for the Kubernetes cluster, which also disables - SecurityGroups - type: boolean - disableServerTags: - description: 'Default: True. In case of server tag errors, set to - False' - type: boolean - dnsNameservers: - description: DNSNameservers is the list of nameservers for OpenStack - Subnet being created. Set this value when you need create a new - network/subnet while the access through DNS is required. - items: - type: string - type: array - etcdCAKeyPair: - description: EtcdCAKeyPair is the key pair for etcd. - properties: - cert: - description: base64 encoded cert and key - format: byte - type: string - key: - format: byte - type: string - type: object - externalNetworkId: - description: ExternalNetworkID is the ID of an external OpenStack - Network. This is necessary to get public internet to the VMs. - type: string - externalRouterIPs: - description: ExternalRouterIPs is an array of externalIPs on the respective - subnets. This is necessary if the router needs a fixed ip in a specific - subnet. - items: - properties: - fixedIP: - description: The FixedIP in the corresponding subnet - type: string - subnet: - description: The subnet in which the FixedIP is used for the - Gateway of this router - properties: - filter: - description: Filters for optional network query - properties: - cidr: - type: string - description: - type: string - enableDhcp: - type: boolean - gateway_ip: - type: string - id: - type: string - ipVersion: - type: integer - ipv6AddressMode: - type: string - ipv6RaMode: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - networkId: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - sortDir: - type: string - sortKey: - type: string - subnetpoolId: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - uuid: - description: The UUID of the network. Required if you omit - the port attribute. - type: string - type: object - required: - - subnet - type: object - type: array - frontProxyCAKeyPair: - description: FrontProxyCAKeyPair is the key pair for FrontProxyKeyPair. - properties: - cert: - description: base64 encoded cert and key - format: byte - type: string - key: - format: byte - type: string - type: object - managedAPIServerLoadBalancer: - description: 'ManagedAPIServerLoadBalancer defines whether a LoadBalancer - for the APIServer should be created. If set to true the following - properties are mandatory: APIServerLoadBalancerFloatingIP, APIServerLoadBalancerPort' - type: boolean - managedSecurityGroups: - description: ManagedSecurityGroups defines that kubernetes manages - the OpenStack security groups for now, that means that we'll create - two security groups, one allowing SSH and API access from everywhere, - and another one that allows all traffic to/from machines belonging - to that group. In the future, we could make this more flexible. - type: boolean - network: - description: If NodeCIDR cannot be set this can be used to detect - an existing network. - properties: - adminStateUp: - type: boolean - description: - type: string - id: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - shared: - type: boolean - sortDir: - type: string - sortKey: - type: string - status: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - nodeCidr: - description: NodeCIDR is the OpenStack Subnet to be created. Cluster - actuator will create a network, a subnet with NodeCIDR, and a router - connected to this subnet. If you leave this empty, no network will - be created. - type: string - saKeyPair: - description: SAKeyPair is the service account key pair. - properties: - cert: - description: base64 encoded cert and key - format: byte - type: string - key: - format: byte - type: string - type: object - subnet: - description: If NodeCIDR cannot be set this can be used to detect - an existing subnet. - properties: - cidr: - type: string - description: - type: string - enableDhcp: - type: boolean - gateway_ip: - type: string - id: - type: string - ipVersion: - type: integer - ipv6AddressMode: - type: string - ipv6RaMode: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - networkId: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - sortDir: - type: string - sortKey: - type: string - subnetpoolId: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - tags: - description: Tags for all resources in cluster - items: - type: string - type: array - useOctavia: - description: UseOctavia is weather LoadBalancer Service is Octavia - or not - type: boolean - type: object - status: - description: OpenStackClusterStatus defines the observed state of OpenStackCluster - properties: - apiEndpoints: - description: APIEndpoints represents the endpoints to communicate - with the control plane. - items: - description: APIEndpoint represents a reachable Kubernetes API endpoint. - properties: - host: - description: The hostname on which the API server is serving. - type: string - port: - description: The port on which the API server is serving. - type: integer - required: - - host - - port - type: object - type: array - controlPlaneSecurityGroup: - description: 'ControlPlaneSecurityGroups contains all the information - about the OpenStack Security Group that needs to be applied to control - plane nodes. TODO: Maybe instead of two properties, we add a property - to the group?' - properties: - id: - type: string - name: - type: string - rules: - items: - description: SecurityGroupRule represent the basic information - of the associated OpenStack Security Group Role. - properties: - direction: - type: string - etherType: - type: string - name: - type: string - portRangeMax: - type: integer - portRangeMin: - type: integer - protocol: - type: string - remoteGroupID: - type: string - remoteIPPrefix: - type: string - securityGroupID: - type: string - required: - - direction - - etherType - - name - - portRangeMax - - portRangeMin - - protocol - - remoteGroupID - - remoteIPPrefix - - securityGroupID - type: object - type: array - required: - - id - - name - - rules - type: object - globalSecurityGroup: - description: GlobalSecurityGroup contains all the information about - the OpenStack Security Group that needs to be applied to all nodes, - both control plane and worker nodes. - properties: - id: - type: string - name: - type: string - rules: - items: - description: SecurityGroupRule represent the basic information - of the associated OpenStack Security Group Role. - properties: - direction: - type: string - etherType: - type: string - name: - type: string - portRangeMax: - type: integer - portRangeMin: - type: integer - protocol: - type: string - remoteGroupID: - type: string - remoteIPPrefix: - type: string - securityGroupID: - type: string - required: - - direction - - etherType - - name - - portRangeMax - - portRangeMin - - protocol - - remoteGroupID - - remoteIPPrefix - - securityGroupID - type: object - type: array - required: - - id - - name - - rules - type: object - network: - description: Network contains all information about the created OpenStack - Network. It includes Subnets and Router. - properties: - apiServerLoadBalancer: - description: Be careful when using APIServerLoadBalancer, because - this field is optional and therefore not set in all cases - properties: - id: - type: string - internalIP: - type: string - ip: - type: string - name: - type: string - required: - - id - - internalIP - - ip - - name - type: object - id: - type: string - name: - type: string - router: - description: Router represents basic information about the associated - OpenStack Neutron Router - properties: - id: - type: string - name: - type: string - required: - - id - - name - type: object - subnet: - description: Subnet represents basic information about the associated - OpenStack Neutron Subnet - properties: - cidr: - type: string - id: - type: string - name: - type: string - required: - - cidr - - id - - name - type: object - required: - - id - - name - type: object - ready: - type: boolean - required: - - ready - type: object - type: object - served: true - storage: false - subresources: - status: {} - name: v1alpha3 schema: openAPIV3Schema: diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachines.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachines.yaml index 14197c0be0..edef3069b2 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachines.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachines.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.6-0.20200226180227-d6efdcdd90e2 + controller-gen.kubebuilder.io/version: v0.2.6 creationTimestamp: null name: openstackmachines.infrastructure.cluster.x-k8s.io spec: @@ -16,314 +16,6 @@ spec: singular: openstackmachine scope: Namespaced versions: - - name: v1alpha2 - schema: - openAPIV3Schema: - description: OpenStackMachine is the Schema for the openstackmachines API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: OpenStackMachineSpec defines the desired state of OpenStackMachine - properties: - availabilityZone: - description: The availability zone from which to launch the server. - type: string - cloudName: - description: The name of the cloud to use from the clouds secret - type: string - cloudsSecret: - description: The name of the secret containing the openstack credentials - properties: - name: - description: Name is unique within a namespace to reference a - secret resource. - type: string - namespace: - description: Namespace defines the space within which the secret - name must be unique. - type: string - type: object - configDrive: - description: Config Drive support - type: boolean - flavor: - description: The flavor reference for the flavor for your server instance. - type: string - floatingIP: - description: The floatingIP which will be associated to the machine, - only used for master. The floatingIP should have been created and - haven't been associated. - type: string - image: - description: The name of the image to use for your server instance. - If the RootVolume is specified, this will be ignored and use rootVolume - directly. - type: string - networks: - description: A networks object. Required parameter when there are - multiple networks defined for the tenant. When you do not specify - the networks parameter, the server attaches to the only network - created for the current tenant. - items: - properties: - filter: - description: Filters for optional network query - properties: - adminStateUp: - type: boolean - description: - type: string - id: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - shared: - type: boolean - sortDir: - type: string - sortKey: - type: string - status: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - fixedIp: - description: A fixed IPv4 address for the NIC. - type: string - subnets: - description: Subnet within a network to use - items: - properties: - filter: - description: Filters for optional network query - properties: - cidr: - type: string - description: - type: string - enableDhcp: - type: boolean - gateway_ip: - type: string - id: - type: string - ipVersion: - type: integer - ipv6AddressMode: - type: string - ipv6RaMode: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - networkId: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - sortDir: - type: string - sortKey: - type: string - subnetpoolId: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - uuid: - description: The UUID of the network. Required if you - omit the port attribute. - type: string - type: object - type: array - uuid: - description: The UUID of the network. Required if you omit the - port attribute. - type: string - type: object - type: array - providerID: - description: ProviderID is the unique identifier as specified by the - cloud provider. - type: string - rootVolume: - description: The volume metadata to boot from - properties: - deviceType: - type: string - diskSize: - type: integer - sourceType: - type: string - sourceUUID: - type: string - type: object - securityGroups: - description: The names of the security groups to assign to the instance - items: - properties: - filter: - description: Filters used to query security groups in openstack - properties: - description: - type: string - id: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - sortDir: - type: string - sortKey: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - name: - description: Security Group name - type: string - uuid: - description: Security Group UID - type: string - type: object - type: array - serverMetadata: - additionalProperties: - type: string - description: Metadata mapping. Allows you to create a map of key value - pairs to add to the server instance. - type: object - sshKeyName: - description: The ssh key to inject in the instance - type: string - tags: - description: Machine tags Requires Nova api 2.52 minimum! - items: - type: string - type: array - trunk: - description: Whether the server instance is created on a trunk port - or not. - type: boolean - userDataSecret: - description: The name of the secret containing the user data (startup - script in most cases) - properties: - name: - description: Name is unique within a namespace to reference a - secret resource. - type: string - namespace: - description: Namespace defines the space within which the secret - name must be unique. - type: string - type: object - required: - - flavor - - image - type: object - status: - description: OpenStackMachineStatus defines the observed state of OpenStackMachine - properties: - addresses: - description: Addresses contains the OpenStack instance associated - addresses. - items: - description: NodeAddress contains information for the node's address. - properties: - address: - description: The node address. - type: string - type: - description: Node address type, one of Hostname, ExternalIP - or InternalIP. - type: string - required: - - address - - type - type: object - type: array - errorMessage: - description: "ErrorMessage 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. \n 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. \n 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." - type: string - errorReason: - description: Constants aren't automatically generated for unversioned - packages. Instead share the same constant for all versioned packages - type: string - instanceState: - description: InstanceState is the state of the OpenStack instance - for this machine. - type: string - ready: - description: Ready is true when the provider resource is ready. - type: boolean - type: object - type: object - served: true - storage: false - subresources: - status: {} - name: v1alpha3 schema: openAPIV3Schema: diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml index 7bc0a53483..5ad6e0b035 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackmachinetemplates.yaml @@ -4,7 +4,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.2.6-0.20200226180227-d6efdcdd90e2 + controller-gen.kubebuilder.io/version: v0.2.6 creationTimestamp: null name: openstackmachinetemplates.infrastructure.cluster.x-k8s.io spec: @@ -18,286 +18,6 @@ spec: singular: openstackmachinetemplate scope: Namespaced versions: - - name: v1alpha2 - schema: - openAPIV3Schema: - description: OpenStackMachineTemplate is the Schema for the openstackmachinetemplates - API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: OpenStackMachineTemplateSpec defines the desired state of - OpenStackMachineTemplate - properties: - template: - description: OpenStackMachineTemplateResource describes the data needed - to create a OpenStackMachine from a template - properties: - spec: - description: Spec is the specification of the desired behavior - of the machine. - properties: - availabilityZone: - description: The availability zone from which to launch the - server. - type: string - cloudName: - description: The name of the cloud to use from the clouds - secret - type: string - cloudsSecret: - description: The name of the secret containing the openstack - credentials - properties: - name: - description: Name is unique within a namespace to reference - a secret resource. - type: string - namespace: - description: Namespace defines the space within which - the secret name must be unique. - type: string - type: object - configDrive: - description: Config Drive support - type: boolean - flavor: - description: The flavor reference for the flavor for your - server instance. - type: string - floatingIP: - description: The floatingIP which will be associated to the - machine, only used for master. The floatingIP should have - been created and haven't been associated. - type: string - image: - description: The name of the image to use for your server - instance. If the RootVolume is specified, this will be ignored - and use rootVolume directly. - type: string - networks: - description: A networks object. Required parameter when there - are multiple networks defined for the tenant. When you do - not specify the networks parameter, the server attaches - to the only network created for the current tenant. - items: - properties: - filter: - description: Filters for optional network query - properties: - adminStateUp: - type: boolean - description: - type: string - id: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - shared: - type: boolean - sortDir: - type: string - sortKey: - type: string - status: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - fixedIp: - description: A fixed IPv4 address for the NIC. - type: string - subnets: - description: Subnet within a network to use - items: - properties: - filter: - description: Filters for optional network query - properties: - cidr: - type: string - description: - type: string - enableDhcp: - type: boolean - gateway_ip: - type: string - id: - type: string - ipVersion: - type: integer - ipv6AddressMode: - type: string - ipv6RaMode: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - networkId: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - sortDir: - type: string - sortKey: - type: string - subnetpoolId: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - uuid: - description: The UUID of the network. Required - if you omit the port attribute. - type: string - type: object - type: array - uuid: - description: The UUID of the network. Required if you - omit the port attribute. - type: string - type: object - type: array - providerID: - description: ProviderID is the unique identifier as specified - by the cloud provider. - type: string - rootVolume: - description: The volume metadata to boot from - properties: - deviceType: - type: string - diskSize: - type: integer - sourceType: - type: string - sourceUUID: - type: string - type: object - securityGroups: - description: The names of the security groups to assign to - the instance - items: - properties: - filter: - description: Filters used to query security groups in - openstack - properties: - description: - type: string - id: - type: string - limit: - type: integer - marker: - type: string - name: - type: string - notTags: - type: string - notTagsAny: - type: string - projectId: - type: string - sortDir: - type: string - sortKey: - type: string - tags: - type: string - tagsAny: - type: string - tenantId: - type: string - type: object - name: - description: Security Group name - type: string - uuid: - description: Security Group UID - type: string - type: object - type: array - serverMetadata: - additionalProperties: - type: string - description: Metadata mapping. Allows you to create a map - of key value pairs to add to the server instance. - type: object - sshKeyName: - description: The ssh key to inject in the instance - type: string - tags: - description: Machine tags Requires Nova api 2.52 minimum! - items: - type: string - type: array - trunk: - description: Whether the server instance is created on a trunk - port or not. - type: boolean - userDataSecret: - description: The name of the secret containing the user data - (startup script in most cases) - properties: - name: - description: Name is unique within a namespace to reference - a secret resource. - type: string - namespace: - description: Namespace defines the space within which - the secret name must be unique. - type: string - type: object - required: - - flavor - - image - type: object - required: - - spec - type: object - required: - - template - type: object - type: object - served: true - storage: false - name: v1alpha3 schema: openAPIV3Schema: diff --git a/controllers/suite_test.go b/controllers/suite_test.go index a12a042195..577215f944 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -25,7 +25,7 @@ import ( "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" - infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha2" + infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1alpha3" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest/printer" logf "sigs.k8s.io/controller-runtime/pkg/log" diff --git a/docs/config.md b/docs/config.md index b1bdd0f84b..a521e5b58f 100644 --- a/docs/config.md +++ b/docs/config.md @@ -58,11 +58,11 @@ to create floating IPs you have to make sure they already exist before creating There are different places where the floating IP has to be configured: * single-node control plane: - * Add a `.spec.floatingIP` field to the `-controlplane-0` Machine in`controlplane.yaml`. + * Add a `.spec.floatingIP` field to the `-controlplane` Machine in`controlplane.yaml`. * multi-node control plane: * Set the floating IP in `.spec.apiServerLoadBalancerFloatingIP` in your `` Cluster resource in `cluster.yaml`. * both: - * Configure floating IP in `.spec.clusterConfiguration.controlPlaneEndpoint` in your `-controlplane-0` KubeadmConfig resource in `controlplane.yaml`. + * Configure floating IP in `.spec.clusterConfiguration.controlPlaneEndpoint` in your `-controlplane` KubeadmConfig resource in `controlplane.yaml`. ## Security Group Rules @@ -86,7 +86,7 @@ The rules created are: * A rule for the controlplane machine, that allows access from everywhere to port 22 and 443. * A rule for all the machines, both the controlplane and the nodes that allow all traffic between members of this group. -In `controlplane.yaml` and `machinedeployment.yaml`, you can specify OpenStack security groups to be applied to each server in the `securityGroups` section of the YAML. You can specify the security group in 3 ways: by ID, by Name, or by filters. When you specify a security group by ID it will always return 1 security group or an error if it fails to find the security group specified. Please note that it is possible to add more than one security group to your machine when using Name or a Filter to specify it. More details about the filter can be found in [SecurityGroupParam](../api/v1alpha2/types.go). +In `controlplane.yaml` and `machinedeployment.yaml`, you can specify OpenStack security groups to be applied to each server in the `securityGroups` section of the YAML. You can specify the security group in 3 ways: by ID, by Name, or by filters. When you specify a security group by ID it will always return 1 security group or an error if it fails to find the security group specified. Please note that it is possible to add more than one security group to your machine when using Name or a Filter to specify it. More details about the filter can be found in [SecurityGroupParam](../api/v1alpha3/types.go). ## Operating System Images @@ -96,15 +96,15 @@ You can reference which operating system image you want to use in the `controlpl ## Network Filters -If you have a complex query that you want to use to lookup a network, then you can do this by using a network filter. More details about the filter can be found in [NetworkParam](../api/v1alpha2/types.go) +If you have a complex query that you want to use to lookup a network, then you can do this by using a network filter. More details about the filter can be found in [NetworkParam](../api/v1alpha3/types.go) By using filters to look up a network, please note that it is possible to get multiple networks as a result. This should not be a problem, however please test your filters with `openstack network list` to be certain that it returns the networks you want. Please refer to the following usage example: ```yaml -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackMachine metadata: - name: -controlplane-0 + name: -controlplane namespace: spec: networks: @@ -117,10 +117,10 @@ spec: You can specify multiple networks (or subnets) to connect your server to. To do this, simply add another entry in the networks array. The following example connects the server to 3 different networks: ```yaml -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackMachine metadata: - name: -controlplane-0 + name: -controlplane namespace: spec: networks: @@ -136,10 +136,10 @@ spec: Rather than just using a network, you have the option of specifying a specific subnet to connect your server to. The following is an example of how to specify a specific subnet of a network to use for your server. ```yaml -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackMachine metadata: - name: -controlplane-0 + name: -controlplane namespace: spec: networks: @@ -155,7 +155,7 @@ spec: By default, all resources will be tagged with the values: `clusterName` and `cluster-api-provider-openstack`. The minimum microversion of the nova api that you need to support server tagging is 2.52. If your cluster does not support this, then disable tagging servers by setting `disableServerTags: true` in `cluster.yaml`. By default, this value is false. If your cluster supports tagging servers, you have the ability to tag all resources created by the cluster in the `cluster.yaml` file. Here is an example how to configure tagging: ```yaml -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackCluster metadata: name: @@ -168,10 +168,10 @@ spec: To tag resources specific to a machine, add a value to the tags field in `controlplane.yaml` and `machinedeployment.yaml` like this: ```yaml -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackMachine metadata: - name: -controlplane-0 + name: -controlplane namespace: spec: tags: @@ -183,10 +183,10 @@ spec: Instead of tagging, you also have the option to add metadata to instances. This functionality should be more commonly available than tagging. Here is a usage example: ```yaml -apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackMachine metadata: - name: -controlplane-0 + name: -controlplane namespace: spec: serverMetadata: @@ -201,10 +201,10 @@ spec: 1. For example in `examples/_out/controlplane.yaml` set `spec.rootVolume.diskSize` to something greater than `0` means boot from volume. ```yaml - apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 + apiVersion: infrastructure.cluster.x-k8s.io/v1alpha3 kind: OpenStackMachine metadata: - name: -controlplane-0 + name: -controlplane namespace: spec: rootVolume: diff --git a/hack/tools/go.mod b/hack/tools/go.mod index 98859d8999..98c6eb4381 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -5,11 +5,11 @@ go 1.13 require ( github.com/a8m/envsubst v1.1.0 github.com/golang/mock v1.3.1 - github.com/golangci/golangci-lint v1.23.3 - github.com/onsi/ginkgo v1.11.0 + github.com/golangci/golangci-lint v1.23.8 + github.com/onsi/ginkgo v1.12.0 k8s.io/code-generator v0.18.0-alpha.2.0.20200130061103-7dfd5e9157ef - sigs.k8s.io/cluster-api/hack/tools v0.0.0-20200305133038-7711f9528dc2 - sigs.k8s.io/controller-tools v0.2.6-0.20200226180227-d6efdcdd90e2 - sigs.k8s.io/kustomize/kustomize/v3 v3.4.0 - sigs.k8s.io/testing_frameworks v0.1.1 + sigs.k8s.io/cluster-api/hack/tools v0.0.0-20200311152736-bfcc6f37fe12 + sigs.k8s.io/controller-tools v0.2.6 + sigs.k8s.io/kustomize/kustomize/v3 v3.5.4 + sigs.k8s.io/testing_frameworks v0.1.2 ) diff --git a/hack/tools/go.sum b/hack/tools/go.sum index ee494c57ec..7e17e23d44 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -24,6 +24,7 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= @@ -50,9 +51,11 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bombsimon/wsl v1.2.5/go.mod h1:43lEF/i0kpXbLCeDXL9LMT8c92HyBywXb0AsgMHYngM= github.com/bombsimon/wsl/v2 v2.0.0 h1:+Vjcn+/T5lSrO8Bjzhk4v14Un/2UyCA1E3V5j9nwTkQ= github.com/bombsimon/wsl/v2 v2.0.0/go.mod h1:mf25kr/SqFEPhhcxW1+7pxzGlW+hIl/hYTKY95VwV8U= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -72,9 +75,11 @@ github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 h1:w3NnFcKR5241cfmQU5ZZAsf0xcpId6mWOupTvJlUX2U= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= @@ -97,6 +102,8 @@ github.com/emicklei/go-restful v2.9.6+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= @@ -111,6 +118,7 @@ github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3 github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA= github.com/go-critic/go-critic v0.4.1 h1:4DTQfT1wWwLg/hzxwD9bkdhDQrdJtxe6DUTadPlrIeE= github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= @@ -154,6 +162,7 @@ github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcs github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.19.4 h1:ixzUSnHTd6hCemgtAJgluaTSGYpLNpJY4mA2DIkdOAo= github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= @@ -212,6 +221,7 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -233,8 +243,10 @@ github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98/go.mod h1:9qCChq59u github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= github.com/golangci/golangci-lint v1.19.1/go.mod h1:2CEc4Fxx3vxDv7g8DyXkHCBF73AOzAymcJAprs2vCps= +github.com/golangci/golangci-lint v1.21.0/go.mod h1:phxpHK52q7SE+5KpPnti4oZTdFCEsn/tKN+nFvCKXfk= github.com/golangci/golangci-lint v1.23.3 h1:wkACDEoy+b0CVqnSK8BbWrVkN2tsVLUA1+SIkGSm4o0= github.com/golangci/golangci-lint v1.23.3/go.mod h1:LNexeEyqT5hQH7v47e67JekL0V51lXFUjbPkopxNSK4= +github.com/golangci/golangci-lint v1.23.8/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= @@ -250,6 +262,9 @@ github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 h1:HVfrLniijszjS1 github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -264,6 +279,7 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -293,6 +309,8 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= @@ -346,6 +364,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -373,12 +393,14 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -398,17 +420,23 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1 github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.3.0/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34= github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= @@ -421,6 +449,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete/v2 v2.0.1-alpha.12/go.mod h1://JlL91cS2JV7rOl6LVHrRqBXoBUecJu3ILQPgbJiMQ= +github.com/posener/script v1.0.4/go.mod h1:Rg3ijooqulo05aGLyGsHoLmIOUzHUVK19WVgrYBPU/E= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -445,9 +475,11 @@ github.com/russross/blackfriday v2.0.0+incompatible h1:cBXrhZNUf9C+La9/YpS+UHpUT github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/securego/gosec v0.0.0-20190912120752-140048b2a218/go.mod h1:q6oYAujd2qyeU4cJqIri4LBIgdHXGvxWHZ1E29HNFRE= +github.com/securego/gosec v0.0.0-20191002120514-e680875ea14d/go.mod h1:w5+eXa0mYznDkHaMCXA4XYffjlH+cy1oyKbfzJXa2Do= github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83 h1:AtnWoOvTioyDXFvu96MWEeE8qj4COSQnJogzLy/u41A= github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= @@ -517,6 +549,7 @@ github.com/ultraware/whitespace v0.0.3/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89 github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/uudashr/gocognit v0.0.0-20190926065955-1655d0de0517/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjPs= github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -526,6 +559,8 @@ github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOV github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= +github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -548,6 +583,7 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -564,6 +600,7 @@ golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKG golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180112015858-5ccada7d0a7b/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -596,7 +633,9 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180117170059-2c42eef0765b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -617,8 +656,11 @@ golang.org/x/sys v0.0.0-20190911201528-7ad0cfa0b7b5/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24 h1:R8bzl0244nw47n1xKs1MUMAaTNgjavKcN/aX2Ss3+Fo= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e h1:N7DeIrjYszNmSW409R3frPPwglRwMkXSBzwVbkOjLLA= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -657,10 +699,14 @@ golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190911230505-6bfd74cf029c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190912215617-3720d1ec3678/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113232020-e2727e816f5a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200102140908-9497f49d5709 h1:AfG1EmoRkFK24HWWLxSrRKNg2G+oA3JVOG8GJsHWypQ= golang.org/x/tools v0.0.0-20200102140908-9497f49d5709/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204192400-7124308813f3 h1:Ms82wn6YK4ZycO6Bxyh0kxX3gFFVGo79CCuc52xgcys= +golang.org/x/tools v0.0.0-20200204192400-7124308813f3/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -701,6 +747,7 @@ gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.0.0/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -712,6 +759,8 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 h1:B0J02caTR6tpSJozBJyiAzT6CtBzjclw4pgm9gg8Ys0= gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d h1:LCPbGQ34PMrwad11aMZ+dbz5SAsq/0ySjRwQ8I9Qwd8= +gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -719,19 +768,28 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +k8s.io/api v0.0.0-20191214185829-ca1d04f8b0d3/go.mod h1:itOjKREfmUTvcjantxOsyYU5mbFsU7qUnyUuRfF5+5M= k8s.io/api v0.17.0 h1:H9d/lw+VkZKEVIUc8F3wgiQ+FUXTTr21M87jXLU7yqM= k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= k8s.io/apiextensions-apiserver v0.17.0 h1:+XgcGxqaMztkbbvsORgCmHIb4uImHKvTjNyu7b8gRnA= k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= +k8s.io/apimachinery v0.0.0-20191214185652-442f8fb2f03a/go.mod h1:Ng1IY8TS7sC44KJxT/WUR6qFRfWwahYYYpNXyYRKOCY= +k8s.io/apimachinery v0.0.0-20191216025728-0ee8b4573e3a/go.mod h1:Ng1IY8TS7sC44KJxT/WUR6qFRfWwahYYYpNXyYRKOCY= k8s.io/apimachinery v0.17.0 h1:xRBnuie9rXcPxUkDizUsGvPf1cnlZCFu210op7J7LJo= k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= +k8s.io/cli-runtime v0.0.0-20191214191754-e6dc6d5c8724/go.mod h1:wzlq80lvjgHW9if6MlE4OIGC86MDKsy5jtl9nxz/IYY= +k8s.io/cli-runtime v0.17.0/go.mod h1:1E5iQpMODZq2lMWLUJELwRu2MLWIzwvMgDBpn3Y81Qo= +k8s.io/client-go v0.0.0-20191214190045-a32a6f7a3052/go.mod h1:tAaoc/sYuIL0+njJefSAmE28CIcxyaFV4kbIujBlY2s= +k8s.io/client-go v0.0.0-20191219150334-0b8da7416048/go.mod h1:ZEe8ZASDUAuqVGJ+UN0ka0PfaR+b6a6E1PGsSNZRui8= k8s.io/client-go v0.17.0 h1:8QOGvUGdqDMFrm9sD6IUFl256BcffynGoe80sxgTEDg= k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= +k8s.io/code-generator v0.0.0-20191214185510-0b9b3c99f9f2/go.mod h1:BjGKcoq1MRUmcssvHiSxodCco1T6nVIt4YeCT5CMSao= k8s.io/code-generator v0.17.0 h1:y+KWtDWNqlJzJu/kUy8goJZO0X71PGIpAHLX8a0JYk0= k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/code-generator v0.18.0-alpha.2.0.20200130061103-7dfd5e9157ef h1:6aerVSYzUD5LpWog6L5kQs5/gDp2CAoCr+d8nV5lWUw= k8s.io/code-generator v0.18.0-alpha.2.0.20200130061103-7dfd5e9157ef/go.mod h1:NAaJDQco+Cl4r3iPb/hSe4nHkLV7qLo851pX3qtK/Hs= +k8s.io/component-base v0.0.0-20191214190519-d868452632e2/go.mod h1:wupxkh1T/oUDqyTtcIjiEfpbmIHGm8By/vqpSKC6z8c= k8s.io/component-base v0.17.0 h1:BnDFcmBDq+RPpxXjmuYnZXb59XNN9CaFrX8ba9+3xrA= k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -747,6 +805,8 @@ k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLy k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kubectl v0.0.0-20191219154910-1528d4eea6dd/go.mod h1:9ehGcuUGjXVZh0qbYSB0vvofQw2JQe6c6cO0k4wu/Oo= +k8s.io/metrics v0.0.0-20191214191643-6b1944c9f765/go.mod h1:5V7rewilItwK0cz4nomU0b3XCcees2Ka5EBYWS1HBeM= k8s.io/utils v0.0.0-20191030222137-2b95a09bc58d/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= @@ -763,13 +823,24 @@ mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f h1:Cq7MalBHYACRd6EesksG1Q8Eo mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= sigs.k8s.io/cluster-api/hack/tools v0.0.0-20200305133038-7711f9528dc2 h1:uY/92OlJvq6of92F5gg09v51mc0Bj2E16j0xy/pFxv8= sigs.k8s.io/cluster-api/hack/tools v0.0.0-20200305133038-7711f9528dc2/go.mod h1:WF3aMZ1CbnmwMuLqGVkwskKKmT35v6AdDdszViYrD7k= +sigs.k8s.io/cluster-api/hack/tools v0.0.0-20200311152736-bfcc6f37fe12/go.mod h1:8aibHfbqxNthBN4KKnk8UV9xTHKB3TE5nzxeNkH9xrU= sigs.k8s.io/controller-tools v0.2.6-0.20200226180227-d6efdcdd90e2 h1:emZ+AFmD8mTciBRbEj2Qfk/RDI8uApvizRrFpmHf7IQ= sigs.k8s.io/controller-tools v0.2.6-0.20200226180227-d6efdcdd90e2/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= +sigs.k8s.io/controller-tools v0.2.6 h1:4Fo36alFw5+Fffz7HhNd2EFBFvckqVkb4ePnIj0uLUc= +sigs.k8s.io/controller-tools v0.2.6/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= sigs.k8s.io/kubebuilder/docs/book/utils v0.0.0-20190903174343-de03361a00cb/go.mod h1:zSW4yXo5uN/rRueruOtX8TWM8wBPJippG9OAOygomc8= +sigs.k8s.io/kubebuilder/docs/book/utils v0.0.0-20200226075303-ed8438ec10a4/go.mod h1:nyAxPBUS04gN3IRuEQ0elG4mVeto/d/qQRsW2PsyAy4= +sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/kustomize/api v0.2.0 h1:e++6JpysnnlUbHmFrv6jvfF5rFlgQ103bS1DO7r5bWA= sigs.k8s.io/kustomize/api v0.2.0/go.mod h1:zVtMg179jW1gr74jo9fc2Ac9dLYLTZZThc3DDb9lDW4= +sigs.k8s.io/kustomize/api v0.3.2/go.mod h1:A+ATnlHqzictQfQC1q3KB/T6MSr0UWQsrrLxMWkge2E= +sigs.k8s.io/kustomize/cmd/config v0.0.5/go.mod h1:L47nDnZDfGFQG3gnPJLG2UABn0nVb9v+ndceyMH0jjU= +sigs.k8s.io/kustomize/cmd/kubectl v0.0.3/go.mod h1:JnS9HnTjUUMOE44WNboy/wi89J/K/XbAoU7O/iPXqqE= sigs.k8s.io/kustomize/kustomize/v3 v3.4.0 h1:K42+RIA5jYI/6mgP3yWt50s/2g5UNR3gXTm+cTSQ1GE= sigs.k8s.io/kustomize/kustomize/v3 v3.4.0/go.mod h1:i7bGnbXAlZKomwwc0uOLETK3bIXnoWXrsxhHTF6UJNU= +sigs.k8s.io/kustomize/kustomize/v3 v3.5.4/go.mod h1:tr4IIKWojBx6vFr6TUDoMMREcwrth1sV8BQ8VhlXxnI= +sigs.k8s.io/kustomize/kyaml v0.0.5/go.mod h1:waxTrzQRK9i6/5fR5HNo8xa4YwvWn8t85vMnOGFEZik= +sigs.k8s.io/kustomize/kyaml v0.0.6/go.mod h1:tDOfJjL6slQVBLHJ76XfXAFgAOEdfm04AW2HehYOp8k= sigs.k8s.io/kustomize/pseudo/k8s v0.1.0 h1:otg4dLFc03c3gzl+2CV8GPGcd1kk8wjXwD+UhhcCn5I= sigs.k8s.io/kustomize/pseudo/k8s v0.1.0/go.mod h1:bl/gVJgYYhJZCZdYU2BfnaKYAlqFkgbJEkpl302jEss= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= @@ -777,7 +848,9 @@ sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1 sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/testing_frameworks v0.1.1 h1:cP2l8fkA3O9vekpy5Ks8mmA0NW/F7yBdXf8brkWhVrs= sigs.k8s.io/testing_frameworks v0.1.1/go.mod h1:VVBKrHmJ6Ekkfz284YKhQePcdycOzNH9qL6ht1zEr/U= +sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 h1:JPJh2pk3+X4lXAkZIk2RuE/7/FoK9maXw+TNPJhVS/c= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI=