Init commit
This commit is contained in:
Родитель
482ec8856c
Коммит
8b72bea2f3
|
@ -42,6 +42,8 @@ kubeconfig
|
||||||
|
|
||||||
# Ignore output manifests
|
# Ignore output manifests
|
||||||
config/samples
|
config/samples
|
||||||
|
config/default/manager_image_patch.yaml
|
||||||
|
|
||||||
manager_image_patch.yaml-e
|
manager_image_patch.yaml-e
|
||||||
|
|
||||||
# Bazel
|
# Bazel
|
||||||
|
|
|
@ -22,23 +22,42 @@ jobs:
|
||||||
branchName: "refs/heads/master"
|
branchName: "refs/heads/master"
|
||||||
downloadType: "specific"
|
downloadType: "specific"
|
||||||
downloadPath: "$(System.DefaultWorkingDirectory)"
|
downloadPath: "$(System.DefaultWorkingDirectory)"
|
||||||
|
|
||||||
- task: InstallSSHKey@0
|
- task: InstallSSHKey@0
|
||||||
inputs:
|
inputs:
|
||||||
knownHostsEntry: "$(KNOWN_HOST)"
|
knownHostsEntry: "$(KNOWN_HOST)"
|
||||||
sshPublicKey: "$(SSH_PUBLIC_KEY)"
|
sshPublicKey: "$(SSH_PUBLIC_KEY)"
|
||||||
sshKeySecureFile: "azure-pipelines-ssh-key-new"
|
sshKeySecureFile: "azure-pipelines-ssh-key-new"
|
||||||
|
|
||||||
- task: DockerInstaller@0
|
- task: DockerInstaller@0
|
||||||
inputs:
|
inputs:
|
||||||
dockerVersion: "17.09.0-ce"
|
dockerVersion: "17.09.0-ce"
|
||||||
|
|
||||||
- task: Docker@2
|
- task: Docker@2
|
||||||
displayName: Login to ACR
|
displayName: Login to ACR
|
||||||
inputs:
|
inputs:
|
||||||
command: login
|
command: login
|
||||||
containerRegistry: mocimages-connection
|
containerRegistry: mocimages-connection
|
||||||
|
|
||||||
- task: GoTool@0
|
- task: GoTool@0
|
||||||
inputs:
|
inputs:
|
||||||
version: "1.19.9"
|
version: "1.19.9"
|
||||||
|
|
||||||
|
- script:
|
||||||
|
set -e
|
||||||
|
make test
|
||||||
|
workingDirectory: "$(System.DefaultWorkingDirectory)"
|
||||||
|
displayName: "Run Unit Tests"
|
||||||
|
|
||||||
|
- script:
|
||||||
|
[[ -z "$(git status -s)" ]] || {
|
||||||
|
git diff --color | cat;
|
||||||
|
echo "Source changes detected after running make. Make sure to build both the product and test code locally (and run unit tests) before pushing changes";
|
||||||
|
exit 1;
|
||||||
|
}
|
||||||
|
workingDirectory: "$(System.DefaultWorkingDirectory)"
|
||||||
|
displayName: "Check for uncommitted changes"
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
set -x
|
set -x
|
||||||
|
|
39
Dockerfile
39
Dockerfile
|
@ -13,42 +13,11 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
# Build the manager binary
|
# Use distroless as minimal base image to package the manager binary
|
||||||
#FROM golang:1.12.9 as builder
|
FROM mcr.microsoft.com/cbl-mariner/distroless/debug:2.0
|
||||||
# WORKDIR /workspace
|
|
||||||
|
|
||||||
# Run this with docker build --build_arg $(go env GOPROXY) to override the goproxy
|
|
||||||
#ARG goproxy=https://proxy.golang.org
|
|
||||||
#ENV GOPROXY=$goproxy
|
|
||||||
|
|
||||||
#ENV GOPRIVATE="github.com/microsoft"
|
|
||||||
#RUN go env GOPRIVATE=github.com/microsoft
|
|
||||||
|
|
||||||
# Copy the Go Modules manifests
|
|
||||||
#COPY go.mod go.mod
|
|
||||||
#COPY go.sum go.sum
|
|
||||||
# Cache deps before building and copying source so that we don't need to re-download as much
|
|
||||||
# and so that source changes don't invalidate our downloaded layer
|
|
||||||
#RUN go mod download
|
|
||||||
|
|
||||||
# Copy the sources
|
|
||||||
#COPY ./ ./
|
|
||||||
#COPY ./bin/manager ./
|
|
||||||
|
|
||||||
# Build
|
|
||||||
#ARG ARCH
|
|
||||||
#RUN CGO_ENABLED=0 GOOS=linux GOARCH=${ARCH} GO111MODULE=on \
|
|
||||||
# go build -a -ldflags '-extldflags "-static"' \
|
|
||||||
# -o manager .
|
|
||||||
|
|
||||||
|
|
||||||
# NOTE: Approach above is not used while we still have a couple of private git repo's.
|
|
||||||
# Can be uncommented later.
|
|
||||||
|
|
||||||
# Copy the controller-manager into a thin image
|
|
||||||
#FROM alpine:3.11
|
|
||||||
FROM gcr.io/distroless/static:latest
|
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
|
|
||||||
COPY bin/manager ./
|
COPY bin/manager ./
|
||||||
USER nobody
|
USER nobody
|
||||||
|
|
||||||
ENTRYPOINT ["/manager"]
|
ENTRYPOINT ["/manager"]
|
84
Makefile
84
Makefile
|
@ -66,8 +66,6 @@ OUTPUT_BASE := --output-base=$(ROOT_DIR)
|
||||||
CAPI_VERSION := v1.4.2
|
CAPI_VERSION := v1.4.2
|
||||||
|
|
||||||
# Binaries.
|
# Binaries.
|
||||||
KUBE_APISERVER=$(TOOLS_BIN_DIR)/kube-apiserver
|
|
||||||
ETCD=$(TOOLS_BIN_DIR)/etcd
|
|
||||||
GO_INSTALL = ./scripts/go_install.sh
|
GO_INSTALL = ./scripts/go_install.sh
|
||||||
|
|
||||||
# Binaries.
|
# Binaries.
|
||||||
|
@ -87,7 +85,7 @@ ENVSUBST_VER := v2.0.0-20210730161058-179042472c46
|
||||||
ENVSUBST_BIN := envsubst
|
ENVSUBST_BIN := envsubst
|
||||||
ENVSUBST := $(TOOLS_BIN_DIR)/$(ENVSUBST_BIN)-$(ENVSUBST_VER)
|
ENVSUBST := $(TOOLS_BIN_DIR)/$(ENVSUBST_BIN)-$(ENVSUBST_VER)
|
||||||
|
|
||||||
GOLANGCI_LINT_VER := v1.48.0
|
GOLANGCI_LINT_VER := v1.54.1
|
||||||
GOLANGCI_LINT_BIN := golangci-lint
|
GOLANGCI_LINT_BIN := golangci-lint
|
||||||
GOLANGCI_LINT := $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)-$(GOLANGCI_LINT_VER)
|
GOLANGCI_LINT := $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)-$(GOLANGCI_LINT_VER)
|
||||||
|
|
||||||
|
@ -107,14 +105,28 @@ GO_APIDIFF_VER := v0.6.0
|
||||||
GO_APIDIFF_BIN := go-apidiff
|
GO_APIDIFF_BIN := go-apidiff
|
||||||
GO_APIDIFF := $(TOOLS_BIN_DIR)/$(GO_APIDIFF_BIN)
|
GO_APIDIFF := $(TOOLS_BIN_DIR)/$(GO_APIDIFF_BIN)
|
||||||
|
|
||||||
GINKGO_VER := v2.9.7
|
GINKGO_VER := v2.9.2
|
||||||
GINKGO_BIN := ginkgo
|
GINKGO_BIN := ginkgo
|
||||||
GINKGO := $(TOOLS_BIN_DIR)/$(GINKGO_BIN)-$(GINKGO_VER)
|
GINKGO := $(TOOLS_BIN_DIR)/$(GINKGO_BIN)-$(GINKGO_VER)
|
||||||
|
|
||||||
KUBECTL_VER := v1.25.11
|
KUBECTL_VER := v1.26.6
|
||||||
KUBECTL_BIN := kubectl
|
KUBECTL_BIN := kubectl
|
||||||
KUBECTL := $(TOOLS_BIN_DIR)/$(KUBECTL_BIN)-$(KUBECTL_VER)
|
KUBECTL := $(TOOLS_BIN_DIR)/$(KUBECTL_BIN)-$(KUBECTL_VER)
|
||||||
|
|
||||||
|
# ENVTEST is used for running controller tests.
|
||||||
|
SETUP_ENVTEST_VER := 116a1b831fffe7ccc3c8145306c3e1a3b1b14ffa # Note: this matches the commit ID of the dependent controller-runtime module.
|
||||||
|
SETUP_ENVTEST_BIN := setup-envtest
|
||||||
|
SETUP_ENVTEST := $(abspath $(TOOLS_BIN_DIR)/$(SETUP_ENVTEST_BIN)-$(SETUP_ENVTEST_VER))
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kubebuilder
|
||||||
|
#
|
||||||
|
export KUBEBUILDER_ENVTEST_KUBERNETES_VERSION ?= 1.26.0
|
||||||
|
export KUBEBUILDER_CONTROLPLANE_START_TIMEOUT ?= 60s
|
||||||
|
export KUBEBUILDER_CONTROLPLANE_STOP_TIMEOUT ?= 60s
|
||||||
|
|
||||||
|
KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST) use --use-env -p path $(KUBEBUILDER_ENVTEST_KUBERNETES_VERSION))
|
||||||
|
|
||||||
# Version
|
# Version
|
||||||
MAJOR_VER ?= 1
|
MAJOR_VER ?= 1
|
||||||
MINOR_VER ?= 1
|
MINOR_VER ?= 1
|
||||||
|
@ -153,27 +165,10 @@ help: ## Display this help
|
||||||
## Testing
|
## Testing
|
||||||
## --------------------------------------
|
## --------------------------------------
|
||||||
|
|
||||||
test: export TEST_ASSET_KUBECTL = $(ROOT_DIR)/$(KUBECTL)
|
|
||||||
test: export TEST_ASSET_KUBE_APISERVER = $(ROOT_DIR)/$(KUBE_APISERVER)
|
|
||||||
test: export TEST_ASSET_ETCD = $(ROOT_DIR)/$(ETCD)
|
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: $(KUBECTL) $(KUBE_APISERVER) $(ETCD) generate lint ## Run tests
|
test: generate lint fmt modules vet $(SETUP_ENVTEST)
|
||||||
go test ./...
|
KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" \
|
||||||
|
ginkgo -r -v -cover -coverprofile cover.out ./...
|
||||||
|
|
||||||
.PHONY: test-integration
|
|
||||||
test-integration: ## Run integration tests
|
|
||||||
go test -v -tags=integration ./test/integration/...
|
|
||||||
|
|
||||||
.PHONY: test-e2e
|
|
||||||
test-e2e: ## Run e2e tests
|
|
||||||
PULL_POLICY=IfNotPresent $(MAKE) docker-build
|
|
||||||
MANAGER_IMAGE=$(CONTROLLER_IMG)-$(ARCH):$(TAG) \
|
|
||||||
go test ./test/e2e -v -tags=e2e -ginkgo.v -ginkgo.trace -count=1 -timeout=90m
|
|
||||||
|
|
||||||
$(KUBE_APISERVER) $(ETCD): ## install test asset kube-apiserver, etcd
|
|
||||||
source ./scripts/fetch_ext_bins.sh && fetch_tools
|
|
||||||
|
|
||||||
## --------------------------------------
|
## --------------------------------------
|
||||||
## Binaries
|
## Binaries
|
||||||
|
@ -182,8 +177,9 @@ $(KUBE_APISERVER) $(ETCD): ## install test asset kube-apiserver, etcd
|
||||||
.PHONY: binaries
|
.PHONY: binaries
|
||||||
binaries: manager ## Builds and installs all binaries
|
binaries: manager ## Builds and installs all binaries
|
||||||
|
|
||||||
.PHONY: manager
|
## Build manager binary.
|
||||||
manager: ## Build manager binary.
|
.PHONY: manager
|
||||||
|
manager: generate lint fmt modules vet ## Build manager binary.
|
||||||
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o bin/manager cmd/manager/main.go
|
CGO_ENABLED=0 GOOS=linux go build -a -ldflags '-extldflags "-static"' -o bin/manager cmd/manager/main.go
|
||||||
|
|
||||||
## --------------------------------------
|
## --------------------------------------
|
||||||
|
@ -203,6 +199,7 @@ $(CLUSTERCTL_BIN): $(CLUSTERCTL)
|
||||||
$(CONTROLLER_GEN): ## Build controller-gen from tools folder.
|
$(CONTROLLER_GEN): ## Build controller-gen from tools folder.
|
||||||
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) sigs.k8s.io/controller-tools/cmd/controller-gen $(CONTROLLER_GEN_BIN) $(CONTROLLER_GEN_VER)
|
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) sigs.k8s.io/controller-tools/cmd/controller-gen $(CONTROLLER_GEN_BIN) $(CONTROLLER_GEN_VER)
|
||||||
|
|
||||||
|
|
||||||
$(CONVERSION_GEN): ## Build conversion-gen.
|
$(CONVERSION_GEN): ## Build conversion-gen.
|
||||||
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) k8s.io/code-generator/cmd/conversion-gen $(CONVERSION_GEN_BIN) $(CONVERSION_GEN_VER)
|
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) k8s.io/code-generator/cmd/conversion-gen $(CONVERSION_GEN_BIN) $(CONVERSION_GEN_VER)
|
||||||
|
|
||||||
|
@ -212,6 +209,16 @@ $(ENVSUBST): ## Build envsubst from tools folder.
|
||||||
.PHONY: $(ENVSUBST_BIN)
|
.PHONY: $(ENVSUBST_BIN)
|
||||||
$(ENVSUBST_BIN): $(ENVSUBST)
|
$(ENVSUBST_BIN): $(ENVSUBST)
|
||||||
|
|
||||||
|
.PHONY: $(SETUP_ENVTEST_BIN)
|
||||||
|
$(SETUP_ENVTEST_BIN): $(SETUP_ENVTEST) ## Build a local copy of setup-envtest.
|
||||||
|
|
||||||
|
.PHONY: setup-envtest
|
||||||
|
setup-envtest: $(SETUP_ENVTEST) ## Set up envtest (download kubebuilder assets)
|
||||||
|
@echo KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS)
|
||||||
|
|
||||||
|
.PHONY: mockgen
|
||||||
|
mockgen: $(MOCKGEN) ## Generate mocks using mockgen.
|
||||||
|
|
||||||
$(GOLANGCI_LINT): ## Build golangci-lint from tools folder.
|
$(GOLANGCI_LINT): ## Build golangci-lint from tools folder.
|
||||||
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) github.com/golangci/golangci-lint/cmd/golangci-lint $(GOLANGCI_LINT_BIN) $(GOLANGCI_LINT_VER)
|
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) github.com/golangci/golangci-lint/cmd/golangci-lint $(GOLANGCI_LINT_BIN) $(GOLANGCI_LINT_VER)
|
||||||
|
|
||||||
|
@ -240,6 +247,10 @@ $(KUBECTL): ## Get kubectl
|
||||||
.PHONY: $(KUBECTL_BIN)
|
.PHONY: $(KUBECTL_BIN)
|
||||||
$(KUBECTL_BIN): $(KUBECTL)
|
$(KUBECTL_BIN): $(KUBECTL)
|
||||||
|
|
||||||
|
$(SETUP_ENVTEST): # Build setup-envtest.
|
||||||
|
GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) sigs.k8s.io/controller-runtime/tools/setup-envtest $(SETUP_ENVTEST_BIN) $(SETUP_ENVTEST_VER)
|
||||||
|
@echo "🛠 setup-envtest installed to $(TOOLS_BIN_DIR)/$(ENVTEST_BIN)"
|
||||||
|
|
||||||
## --------------------------------------
|
## --------------------------------------
|
||||||
## Linting
|
## Linting
|
||||||
## --------------------------------------
|
## --------------------------------------
|
||||||
|
@ -260,6 +271,15 @@ modules: ## Runs go mod to ensure proper vendoring.
|
||||||
go mod tidy
|
go mod tidy
|
||||||
cd $(TOOLS_DIR); go mod tidy
|
cd $(TOOLS_DIR); go mod tidy
|
||||||
|
|
||||||
|
# Run go fmt against code
|
||||||
|
.PHONY: fmt
|
||||||
|
fmt:
|
||||||
|
go fmt ./...
|
||||||
|
|
||||||
|
# Run go vet against code
|
||||||
|
vet:
|
||||||
|
go vet ./...
|
||||||
|
|
||||||
.PHONY: generate
|
.PHONY: generate
|
||||||
generate: ## Generate code
|
generate: ## Generate code
|
||||||
$(MAKE) generate-go
|
$(MAKE) generate-go
|
||||||
|
@ -270,19 +290,13 @@ generate: ## Generate code
|
||||||
generate-go: $(CONTROLLER_GEN) $(MOCKGEN) $(CONVERSION_GEN) ## Runs Go related generate targets
|
generate-go: $(CONTROLLER_GEN) $(MOCKGEN) $(CONVERSION_GEN) ## Runs Go related generate targets
|
||||||
go generate ./...
|
go generate ./...
|
||||||
$(CONTROLLER_GEN) \
|
$(CONTROLLER_GEN) \
|
||||||
paths=./api/... \
|
paths=./api/v1beta1 \
|
||||||
object:headerFile=./hack/boilerplate/boilerplate.generatego.txt
|
object:headerFile=./hack/boilerplate/boilerplate.generatego.txt
|
||||||
|
|
||||||
$(CONVERSION_GEN) \
|
|
||||||
--input-dirs=./api/v1alpha3 \
|
|
||||||
--input-dirs=./api/v1alpha4 \
|
|
||||||
--output-file-base=zz_generated.conversion $(OUTPUT_BASE) \
|
|
||||||
--go-header-file=./hack/boilerplate/boilerplate.generatego.txt
|
|
||||||
|
|
||||||
.PHONY: generate-manifests
|
.PHONY: generate-manifests
|
||||||
generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
|
generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
|
||||||
$(CONTROLLER_GEN) \
|
$(CONTROLLER_GEN) \
|
||||||
paths=./api/... \
|
paths=./api/v1beta1 \
|
||||||
crd:crdVersions=v1 \
|
crd:crdVersions=v1 \
|
||||||
rbac:roleName=manager-role \
|
rbac:roleName=manager-role \
|
||||||
output:crd:dir=$(CRD_ROOT) \
|
output:crd:dir=$(CRD_ROOT) \
|
||||||
|
|
|
@ -106,12 +106,14 @@ func (s Subnets) ToMap() map[string]*SubnetSpec {
|
||||||
|
|
||||||
type IPAllocationMethod int32
|
type IPAllocationMethod int32
|
||||||
|
|
||||||
|
// nolint: golint
|
||||||
const (
|
const (
|
||||||
IPAllocationMethod_Invalid IPAllocationMethod = 0
|
IPAllocationMethod_Invalid IPAllocationMethod = 0
|
||||||
IPAllocationMethod_Dynamic IPAllocationMethod = 1
|
IPAllocationMethod_Dynamic IPAllocationMethod = 1
|
||||||
IPAllocationMethod_Static IPAllocationMethod = 2
|
IPAllocationMethod_Static IPAllocationMethod = 2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// nolint: golint
|
||||||
type IpConfigurationSpec struct {
|
type IpConfigurationSpec struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
// +optional
|
// +optional
|
||||||
|
@ -128,6 +130,8 @@ type IpConfigurationSpec struct {
|
||||||
// +optional
|
// +optional
|
||||||
Gateway string `json:"gateway,omitempty"`
|
Gateway string `json:"gateway,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nolint: golint
|
||||||
type IpConfigurations []*IpConfigurationSpec
|
type IpConfigurations []*IpConfigurationSpec
|
||||||
|
|
||||||
type NetworkInterfaceSpec struct {
|
type NetworkInterfaceSpec struct {
|
||||||
|
|
|
@ -59,6 +59,7 @@ const (
|
||||||
LatestVersion = "latest"
|
LatestVersion = "latest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// nolint: golint
|
||||||
const (
|
const (
|
||||||
// Role is used to distinguish api server lb from other lbs.
|
// Role is used to distinguish api server lb from other lbs.
|
||||||
// used by SDN integration
|
// used by SDN integration
|
||||||
|
|
|
@ -84,7 +84,7 @@ func NewClusterScope(params ClusterScopeParams) (*ClusterScope, error) {
|
||||||
Context: scopeContext,
|
Context: scopeContext,
|
||||||
}
|
}
|
||||||
|
|
||||||
authorizer, err := azhciauth.ReconcileAzureStackHCIAccess(*params.Logger, scope.Context, scope.Client, agentFqdn)
|
authorizer, err := azhciauth.ReconcileAzureStackHCIAccess(scope.Context, *params.Logger, scope.Client, agentFqdn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "error creating azurestackhci services. can not authenticate to azurestackhci")
|
return nil, errors.Wrap(err, "error creating azurestackhci services. can not authenticate to azurestackhci")
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// ScopeInterface allows multiple scope types to be used for cloud services
|
// ScopeInterface allows multiple scope types to be used for cloud services
|
||||||
|
// nolint: golint
|
||||||
type ScopeInterface interface {
|
type ScopeInterface interface {
|
||||||
GetResourceGroup() string
|
GetResourceGroup() string
|
||||||
GetCloudAgentFqdn() string
|
GetCloudAgentFqdn() string
|
||||||
|
|
|
@ -68,7 +68,7 @@ func NewVirtualMachineScope(params VirtualMachineScopeParams) (*VirtualMachineSc
|
||||||
params.AzureStackHCIClients.CloudAgentFqdn = agentFqdn
|
params.AzureStackHCIClients.CloudAgentFqdn = agentFqdn
|
||||||
|
|
||||||
scopeContext := diagnostics.NewContextWithCorrelationId(context.Background(), params.AzureStackHCIVirtualMachine.GetAnnotations()[infrav1.AzureCorrelationIDAnnotationKey])
|
scopeContext := diagnostics.NewContextWithCorrelationId(context.Background(), params.AzureStackHCIVirtualMachine.GetAnnotations()[infrav1.AzureCorrelationIDAnnotationKey])
|
||||||
authorizer, err := azhciauth.ReconcileAzureStackHCIAccess(*params.Logger, scopeContext, params.Client, agentFqdn)
|
authorizer, err := azhciauth.ReconcileAzureStackHCIAccess(scopeContext, *params.Logger, params.Client, agentFqdn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to create azurestackhci session")
|
return nil, errors.Wrap(err, "failed to create azurestackhci session")
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
//"github.com/Azure/go-autorest/autorest"
|
//"github.com/Azure/go-autorest/autorest"
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/storage/virtualharddisk"
|
"github.com/microsoft/moc-sdk-for-go/services/storage/virtualharddisk"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -20,8 +20,8 @@ package groups
|
||||||
import (
|
import (
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/cloud/group"
|
"github.com/microsoft/moc-sdk-for-go/services/cloud/group"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -22,13 +22,13 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *Service) GetMocDeploymentId(ctx context.Context) string {
|
func (s *Service) GetMocDeploymentID(ctx context.Context) string {
|
||||||
deploymentId, err := s.Client.GetDeploymentId(ctx)
|
deploymentID, err := s.Client.GetDeploymentId(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.Scope.GetLogger().Error(err, "Unable to get moc deployment id")
|
s.Scope.GetLogger().Error(err, "Unable to get moc deployment id")
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return deploymentId
|
return deploymentID
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,8 @@ package keyvaults
|
||||||
import (
|
import (
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/security/keyvault"
|
"github.com/microsoft/moc-sdk-for-go/services/security/keyvault"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -70,12 +70,12 @@ func (s *Service) Reconcile(ctx context.Context, spec interface{}) error {
|
||||||
Name: to.StringPtr(lbSpec.Name),
|
Name: to.StringPtr(lbSpec.Name),
|
||||||
LoadBalancerPropertiesFormat: &network.LoadBalancerPropertiesFormat{
|
LoadBalancerPropertiesFormat: &network.LoadBalancerPropertiesFormat{
|
||||||
BackendAddressPools: &[]network.BackendAddressPool{
|
BackendAddressPools: &[]network.BackendAddressPool{
|
||||||
network.BackendAddressPool{
|
{
|
||||||
Name: to.StringPtr(lbSpec.BackendPoolName),
|
Name: to.StringPtr(lbSpec.BackendPoolName),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
FrontendIPConfigurations: &[]network.FrontendIPConfiguration{
|
FrontendIPConfigurations: &[]network.FrontendIPConfiguration{
|
||||||
network.FrontendIPConfiguration{
|
{
|
||||||
FrontendIPConfigurationPropertiesFormat: &network.FrontendIPConfigurationPropertiesFormat{
|
FrontendIPConfigurationPropertiesFormat: &network.FrontendIPConfigurationPropertiesFormat{
|
||||||
Subnet: &network.Subnet{
|
Subnet: &network.Subnet{
|
||||||
ID: to.StringPtr(lbSpec.VnetName),
|
ID: to.StringPtr(lbSpec.VnetName),
|
||||||
|
@ -84,7 +84,7 @@ func (s *Service) Reconcile(ctx context.Context, spec interface{}) error {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
LoadBalancingRules: &[]network.LoadBalancingRule{
|
LoadBalancingRules: &[]network.LoadBalancingRule{
|
||||||
network.LoadBalancingRule{
|
{
|
||||||
LoadBalancingRulePropertiesFormat: &network.LoadBalancingRulePropertiesFormat{
|
LoadBalancingRulePropertiesFormat: &network.LoadBalancingRulePropertiesFormat{
|
||||||
Protocol: network.TransportProtocolTCP,
|
Protocol: network.TransportProtocolTCP,
|
||||||
FrontendPort: to.Int32Ptr(lbSpec.FrontendPort),
|
FrontendPort: to.Int32Ptr(lbSpec.FrontendPort),
|
||||||
|
|
|
@ -20,8 +20,8 @@ package loadbalancers
|
||||||
import (
|
import (
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/network/loadbalancer"
|
"github.com/microsoft/moc-sdk-for-go/services/network/loadbalancer"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -104,7 +104,7 @@ func (s *Service) Reconcile(ctx context.Context, spec interface{}) error {
|
||||||
logger.Info("Adding ipconfigurations to nic ", "len", len(nicSpec.IPConfigurations), "name", nicSpec.Name)
|
logger.Info("Adding ipconfigurations to nic ", "len", len(nicSpec.IPConfigurations), "name", nicSpec.Name)
|
||||||
for _, ipconfig := range nicSpec.IPConfigurations {
|
for _, ipconfig := range nicSpec.IPConfigurations {
|
||||||
|
|
||||||
networkIpConfig := network.InterfaceIPConfiguration{
|
networkIPConfig := network.InterfaceIPConfiguration{
|
||||||
Name: &ipconfig.Name,
|
Name: &ipconfig.Name,
|
||||||
InterfaceIPConfigurationPropertiesFormat: &network.InterfaceIPConfigurationPropertiesFormat{
|
InterfaceIPConfigurationPropertiesFormat: &network.InterfaceIPConfigurationPropertiesFormat{
|
||||||
Primary: &ipconfig.Primary,
|
Primary: &ipconfig.Primary,
|
||||||
|
@ -115,18 +115,18 @@ func (s *Service) Reconcile(ctx context.Context, spec interface{}) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ipconfig.Primary {
|
if ipconfig.Primary {
|
||||||
networkIpConfig.LoadBalancerBackendAddressPools = &backendAddressPools
|
networkIPConfig.LoadBalancerBackendAddressPools = &backendAddressPools
|
||||||
}
|
}
|
||||||
|
|
||||||
*networkInterface.IPConfigurations = append(*networkInterface.IPConfigurations, networkIpConfig)
|
*networkInterface.IPConfigurations = append(*networkInterface.IPConfigurations, networkIPConfig)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
networkIpConfig := network.InterfaceIPConfiguration{
|
networkIPConfig := network.InterfaceIPConfiguration{
|
||||||
Name: to.StringPtr("pipConfig"),
|
Name: to.StringPtr("pipConfig"),
|
||||||
InterfaceIPConfigurationPropertiesFormat: nicConfig,
|
InterfaceIPConfigurationPropertiesFormat: nicConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
*networkInterface.IPConfigurations = append(*networkInterface.IPConfigurations, networkIpConfig)
|
*networkInterface.IPConfigurations = append(*networkInterface.IPConfigurations, networkIPConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := s.Client.CreateOrUpdate(ctx,
|
_, err := s.Client.CreateOrUpdate(ctx,
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
//"github.com/Azure/go-autorest/autorest"
|
//"github.com/Azure/go-autorest/autorest"
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/network/networkinterface"
|
"github.com/microsoft/moc-sdk-for-go/services/network/networkinterface"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -20,8 +20,8 @@ package vippools
|
||||||
import (
|
import (
|
||||||
azhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/network/vippool"
|
"github.com/microsoft/moc-sdk-for-go/services/network/vippool"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azhci.Service = (*Service)(nil)
|
var _ azhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -20,8 +20,8 @@ package virtualmachines
|
||||||
import (
|
import (
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/compute/virtualmachine"
|
"github.com/microsoft/moc-sdk-for-go/services/compute/virtualmachine"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -326,7 +326,7 @@ func GenerateRandomString(n int) (string, error) {
|
||||||
|
|
||||||
// generateComputerName returns a unique OS computer name which is expected to be valid on any
|
// generateComputerName returns a unique OS computer name which is expected to be valid on any
|
||||||
// operating system. To satisfy Windows requirements, we generate a length-restricted name. The
|
// operating system. To satisfy Windows requirements, we generate a length-restricted name. The
|
||||||
// generated computer name has the following format: <prefix><os_identifer><random chars>
|
// generated computer name has the following format: <prefix><os_identifier><random chars>
|
||||||
func generateComputerName(os infrav1.OSType) (string, error) {
|
func generateComputerName(os infrav1.OSType) (string, error) {
|
||||||
computerName := computerNamePrefix
|
computerName := computerNamePrefix
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
//"github.com/Azure/go-autorest/autorest"
|
//"github.com/Azure/go-autorest/autorest"
|
||||||
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
azurestackhci "github.com/microsoft/cluster-api-provider-azurestackhci/cloud"
|
||||||
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
"github.com/microsoft/moc/pkg/auth"
|
|
||||||
"github.com/microsoft/moc-sdk-for-go/services/network/virtualnetwork"
|
"github.com/microsoft/moc-sdk-for-go/services/network/virtualnetwork"
|
||||||
|
"github.com/microsoft/moc/pkg/auth"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ azurestackhci.Service = (*Service)(nil)
|
var _ azurestackhci.Service = (*Service)(nil)
|
||||||
|
|
|
@ -122,7 +122,7 @@ func GenerateMocResourceName(nameSegments ...string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
type MocInfoLog struct {
|
type MocInfoLog struct {
|
||||||
MocDeploymentId string `json:"moc_deployment_id"`
|
MocDeploymentID string `json:"moc_deployment_id"`
|
||||||
WssdCloudAgentVersion string `json:"wssd_cloud_agent_version"`
|
WssdCloudAgentVersion string `json:"wssd_cloud_agent_version"`
|
||||||
MocVersion string `json:"moc_version"`
|
MocVersion string `json:"moc_version"`
|
||||||
}
|
}
|
||||||
|
@ -131,7 +131,7 @@ var healthService *health.Service
|
||||||
var versionsService *versions.Service
|
var versionsService *versions.Service
|
||||||
|
|
||||||
func WriteMocInfoLog(ctx context.Context, scope scope.ScopeInterface) {
|
func WriteMocInfoLog(ctx context.Context, scope scope.ScopeInterface) {
|
||||||
deploymentId := getHealthService(scope).GetMocDeploymentId(ctx)
|
deploymentID := getHealthService(scope).GetMocDeploymentID(ctx)
|
||||||
wssdCloudAgentVersion := ""
|
wssdCloudAgentVersion := ""
|
||||||
mocVersion := ""
|
mocVersion := ""
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ func WriteMocInfoLog(ctx context.Context, scope scope.ScopeInterface) {
|
||||||
}
|
}
|
||||||
|
|
||||||
infoLog := MocInfoLog{
|
infoLog := MocInfoLog{
|
||||||
MocDeploymentId: deploymentId,
|
MocDeploymentID: deploymentID,
|
||||||
WssdCloudAgentVersion: wssdCloudAgentVersion,
|
WssdCloudAgentVersion: wssdCloudAgentVersion,
|
||||||
MocVersion: mocVersion,
|
MocVersion: mocVersion,
|
||||||
}
|
}
|
||||||
|
@ -158,7 +158,7 @@ func WriteMocInfoLog(ctx context.Context, scope scope.ScopeInterface) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getHealthService(scope scope.ScopeInterface) *health.Service {
|
func getHealthService(scope scope.ScopeInterface) *health.Service {
|
||||||
// if healthService instance is created, directy return instance
|
// if healthService instance is created, directly return instance
|
||||||
if healthService != nil {
|
if healthService != nil {
|
||||||
return healthService
|
return healthService
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@ package main
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
|
//nolint:gosec
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
@ -162,6 +164,7 @@ func main() {
|
||||||
if profilerAddress != "" {
|
if profilerAddress != "" {
|
||||||
setupLog.Info("Profiler listening for requests", "profiler-address", profilerAddress)
|
setupLog.Info("Profiler listening for requests", "profiler-address", profilerAddress)
|
||||||
go func() {
|
go func() {
|
||||||
|
//nolint:gosec
|
||||||
setupLog.Error(http.ListenAndServe(profilerAddress, nil), "listen and serve error")
|
setupLog.Error(http.ListenAndServe(profilerAddress, nil), "listen and serve error")
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
resources:
|
resources:
|
||||||
- certificate.yaml
|
- certificate.yaml
|
||||||
configurations:
|
configurations:
|
||||||
- kustomizeconfig.yaml
|
- kustomizeconfig.yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
|
@ -16,604 +16,6 @@ spec:
|
||||||
singular: azurestackhcicluster
|
singular: azurestackhcicluster
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- additionalPrinterColumns:
|
|
||||||
- description: AzureStackHCICluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
|
|
||||||
jsonPath: .status.phase
|
|
||||||
name: Phase
|
|
||||||
type: string
|
|
||||||
name: v1alpha3
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCICluster is the Schema for the azurestackhciclusters
|
|
||||||
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: AzureStackHCIClusterSpec defines the desired state of AzureStackHCICluster
|
|
||||||
properties:
|
|
||||||
azureStackHCILoadBalancer:
|
|
||||||
description: AzureStackHCILoadBalancer is used to declare the AzureStackHCILoadBalancerSpec
|
|
||||||
if a LoadBalancer is desired for the AzureStackHCICluster.
|
|
||||||
properties:
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use
|
|
||||||
for VM creation. There are three ways to specify an image: by
|
|
||||||
ID, by publisher, or by Shared Image Gallery. If specifying
|
|
||||||
an image by ID, only the ID field needs to be set. If specifying
|
|
||||||
an image by publisher, the Publisher, Offer, SKU, and Version
|
|
||||||
fields must be set. If specifying an image from a Shared Image
|
|
||||||
Gallery, the SubscriptionID, ResourceGroup, Gallery, Name, and
|
|
||||||
Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
replicas:
|
|
||||||
default: 1
|
|
||||||
description: Number of desired loadbalancer machines. Defaults
|
|
||||||
to 1. This is a pointer to distinguish between explicit zero
|
|
||||||
and not specified.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- image
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
controlPlaneEndpoint:
|
|
||||||
description: ControlPlaneEndpoint represents the endpoint used to
|
|
||||||
communicate with the control plane.
|
|
||||||
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.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
required:
|
|
||||||
- host
|
|
||||||
- port
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
management:
|
|
||||||
description: Management is true when the cluster is a Management Cluster.
|
|
||||||
type: boolean
|
|
||||||
networkSpec:
|
|
||||||
description: NetworkSpec encapsulates all things related to Azure
|
|
||||||
network.
|
|
||||||
properties:
|
|
||||||
subnets:
|
|
||||||
description: Subnets is the configuration for the control-plane
|
|
||||||
subnet and the node subnet.
|
|
||||||
items:
|
|
||||||
description: SubnetSpec configures an Azure subnet.
|
|
||||||
properties:
|
|
||||||
cidrBlock:
|
|
||||||
description: CidrBlock is the CIDR block to be used when
|
|
||||||
the provider creates a managed Vnet.
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
description: ID defines a unique identifier to reference
|
|
||||||
this resource.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name defines a name for the subnet resource.
|
|
||||||
type: string
|
|
||||||
vnetId:
|
|
||||||
description: VnetID defines the ID of the virtual network
|
|
||||||
this subnet should be built in.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
- vnetId
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
vnet:
|
|
||||||
description: Vnet is the configuration for the Azure virtual network.
|
|
||||||
properties:
|
|
||||||
cidrBlock:
|
|
||||||
description: CidrBlock is the CIDR block to be used when the
|
|
||||||
provider creates a managed virtual network.
|
|
||||||
type: string
|
|
||||||
group:
|
|
||||||
description: Group is the resource group the vnet should use.
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
description: ID is the identifier of the virtual network this
|
|
||||||
provider should use to create resources.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name defines a name for the virtual network resource.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
description: Version indicates the desired Kubernetes version of the
|
|
||||||
cluster.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- location
|
|
||||||
- resourceGroup
|
|
||||||
- version
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: AzureStackHCIClusterStatus defines the observed state of
|
|
||||||
AzureStackHCICluster
|
|
||||||
properties:
|
|
||||||
bastion:
|
|
||||||
description: VM describes an Azure virtual machine.
|
|
||||||
properties:
|
|
||||||
availabilityZone:
|
|
||||||
type: string
|
|
||||||
bootstrapData:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
identity:
|
|
||||||
description: VMIdentity defines the identity of the virtual machine,
|
|
||||||
if configured.
|
|
||||||
type: string
|
|
||||||
image:
|
|
||||||
description: Storage profile
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
vmSize:
|
|
||||||
description: Hardware profile
|
|
||||||
type: string
|
|
||||||
vmState:
|
|
||||||
description: State - The provisioning state, which only appears
|
|
||||||
in the response.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCICluster.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
phase:
|
|
||||||
description: Phase represents the current phase of cluster actuation.
|
|
||||||
E.g. Pending, Running, Terminating, Failed etc.
|
|
||||||
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: {}
|
|
||||||
- additionalPrinterColumns:
|
|
||||||
- description: AzureStackHCICluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
|
|
||||||
jsonPath: .status.phase
|
|
||||||
name: Phase
|
|
||||||
type: string
|
|
||||||
name: v1alpha4
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCICluster is the Schema for the azurestackhciclusters
|
|
||||||
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: AzureStackHCIClusterSpec defines the desired state of AzureStackHCICluster
|
|
||||||
properties:
|
|
||||||
azureStackHCILoadBalancer:
|
|
||||||
description: AzureStackHCILoadBalancer is used to declare the AzureStackHCILoadBalancerSpec
|
|
||||||
if a LoadBalancer is desired for the AzureStackHCICluster.
|
|
||||||
properties:
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use
|
|
||||||
for VM creation. There are three ways to specify an image: by
|
|
||||||
ID, by publisher, or by Shared Image Gallery. If specifying
|
|
||||||
an image by ID, only the ID field needs to be set. If specifying
|
|
||||||
an image by publisher, the Publisher, Offer, SKU, and Version
|
|
||||||
fields must be set. If specifying an image from a Shared Image
|
|
||||||
Gallery, the SubscriptionID, ResourceGroup, Gallery, Name, and
|
|
||||||
Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
replicas:
|
|
||||||
default: 1
|
|
||||||
description: Number of desired loadbalancer machines. Defaults
|
|
||||||
to 1. This is a pointer to distinguish between explicit zero
|
|
||||||
and not specified.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- image
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
controlPlaneEndpoint:
|
|
||||||
description: ControlPlaneEndpoint represents the endpoint used to
|
|
||||||
communicate with the control plane.
|
|
||||||
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.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
required:
|
|
||||||
- host
|
|
||||||
- port
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
management:
|
|
||||||
description: Management is true when the cluster is a Management Cluster.
|
|
||||||
type: boolean
|
|
||||||
networkSpec:
|
|
||||||
description: NetworkSpec encapsulates all things related to Azure
|
|
||||||
network.
|
|
||||||
properties:
|
|
||||||
subnets:
|
|
||||||
description: Subnets is the configuration for the control-plane
|
|
||||||
subnet and the node subnet.
|
|
||||||
items:
|
|
||||||
description: SubnetSpec configures an Azure subnet.
|
|
||||||
properties:
|
|
||||||
cidrBlock:
|
|
||||||
description: CidrBlock is the CIDR block to be used when
|
|
||||||
the provider creates a managed Vnet.
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
description: ID defines a unique identifier to reference
|
|
||||||
this resource.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name defines a name for the subnet resource.
|
|
||||||
type: string
|
|
||||||
vnetId:
|
|
||||||
description: VnetID defines the ID of the virtual network
|
|
||||||
this subnet should be built in.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
- vnetId
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
vnet:
|
|
||||||
description: Vnet is the configuration for the Azure virtual network.
|
|
||||||
properties:
|
|
||||||
cidrBlock:
|
|
||||||
description: CidrBlock is the CIDR block to be used when the
|
|
||||||
provider creates a managed virtual network.
|
|
||||||
type: string
|
|
||||||
group:
|
|
||||||
description: Group is the resource group the vnet should use.
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
description: ID is the identifier of the virtual network this
|
|
||||||
provider should use to create resources.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name defines a name for the virtual network resource.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
description: Version indicates the desired Kubernetes version of the
|
|
||||||
cluster.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- location
|
|
||||||
- resourceGroup
|
|
||||||
- version
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: AzureStackHCIClusterStatus defines the observed state of
|
|
||||||
AzureStackHCICluster
|
|
||||||
properties:
|
|
||||||
bastion:
|
|
||||||
description: VM describes an Azure virtual machine.
|
|
||||||
properties:
|
|
||||||
availabilityZone:
|
|
||||||
type: string
|
|
||||||
bootstrapData:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
identity:
|
|
||||||
description: VMIdentity defines the identity of the virtual machine,
|
|
||||||
if configured.
|
|
||||||
type: string
|
|
||||||
image:
|
|
||||||
description: Storage profile
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
vmSize:
|
|
||||||
description: Hardware profile
|
|
||||||
type: string
|
|
||||||
vmState:
|
|
||||||
description: State - The provisioning state, which only appears
|
|
||||||
in the response.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCICluster.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
phase:
|
|
||||||
description: Phase represents the current phase of cluster actuation.
|
|
||||||
E.g. Pending, Running, Terminating, Failed etc.
|
|
||||||
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: {}
|
|
||||||
- additionalPrinterColumns:
|
- additionalPrinterColumns:
|
||||||
- description: AzureStackHCICluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
|
- description: AzureStackHCICluster status such as Pending/Provisioning/Provisioned/Deleting/Failed
|
||||||
jsonPath: .status.phase
|
jsonPath: .status.phase
|
||||||
|
|
|
@ -16,444 +16,6 @@ spec:
|
||||||
singular: azurestackhciloadbalancer
|
singular: azurestackhciloadbalancer
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- additionalPrinterColumns:
|
|
||||||
- description: The current phase/status of the loadbalancer
|
|
||||||
jsonPath: .status.phase
|
|
||||||
name: Phase
|
|
||||||
type: string
|
|
||||||
- description: The frontend VIP address assigned to the loadbalancer
|
|
||||||
jsonPath: .status.address
|
|
||||||
name: IP
|
|
||||||
type: string
|
|
||||||
- description: The frontend port assigned to the loadbalancer
|
|
||||||
jsonPath: .status.port
|
|
||||||
name: Port
|
|
||||||
type: integer
|
|
||||||
- description: Total number of desired machine replicas for this loadbalancer
|
|
||||||
jsonPath: .spec.replicas
|
|
||||||
name: Replicas
|
|
||||||
type: integer
|
|
||||||
- description: Total number of machine replicas created to service this loadbalancer
|
|
||||||
jsonPath: .status.replicas
|
|
||||||
name: Created
|
|
||||||
type: integer
|
|
||||||
- description: Total number of machine replicas that are actively connected to
|
|
||||||
the loadbalancer service
|
|
||||||
jsonPath: .status.readyReplicas
|
|
||||||
name: Ready
|
|
||||||
type: integer
|
|
||||||
- description: Total number of machine replicas that are in a failed or unavailable
|
|
||||||
state
|
|
||||||
jsonPath: .status.failedReplicas
|
|
||||||
name: Unavailable
|
|
||||||
type: integer
|
|
||||||
name: v1alpha3
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCILoadBalancer is the Schema for the azurestackhciloadbalancers
|
|
||||||
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:
|
|
||||||
properties:
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use for
|
|
||||||
VM creation. There are three ways to specify an image: by ID, by
|
|
||||||
publisher, or by Shared Image Gallery. If specifying an image by
|
|
||||||
ID, only the ID field needs to be set. If specifying an image by
|
|
||||||
publisher, the Publisher, Offer, SKU, and Version fields must be
|
|
||||||
set. If specifying an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
replicas:
|
|
||||||
default: 1
|
|
||||||
description: Number of desired loadbalancer machines. Defaults to
|
|
||||||
1. This is a pointer to distinguish between explicit zero and not
|
|
||||||
specified.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- image
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
properties:
|
|
||||||
address:
|
|
||||||
description: Address is the IP address of the load balancer.
|
|
||||||
type: string
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCILoadBalancer.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- 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: "ErrorReason will be set in the event that there is a
|
|
||||||
terminal problem reconciling the Machine and will contain a succinct
|
|
||||||
value suitable for machine interpretation. \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
|
|
||||||
failedReplicas:
|
|
||||||
description: Total number of failed replicas for this loadbalancer.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
phase:
|
|
||||||
description: Phase represents the current phase of loadbalancer actuation.
|
|
||||||
E.g. Pending, Running, Terminating, Failed etc.
|
|
||||||
type: string
|
|
||||||
port:
|
|
||||||
description: Port is the port of the azureStackHCIloadbalancers frontend.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
ready:
|
|
||||||
type: boolean
|
|
||||||
readyReplicas:
|
|
||||||
description: Total number of ready (service connected) replicas for
|
|
||||||
this loadbalancer
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
replicas:
|
|
||||||
description: Total number of non-terminated replicas for this loadbalancer
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
selector:
|
|
||||||
description: 'Selector is the label selector in string format to avoid
|
|
||||||
introspection by clients, and is used to provide the CRD-based integration
|
|
||||||
for the scale subresource and additional integrations for things
|
|
||||||
like kubectl describe.. The string will be in the same format as
|
|
||||||
the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors'
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
subresources:
|
|
||||||
scale:
|
|
||||||
labelSelectorPath: .status.selector
|
|
||||||
specReplicasPath: .spec.replicas
|
|
||||||
statusReplicasPath: .status.replicas
|
|
||||||
status: {}
|
|
||||||
- additionalPrinterColumns:
|
|
||||||
- description: The current phase/status of the loadbalancer
|
|
||||||
jsonPath: .status.phase
|
|
||||||
name: Phase
|
|
||||||
type: string
|
|
||||||
- description: The frontend VIP address assigned to the loadbalancer
|
|
||||||
jsonPath: .status.address
|
|
||||||
name: IP
|
|
||||||
type: string
|
|
||||||
- description: The frontend port assigned to the loadbalancer
|
|
||||||
jsonPath: .status.port
|
|
||||||
name: Port
|
|
||||||
type: integer
|
|
||||||
- description: Total number of desired machine replicas for this loadbalancer
|
|
||||||
jsonPath: .spec.replicas
|
|
||||||
name: Replicas
|
|
||||||
type: integer
|
|
||||||
- description: Total number of machine replicas created to service this loadbalancer
|
|
||||||
jsonPath: .status.replicas
|
|
||||||
name: Created
|
|
||||||
type: integer
|
|
||||||
- description: Total number of machine replicas that are actively connected to
|
|
||||||
the loadbalancer service
|
|
||||||
jsonPath: .status.readyReplicas
|
|
||||||
name: Ready
|
|
||||||
type: integer
|
|
||||||
- description: Total number of machine replicas that are in a failed or unavailable
|
|
||||||
state
|
|
||||||
jsonPath: .status.failedReplicas
|
|
||||||
name: Unavailable
|
|
||||||
type: integer
|
|
||||||
name: v1alpha4
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCILoadBalancer is the Schema for the azurestackhciloadbalancers
|
|
||||||
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:
|
|
||||||
properties:
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use for
|
|
||||||
VM creation. There are three ways to specify an image: by ID, by
|
|
||||||
publisher, or by Shared Image Gallery. If specifying an image by
|
|
||||||
ID, only the ID field needs to be set. If specifying an image by
|
|
||||||
publisher, the Publisher, Offer, SKU, and Version fields must be
|
|
||||||
set. If specifying an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
replicas:
|
|
||||||
default: 1
|
|
||||||
description: Number of desired loadbalancer machines. Defaults to
|
|
||||||
1. This is a pointer to distinguish between explicit zero and not
|
|
||||||
specified.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- image
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
properties:
|
|
||||||
address:
|
|
||||||
description: Address is the IP address of the load balancer.
|
|
||||||
type: string
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCILoadBalancer.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- 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: "ErrorReason will be set in the event that there is a
|
|
||||||
terminal problem reconciling the Machine and will contain a succinct
|
|
||||||
value suitable for machine interpretation. \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
|
|
||||||
failedReplicas:
|
|
||||||
description: Total number of failed replicas for this loadbalancer.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
phase:
|
|
||||||
description: Phase represents the current phase of loadbalancer actuation.
|
|
||||||
E.g. Pending, Running, Terminating, Failed etc.
|
|
||||||
type: string
|
|
||||||
port:
|
|
||||||
description: Port is the port of the azureStackHCIloadbalancers frontend.
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
ready:
|
|
||||||
type: boolean
|
|
||||||
readyReplicas:
|
|
||||||
description: Total number of ready (service connected) replicas for
|
|
||||||
this loadbalancer
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
replicas:
|
|
||||||
description: Total number of non-terminated replicas for this loadbalancer
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
selector:
|
|
||||||
description: 'Selector is the label selector in string format to avoid
|
|
||||||
introspection by clients, and is used to provide the CRD-based integration
|
|
||||||
for the scale subresource and additional integrations for things
|
|
||||||
like kubectl describe.. The string will be in the same format as
|
|
||||||
the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors'
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
subresources:
|
|
||||||
scale:
|
|
||||||
labelSelectorPath: .status.selector
|
|
||||||
specReplicasPath: .spec.replicas
|
|
||||||
statusReplicasPath: .status.replicas
|
|
||||||
status: {}
|
|
||||||
- additionalPrinterColumns:
|
- additionalPrinterColumns:
|
||||||
- description: The current phase/status of the loadbalancer
|
- description: The current phase/status of the loadbalancer
|
||||||
jsonPath: .status.phase
|
jsonPath: .status.phase
|
||||||
|
|
|
@ -16,442 +16,6 @@ spec:
|
||||||
singular: azurestackhcimachine
|
singular: azurestackhcimachine
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- name: v1alpha3
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCIMachine is the Schema for the azurestackhcimachines
|
|
||||||
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: AzureStackHCIMachineSpec defines the desired state of AzureStackHCIMachine
|
|
||||||
properties:
|
|
||||||
additionalSSHKeys:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
allocatePublicIP:
|
|
||||||
description: AllocatePublicIP allows the ability to create dynamic
|
|
||||||
public ips for machines where this value is true.
|
|
||||||
type: boolean
|
|
||||||
availabilityZone:
|
|
||||||
properties:
|
|
||||||
enabled:
|
|
||||||
type: boolean
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use for
|
|
||||||
VM creation. There are three ways to specify an image: by ID, by
|
|
||||||
publisher, or by Shared Image Gallery. If specifying an image by
|
|
||||||
ID, only the ID field needs to be set. If specifying an image by
|
|
||||||
publisher, the Publisher, Offer, SKU, and Version fields must be
|
|
||||||
set. If specifying an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
providerID:
|
|
||||||
description: ProviderID is the unique identifier as specified by the
|
|
||||||
cloud provider.
|
|
||||||
type: string
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- location
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: AzureStackHCIMachineStatus defines the observed state of
|
|
||||||
AzureStackHCIMachine
|
|
||||||
properties:
|
|
||||||
addresses:
|
|
||||||
description: Addresses contains the Azure 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
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCIMachine.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
failureMessage:
|
|
||||||
description: "FailureMessage will be set in the event that there is
|
|
||||||
a terminal problem reconciling the Machine and will contain a more
|
|
||||||
verbose string suitable for logging and human consumption. \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
|
|
||||||
failureReason:
|
|
||||||
description: "FailureReason will be set in the event that there is
|
|
||||||
a terminal problem reconciling the Machine and will contain a succinct
|
|
||||||
value suitable for machine interpretation. \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
|
|
||||||
ready:
|
|
||||||
description: Ready is true when the provider resource is ready.
|
|
||||||
type: boolean
|
|
||||||
vmState:
|
|
||||||
description: VMState is the provisioning state of the Azure virtual
|
|
||||||
machine.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
- name: v1alpha4
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCIMachine is the Schema for the azurestackhcimachines
|
|
||||||
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: AzureStackHCIMachineSpec defines the desired state of AzureStackHCIMachine
|
|
||||||
properties:
|
|
||||||
additionalSSHKeys:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
allocatePublicIP:
|
|
||||||
description: AllocatePublicIP allows the ability to create dynamic
|
|
||||||
public ips for machines where this value is true.
|
|
||||||
type: boolean
|
|
||||||
availabilityZone:
|
|
||||||
properties:
|
|
||||||
enabled:
|
|
||||||
type: boolean
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use for
|
|
||||||
VM creation. There are three ways to specify an image: by ID, by
|
|
||||||
publisher, or by Shared Image Gallery. If specifying an image by
|
|
||||||
ID, only the ID field needs to be set. If specifying an image by
|
|
||||||
publisher, the Publisher, Offer, SKU, and Version fields must be
|
|
||||||
set. If specifying an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
providerID:
|
|
||||||
description: ProviderID is the unique identifier as specified by the
|
|
||||||
cloud provider.
|
|
||||||
type: string
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- location
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: AzureStackHCIMachineStatus defines the observed state of
|
|
||||||
AzureStackHCIMachine
|
|
||||||
properties:
|
|
||||||
addresses:
|
|
||||||
description: Addresses contains the Azure 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
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCIMachine.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
failureMessage:
|
|
||||||
description: "FailureMessage will be set in the event that there is
|
|
||||||
a terminal problem reconciling the Machine and will contain a more
|
|
||||||
verbose string suitable for logging and human consumption. \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
|
|
||||||
failureReason:
|
|
||||||
description: "FailureReason will be set in the event that there is
|
|
||||||
a terminal problem reconciling the Machine and will contain a succinct
|
|
||||||
value suitable for machine interpretation. \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
|
|
||||||
ready:
|
|
||||||
description: Ready is true when the provider resource is ready.
|
|
||||||
type: boolean
|
|
||||||
vmState:
|
|
||||||
description: VMState is the provisioning state of the Azure virtual
|
|
||||||
machine.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
- name: v1beta1
|
- name: v1beta1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
|
@ -527,7 +91,9 @@ spec:
|
||||||
items:
|
items:
|
||||||
properties:
|
properties:
|
||||||
ipConfigurations:
|
ipConfigurations:
|
||||||
|
description: 'nolint: golint'
|
||||||
items:
|
items:
|
||||||
|
description: 'nolint: golint'
|
||||||
properties:
|
properties:
|
||||||
allocation:
|
allocation:
|
||||||
format: int32
|
format: int32
|
||||||
|
|
|
@ -16,266 +16,6 @@ spec:
|
||||||
singular: azurestackhcimachinetemplate
|
singular: azurestackhcimachinetemplate
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- name: v1alpha3
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCIMachineTemplate is the Schema for the azurestackhcimachinetemplates
|
|
||||||
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: AzureStackHCIMachineTemplateSpec defines the desired state
|
|
||||||
of AzureStackHCIMachineTemplate
|
|
||||||
properties:
|
|
||||||
template:
|
|
||||||
description: AzureStackHCIMachineTemplateResource describes the data
|
|
||||||
needed to create an AzureStackHCIMachine from a template
|
|
||||||
properties:
|
|
||||||
spec:
|
|
||||||
description: Spec is the specification of the desired behavior
|
|
||||||
of the machine.
|
|
||||||
properties:
|
|
||||||
additionalSSHKeys:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
allocatePublicIP:
|
|
||||||
description: AllocatePublicIP allows the ability to create
|
|
||||||
dynamic public ips for machines where this value is true.
|
|
||||||
type: boolean
|
|
||||||
availabilityZone:
|
|
||||||
properties:
|
|
||||||
enabled:
|
|
||||||
type: boolean
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to
|
|
||||||
use for VM creation. There are three ways to specify an
|
|
||||||
image: by ID, by publisher, or by Shared Image Gallery.
|
|
||||||
If specifying an image by ID, only the ID field needs to
|
|
||||||
be set. If specifying an image by publisher, the Publisher,
|
|
||||||
Offer, SKU, and Version fields must be set. If specifying
|
|
||||||
an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be
|
|
||||||
set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
providerID:
|
|
||||||
description: ProviderID is the unique identifier as specified
|
|
||||||
by the cloud provider.
|
|
||||||
type: string
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- location
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- spec
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- template
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
- name: v1alpha4
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCIMachineTemplate is the Schema for the azurestackhcimachinetemplates
|
|
||||||
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: AzureStackHCIMachineTemplateSpec defines the desired state
|
|
||||||
of AzureStackHCIMachineTemplate
|
|
||||||
properties:
|
|
||||||
template:
|
|
||||||
description: AzureStackHCIMachineTemplateResource describes the data
|
|
||||||
needed to create an AzureStackHCIMachine from a template
|
|
||||||
properties:
|
|
||||||
spec:
|
|
||||||
description: Spec is the specification of the desired behavior
|
|
||||||
of the machine.
|
|
||||||
properties:
|
|
||||||
additionalSSHKeys:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
allocatePublicIP:
|
|
||||||
description: AllocatePublicIP allows the ability to create
|
|
||||||
dynamic public ips for machines where this value is true.
|
|
||||||
type: boolean
|
|
||||||
availabilityZone:
|
|
||||||
properties:
|
|
||||||
enabled:
|
|
||||||
type: boolean
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to
|
|
||||||
use for VM creation. There are three ways to specify an
|
|
||||||
image: by ID, by publisher, or by Shared Image Gallery.
|
|
||||||
If specifying an image by ID, only the ID field needs to
|
|
||||||
be set. If specifying an image by publisher, the Publisher,
|
|
||||||
Offer, SKU, and Version fields must be set. If specifying
|
|
||||||
an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be
|
|
||||||
set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
providerID:
|
|
||||||
description: ProviderID is the unique identifier as specified
|
|
||||||
by the cloud provider.
|
|
||||||
type: string
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- location
|
|
||||||
- sshPublicKey
|
|
||||||
- vmSize
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- spec
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- template
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
- name: v1beta1
|
- name: v1beta1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
|
@ -362,7 +102,9 @@ spec:
|
||||||
items:
|
items:
|
||||||
properties:
|
properties:
|
||||||
ipConfigurations:
|
ipConfigurations:
|
||||||
|
description: 'nolint: golint'
|
||||||
items:
|
items:
|
||||||
|
description: 'nolint: golint'
|
||||||
properties:
|
properties:
|
||||||
allocation:
|
allocation:
|
||||||
format: int32
|
format: int32
|
||||||
|
|
|
@ -16,432 +16,6 @@ spec:
|
||||||
singular: azurestackhcivirtualmachine
|
singular: azurestackhcivirtualmachine
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- name: v1alpha3
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCIVirtualMachine is the Schema for the azurestackhcivirtualmachines
|
|
||||||
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: AzureStackHCIVirtualMachineSpec defines the desired state
|
|
||||||
of AzureStackHCIVirtualMachine
|
|
||||||
properties:
|
|
||||||
additionalSSHKeys:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
availabilityZone:
|
|
||||||
properties:
|
|
||||||
enabled:
|
|
||||||
type: boolean
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
backendPoolNames:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
bootstrapData:
|
|
||||||
type: string
|
|
||||||
clusterName:
|
|
||||||
type: string
|
|
||||||
identity:
|
|
||||||
description: VMIdentity defines the identity of the virtual machine,
|
|
||||||
if configured.
|
|
||||||
type: string
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use for
|
|
||||||
VM creation. There are three ways to specify an image: by ID, by
|
|
||||||
publisher, or by Shared Image Gallery. If specifying an image by
|
|
||||||
ID, only the ID field needs to be set. If specifying an image by
|
|
||||||
publisher, the Publisher, Offer, SKU, and Version fields must be
|
|
||||||
set. If specifying an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
resourceGroup:
|
|
||||||
description: come from the cluster scope for machine and lb controller
|
|
||||||
creation path
|
|
||||||
type: string
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
subnetName:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
vnetName:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- clusterName
|
|
||||||
- image
|
|
||||||
- location
|
|
||||||
- resourceGroup
|
|
||||||
- sshPublicKey
|
|
||||||
- subnetName
|
|
||||||
- vmSize
|
|
||||||
- vnetName
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: AzureStackHCIVirtualMachineStatus defines the observed state
|
|
||||||
of AzureStackHCIVirtualMachine
|
|
||||||
properties:
|
|
||||||
addresses:
|
|
||||||
description: Addresses contains the AzureStackHCI 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
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCIVirtualMachine.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
failureMessage:
|
|
||||||
type: string
|
|
||||||
failureReason:
|
|
||||||
description: MachineStatusError defines errors states for Machine
|
|
||||||
objects.
|
|
||||||
type: string
|
|
||||||
ready:
|
|
||||||
description: Ready is true when the provider resource is ready.
|
|
||||||
type: boolean
|
|
||||||
vmState:
|
|
||||||
description: VMState is the provisioning state of the AzureStackHCI
|
|
||||||
virtual machine.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
- name: v1alpha4
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: AzureStackHCIVirtualMachine is the Schema for the azurestackhcivirtualmachines
|
|
||||||
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: AzureStackHCIVirtualMachineSpec defines the desired state
|
|
||||||
of AzureStackHCIVirtualMachine
|
|
||||||
properties:
|
|
||||||
additionalSSHKeys:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
availabilityZone:
|
|
||||||
properties:
|
|
||||||
enabled:
|
|
||||||
type: boolean
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
backendPoolNames:
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
type: array
|
|
||||||
bootstrapData:
|
|
||||||
type: string
|
|
||||||
clusterName:
|
|
||||||
type: string
|
|
||||||
identity:
|
|
||||||
description: VMIdentity defines the identity of the virtual machine,
|
|
||||||
if configured.
|
|
||||||
type: string
|
|
||||||
image:
|
|
||||||
description: 'Image defines information about the image to use for
|
|
||||||
VM creation. There are three ways to specify an image: by ID, by
|
|
||||||
publisher, or by Shared Image Gallery. If specifying an image by
|
|
||||||
ID, only the ID field needs to be set. If specifying an image by
|
|
||||||
publisher, the Publisher, Offer, SKU, and Version fields must be
|
|
||||||
set. If specifying an image from a Shared Image Gallery, the SubscriptionID,
|
|
||||||
ResourceGroup, Gallery, Name, and Version fields must be set.'
|
|
||||||
properties:
|
|
||||||
gallery:
|
|
||||||
type: string
|
|
||||||
id:
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
offer:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
publisher:
|
|
||||||
type: string
|
|
||||||
resourceGroup:
|
|
||||||
type: string
|
|
||||||
sku:
|
|
||||||
type: string
|
|
||||||
subscriptionID:
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- osType
|
|
||||||
type: object
|
|
||||||
location:
|
|
||||||
type: string
|
|
||||||
osDisk:
|
|
||||||
properties:
|
|
||||||
diskSizeGB:
|
|
||||||
format: int32
|
|
||||||
type: integer
|
|
||||||
managedDisk:
|
|
||||||
properties:
|
|
||||||
storageAccountType:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- storageAccountType
|
|
||||||
type: object
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
osType:
|
|
||||||
description: OSType describes the OS type of a disk.
|
|
||||||
type: string
|
|
||||||
source:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- diskSizeGB
|
|
||||||
- managedDisk
|
|
||||||
- name
|
|
||||||
- osType
|
|
||||||
- source
|
|
||||||
type: object
|
|
||||||
resourceGroup:
|
|
||||||
description: come from the cluster scope for machine and lb controller
|
|
||||||
creation path
|
|
||||||
type: string
|
|
||||||
sshPublicKey:
|
|
||||||
type: string
|
|
||||||
subnetName:
|
|
||||||
type: string
|
|
||||||
vmSize:
|
|
||||||
type: string
|
|
||||||
vnetName:
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- clusterName
|
|
||||||
- image
|
|
||||||
- location
|
|
||||||
- resourceGroup
|
|
||||||
- sshPublicKey
|
|
||||||
- subnetName
|
|
||||||
- vmSize
|
|
||||||
- vnetName
|
|
||||||
type: object
|
|
||||||
status:
|
|
||||||
description: AzureStackHCIVirtualMachineStatus defines the observed state
|
|
||||||
of AzureStackHCIVirtualMachine
|
|
||||||
properties:
|
|
||||||
addresses:
|
|
||||||
description: Addresses contains the AzureStackHCI 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
|
|
||||||
conditions:
|
|
||||||
description: Conditions defines current service state of the AzureStackHCIVirtualMachine.
|
|
||||||
items:
|
|
||||||
description: Condition defines an observation of a Cluster API resource
|
|
||||||
operational state.
|
|
||||||
properties:
|
|
||||||
lastTransitionTime:
|
|
||||||
description: Last time the condition transitioned from one status
|
|
||||||
to another. This should be when the underlying condition changed.
|
|
||||||
If that is not known, then using the time when the API field
|
|
||||||
changed is acceptable.
|
|
||||||
format: date-time
|
|
||||||
type: string
|
|
||||||
message:
|
|
||||||
description: A human readable message indicating details about
|
|
||||||
the transition. This field may be empty.
|
|
||||||
type: string
|
|
||||||
reason:
|
|
||||||
description: The reason for the condition's last transition
|
|
||||||
in CamelCase. The specific API may choose whether or not this
|
|
||||||
field is considered a guaranteed API. This field may not be
|
|
||||||
empty.
|
|
||||||
type: string
|
|
||||||
severity:
|
|
||||||
description: Severity provides an explicit classification of
|
|
||||||
Reason code, so the users or machines can immediately understand
|
|
||||||
the current situation and act accordingly. The Severity field
|
|
||||||
MUST be set only when Status=False.
|
|
||||||
type: string
|
|
||||||
status:
|
|
||||||
description: Status of the condition, one of True, False, Unknown.
|
|
||||||
type: string
|
|
||||||
type:
|
|
||||||
description: Type of condition in CamelCase or in foo.example.com/CamelCase.
|
|
||||||
Many .condition.type values are consistent across resources
|
|
||||||
like Available, but because arbitrary conditions can be useful
|
|
||||||
(see .node.status.conditions), the ability to deconflict is
|
|
||||||
important.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- status
|
|
||||||
- type
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
failureMessage:
|
|
||||||
type: string
|
|
||||||
failureReason:
|
|
||||||
description: MachineStatusError defines errors states for Machine
|
|
||||||
objects.
|
|
||||||
type: string
|
|
||||||
ready:
|
|
||||||
description: Ready is true when the provider resource is ready.
|
|
||||||
type: boolean
|
|
||||||
vmState:
|
|
||||||
description: VMState is the provisioning state of the AzureStackHCI
|
|
||||||
virtual machine.
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: false
|
|
||||||
subresources:
|
|
||||||
status: {}
|
|
||||||
- name: v1beta1
|
- name: v1beta1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
|
@ -526,7 +100,9 @@ spec:
|
||||||
items:
|
items:
|
||||||
properties:
|
properties:
|
||||||
ipConfigurations:
|
ipConfigurations:
|
||||||
|
description: 'nolint: golint'
|
||||||
items:
|
items:
|
||||||
|
description: 'nolint: golint'
|
||||||
properties:
|
properties:
|
||||||
allocation:
|
allocation:
|
||||||
format: int32
|
format: int32
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
# This kustomization.yaml is not intended to be run by itself,
|
# This kustomization.yaml is not intended to be run by itself,
|
||||||
# since it depends on service name and namespace that are out of this kustomize package.
|
# since it depends on service name and namespace that are out of this kustomize package.
|
||||||
# It should be run by config/
|
# It should be run by config/
|
||||||
commonLabels:
|
|
||||||
cluster.x-k8s.io/v1beta1: v1beta1
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
- bases/infrastructure.cluster.x-k8s.io_azurestackhcimachines.yaml
|
- bases/infrastructure.cluster.x-k8s.io_azurestackhcimachines.yaml
|
||||||
|
@ -12,25 +10,31 @@ resources:
|
||||||
- bases/infrastructure.cluster.x-k8s.io_azurestackhciloadbalancers.yaml
|
- bases/infrastructure.cluster.x-k8s.io_azurestackhciloadbalancers.yaml
|
||||||
# +kubebuilder:scaffold:crdkustomizeresource
|
# +kubebuilder:scaffold:crdkustomizeresource
|
||||||
|
|
||||||
patchesStrategicMerge:
|
|
||||||
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
|
# [WEBHOOK] To enable webhook, uncomment all the sections with [WEBHOOK] prefix.
|
||||||
# patches here are for enabling the conversion webhook for each CRD
|
# patches here are for enabling the conversion webhook for each CRD
|
||||||
- patches/webhook_in_azurestackhcimachines.yaml
|
|
||||||
- patches/webhook_in_azurestackhciclusters.yaml
|
|
||||||
- patches/webhook_in_azurestackhcimachinetemplates.yaml
|
|
||||||
- patches/webhook_in_azurestackhcivirtualmachines.yaml
|
|
||||||
- patches/webhook_in_azurestackhciloadbalancers.yaml
|
|
||||||
# +kubebuilder:scaffold:crdkustomizewebhookpatch
|
# +kubebuilder:scaffold:crdkustomizewebhookpatch
|
||||||
|
|
||||||
# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix.
|
# [CERTMANAGER] To enable cert-manager, uncomment all the sections with [CERTMANAGER] prefix.
|
||||||
# patches here are for enabling the CA injection for each CRD
|
# patches here are for enabling the CA injection for each CRD
|
||||||
- patches/cainjection_in_azurestackhcimachines.yaml
|
|
||||||
- patches/cainjection_in_azurestackhciclusters.yaml
|
|
||||||
- patches/cainjection_in_azurestackhcimachinetemplates.yaml
|
|
||||||
- patches/cainjection_in_azurestackhcivirtualmachines.yaml
|
|
||||||
- patches/cainjection_in_azurestackhciloadbalancers.yaml
|
|
||||||
# +kubebuilder:scaffold:crdkustomizecainjectionpatch
|
# +kubebuilder:scaffold:crdkustomizecainjectionpatch
|
||||||
|
|
||||||
# the following config is for teaching kustomize how to do kustomization for CRDs.
|
# the following config is for teaching kustomize how to do kustomization for CRDs.
|
||||||
configurations:
|
configurations:
|
||||||
- kustomizeconfig.yaml
|
- kustomizeconfig.yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
labels:
|
||||||
|
- includeSelectors: true
|
||||||
|
pairs:
|
||||||
|
cluster.x-k8s.io/v1beta1: v1beta1
|
||||||
|
patches:
|
||||||
|
- path: patches/webhook_in_azurestackhcimachines.yaml
|
||||||
|
- path: patches/webhook_in_azurestackhciclusters.yaml
|
||||||
|
- path: patches/webhook_in_azurestackhcimachinetemplates.yaml
|
||||||
|
- path: patches/webhook_in_azurestackhcivirtualmachines.yaml
|
||||||
|
- path: patches/webhook_in_azurestackhciloadbalancers.yaml
|
||||||
|
- path: patches/cainjection_in_azurestackhcimachines.yaml
|
||||||
|
- path: patches/cainjection_in_azurestackhciclusters.yaml
|
||||||
|
- path: patches/cainjection_in_azurestackhcimachinetemplates.yaml
|
||||||
|
- path: patches/cainjection_in_azurestackhcivirtualmachines.yaml
|
||||||
|
- path: patches/cainjection_in_azurestackhciloadbalancers.yaml
|
||||||
|
|
|
@ -3,56 +3,61 @@ namespace: caph-system
|
||||||
namePrefix: caph-
|
namePrefix: caph-
|
||||||
|
|
||||||
# Labels to add to all resources and selectors.
|
# Labels to add to all resources and selectors.
|
||||||
commonLabels:
|
|
||||||
cluster.x-k8s.io/provider: "infrastructure-azurestackhci"
|
|
||||||
bases:
|
|
||||||
- ../crd
|
|
||||||
- ../certmanager
|
|
||||||
- ../webhook
|
|
||||||
- ../rbac
|
|
||||||
- ../manager
|
|
||||||
|
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
- namespace.yaml
|
- namespace.yaml
|
||||||
- credentials.yaml
|
- credentials.yaml
|
||||||
|
- ../crd
|
||||||
|
- ../certmanager
|
||||||
|
- ../webhook
|
||||||
|
- ../rbac
|
||||||
|
- ../manager
|
||||||
|
|
||||||
patchesStrategicMerge:
|
|
||||||
- manager_credentials_patch.yaml
|
|
||||||
- manager_volume_patch.yaml
|
|
||||||
- manager_auth_proxy_patch.yaml
|
|
||||||
- manager_image_patch.yaml
|
|
||||||
- manager_pull_policy.yaml
|
|
||||||
- manager_webhook_patch.yaml
|
|
||||||
- webhookcainjection_patch.yaml
|
|
||||||
|
|
||||||
vars:
|
vars:
|
||||||
- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR
|
- fieldref:
|
||||||
objref:
|
fieldPath: metadata.namespace
|
||||||
kind: Certificate
|
name: CERTIFICATE_NAMESPACE
|
||||||
group: cert-manager.io
|
objref:
|
||||||
version: v1
|
group: cert-manager.io
|
||||||
name: serving-cert # this name should match the one in certificate.yaml
|
kind: Certificate
|
||||||
fieldref:
|
name: serving-cert
|
||||||
fieldpath: metadata.namespace
|
version: v1
|
||||||
- name: CERTIFICATE_NAME
|
- fieldref: {}
|
||||||
objref:
|
name: CERTIFICATE_NAME
|
||||||
kind: Certificate
|
objref:
|
||||||
group: cert-manager.io
|
group: cert-manager.io
|
||||||
version: v1
|
kind: Certificate
|
||||||
name: serving-cert # this name should match the one in certificate.yaml
|
name: serving-cert
|
||||||
- name: SERVICE_NAMESPACE # namespace of the service
|
version: v1
|
||||||
objref:
|
- fieldref:
|
||||||
kind: Service
|
fieldPath: metadata.namespace
|
||||||
version: v1
|
name: SERVICE_NAMESPACE
|
||||||
name: webhook-service
|
objref:
|
||||||
fieldref:
|
kind: Service
|
||||||
fieldpath: metadata.namespace
|
name: webhook-service
|
||||||
- name: SERVICE_NAME
|
version: v1
|
||||||
objref:
|
- fieldref: {}
|
||||||
kind: Service
|
name: SERVICE_NAME
|
||||||
version: v1
|
objref:
|
||||||
name: webhook-service
|
kind: Service
|
||||||
|
name: webhook-service
|
||||||
|
version: v1
|
||||||
|
|
||||||
configurations:
|
configurations:
|
||||||
- kustomizeconfig.yaml
|
- kustomizeconfig.yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
labels:
|
||||||
|
- includeSelectors: true
|
||||||
|
pairs:
|
||||||
|
cluster.x-k8s.io/provider: infrastructure-azurestackhci
|
||||||
|
patches:
|
||||||
|
- path: manager_credentials_patch.yaml
|
||||||
|
- path: manager_volume_patch.yaml
|
||||||
|
- path: manager_auth_proxy_patch.yaml
|
||||||
|
- path: manager_image_patch.yaml
|
||||||
|
- path: manager_pull_policy.yaml
|
||||||
|
- path: manager_webhook_patch.yaml
|
||||||
|
- path: webhookcainjection_patch.yaml
|
||||||
|
|
|
@ -10,7 +10,7 @@ spec:
|
||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: kube-rbac-proxy
|
- name: kube-rbac-proxy
|
||||||
image: gcr.io/kubebuilder/kube-rbac-proxy:v0.4.1
|
image: ecpacr.azurecr.io/kube-rbac-proxy:v0.12.0
|
||||||
args:
|
args:
|
||||||
- "--secure-listen-address=0.0.0.0:8443"
|
- "--secure-listen-address=0.0.0.0:8443"
|
||||||
- "--upstream=http://127.0.0.1:8080/"
|
- "--upstream=http://127.0.0.1:8080/"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
- manager.yaml
|
- manager.yaml
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
- role.yaml
|
- role.yaml
|
||||||
- role_binding.yaml
|
- role_binding.yaml
|
||||||
- leader_election_role.yaml
|
- leader_election_role.yaml
|
||||||
- leader_election_role_binding.yaml
|
- leader_election_role_binding.yaml
|
||||||
- auth_proxy_service.yaml
|
- auth_proxy_service.yaml
|
||||||
- auth_proxy_role.yaml
|
- auth_proxy_role.yaml
|
||||||
- auth_proxy_role_binding.yaml
|
- auth_proxy_role_binding.yaml
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
resources:
|
resources:
|
||||||
- manifests.yaml
|
- manifests.yaml
|
||||||
- service.yaml
|
- service.yaml
|
||||||
|
|
||||||
configurations:
|
configurations:
|
||||||
- kustomizeconfig.yaml
|
- kustomizeconfig.yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
|
@ -261,10 +261,10 @@ func (r *AzureStackHCIClusterReconciler) deleteOrphanedMachines(clusterScope *sc
|
||||||
}
|
}
|
||||||
if machine == nil {
|
if machine == nil {
|
||||||
// update correlation id before deletion
|
// update correlation id before deletion
|
||||||
infrav1util.CopyCorrelationId(clusterScope.AzureStackHCICluster, azhciMachine)
|
infrav1util.CopyCorrelationID(clusterScope.AzureStackHCICluster, azhciMachine)
|
||||||
if err := r.Client.Update(clusterScope.Context, azhciMachine); err != nil {
|
if err := r.Client.Update(clusterScope.Context, azhciMachine); err != nil {
|
||||||
if !apierrors.IsNotFound(err) {
|
if !apierrors.IsNotFound(err) {
|
||||||
return errors.Wrapf(err, "Failed to update AzureStackHCIMachine %s", azhciMachine)
|
return errors.Wrapf(err, "Failed to update AzureStackHCIMachine %s", azhciMachine.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clusterScope.Info("Deleting Orphaned Machine", "Name", azhciMachine.Name, "AzureStackHCICluster", clusterScope.AzureStackHCICluster.Name)
|
clusterScope.Info("Deleting Orphaned Machine", "Name", azhciMachine.Name, "AzureStackHCICluster", clusterScope.AzureStackHCICluster.Name)
|
||||||
|
@ -279,7 +279,7 @@ func (r *AzureStackHCIClusterReconciler) deleteOrphanedMachines(clusterScope *sc
|
||||||
err)
|
err)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !apierrors.IsNotFound(err) {
|
if !apierrors.IsNotFound(err) {
|
||||||
return errors.Wrapf(err, "Failed to delete AzureStackHCIMachine %s", azhciMachine)
|
return errors.Wrapf(err, "Failed to delete AzureStackHCIMachine %s", azhciMachine.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -316,7 +316,7 @@ func (r *AzureStackHCIClusterReconciler) reconcileAzureStackHCILoadBalancer(clus
|
||||||
azureStackHCILoadBalancer.Spec.SSHPublicKey = clusterScope.AzureStackHCILoadBalancer().SSHPublicKey
|
azureStackHCILoadBalancer.Spec.SSHPublicKey = clusterScope.AzureStackHCILoadBalancer().SSHPublicKey
|
||||||
azureStackHCILoadBalancer.Spec.VMSize = clusterScope.AzureStackHCILoadBalancer().VMSize
|
azureStackHCILoadBalancer.Spec.VMSize = clusterScope.AzureStackHCILoadBalancer().VMSize
|
||||||
azureStackHCILoadBalancer.Spec.Replicas = clusterScope.AzureStackHCILoadBalancer().Replicas
|
azureStackHCILoadBalancer.Spec.Replicas = clusterScope.AzureStackHCILoadBalancer().Replicas
|
||||||
infrav1util.CopyCorrelationId(clusterScope.AzureStackHCICluster, azureStackHCILoadBalancer)
|
infrav1util.CopyCorrelationID(clusterScope.AzureStackHCICluster, azureStackHCILoadBalancer)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,7 +378,7 @@ func (r *AzureStackHCIClusterReconciler) reconcileDeleteAzureStackHCILoadBalance
|
||||||
} else if azureStackHCILoadBalancer.GetDeletionTimestamp().IsZero() {
|
} else if azureStackHCILoadBalancer.GetDeletionTimestamp().IsZero() {
|
||||||
// If the AzureStackHCILoadBalancer is not already marked for deletion, delete it
|
// If the AzureStackHCILoadBalancer is not already marked for deletion, delete it
|
||||||
// Update correlation id before deletion
|
// Update correlation id before deletion
|
||||||
infrav1util.CopyCorrelationId(clusterScope.AzureStackHCICluster, azureStackHCILoadBalancer)
|
infrav1util.CopyCorrelationID(clusterScope.AzureStackHCICluster, azureStackHCILoadBalancer)
|
||||||
if err := r.Client.Update(clusterScope.Context, azureStackHCILoadBalancer); err != nil {
|
if err := r.Client.Update(clusterScope.Context, azureStackHCILoadBalancer); err != nil {
|
||||||
if !apierrors.IsNotFound(err) {
|
if !apierrors.IsNotFound(err) {
|
||||||
conditions.MarkFalse(clusterScope.AzureStackHCICluster, infrav1.NetworkInfrastructureReadyCondition, clusterv1.DeletionFailedReason, clusterv1.ConditionSeverityWarning, err.Error())
|
conditions.MarkFalse(clusterScope.AzureStackHCICluster, infrav1.NetworkInfrastructureReadyCondition, clusterv1.DeletionFailedReason, clusterv1.ConditionSeverityWarning, err.Error())
|
||||||
|
|
|
@ -132,7 +132,7 @@ func (r *AzureStackHCILoadBalancerReconciler) reconcileDeleteVirtualMachines(loa
|
||||||
for _, vm := range vmList {
|
for _, vm := range vmList {
|
||||||
if vm.GetDeletionTimestamp().IsZero() {
|
if vm.GetDeletionTimestamp().IsZero() {
|
||||||
// update correlationId before deletion
|
// update correlationId before deletion
|
||||||
infrav1util.CopyCorrelationId(loadBalancerScope.AzureStackHCILoadBalancer, vm)
|
infrav1util.CopyCorrelationID(loadBalancerScope.AzureStackHCILoadBalancer, vm)
|
||||||
if err := r.Client.Update(clusterScope.Context, vm); err != nil {
|
if err := r.Client.Update(clusterScope.Context, vm); err != nil {
|
||||||
if !apierrors.IsNotFound(err) {
|
if !apierrors.IsNotFound(err) {
|
||||||
return errors.Wrapf(err, "failed to update AzureStackHCIVirtualMachine %s", vm.Name)
|
return errors.Wrapf(err, "failed to update AzureStackHCIVirtualMachine %s", vm.Name)
|
||||||
|
@ -206,7 +206,7 @@ func (r *AzureStackHCILoadBalancerReconciler) createOrUpdateVirtualMachine(loadB
|
||||||
return errors.Wrap(err, "failed to get AzureStackHCILoadBalancer image")
|
return errors.Wrap(err, "failed to get AzureStackHCILoadBalancer image")
|
||||||
}
|
}
|
||||||
image.DeepCopyInto(&vm.Spec.Image)
|
image.DeepCopyInto(&vm.Spec.Image)
|
||||||
infrav1util.CopyCorrelationId(loadBalancerScope.AzureStackHCILoadBalancer, vm)
|
infrav1util.CopyCorrelationID(loadBalancerScope.AzureStackHCILoadBalancer, vm)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -233,7 +233,7 @@ func (r *AzureStackHCILoadBalancerReconciler) createOrUpdateVirtualMachine(loadB
|
||||||
func (r *AzureStackHCILoadBalancerReconciler) deleteVirtualMachine(lbs *scope.LoadBalancerScope, clusterScope *scope.ClusterScope, vm *infrav1.AzureStackHCIVirtualMachine) error {
|
func (r *AzureStackHCILoadBalancerReconciler) deleteVirtualMachine(lbs *scope.LoadBalancerScope, clusterScope *scope.ClusterScope, vm *infrav1.AzureStackHCIVirtualMachine) error {
|
||||||
if vm.GetDeletionTimestamp().IsZero() {
|
if vm.GetDeletionTimestamp().IsZero() {
|
||||||
// update correlationId before deletion
|
// update correlationId before deletion
|
||||||
infrav1util.CopyCorrelationId(lbs.AzureStackHCILoadBalancer, vm)
|
infrav1util.CopyCorrelationID(lbs.AzureStackHCILoadBalancer, vm)
|
||||||
if err := r.Client.Update(clusterScope.Context, vm); err != nil {
|
if err := r.Client.Update(clusterScope.Context, vm); err != nil {
|
||||||
if !apierrors.IsNotFound(err) {
|
if !apierrors.IsNotFound(err) {
|
||||||
return errors.Wrapf(err, "failed to update AzureStackHCIVirtualMachine %s", vm.Name)
|
return errors.Wrapf(err, "failed to update AzureStackHCIVirtualMachine %s", vm.Name)
|
||||||
|
|
|
@ -326,7 +326,7 @@ func (r *AzureStackHCIMachineReconciler) reconcileVirtualMachineNormal(machineSc
|
||||||
|
|
||||||
machineScope.AzureStackHCIMachine.Spec.NetworkInterfaces.DeepCopyInto(&vm.Spec.NetworkInterfaces)
|
machineScope.AzureStackHCIMachine.Spec.NetworkInterfaces.DeepCopyInto(&vm.Spec.NetworkInterfaces)
|
||||||
|
|
||||||
infrav1util.CopyCorrelationId(machineScope.AzureStackHCIMachine, vm)
|
infrav1util.CopyCorrelationID(machineScope.AzureStackHCIMachine, vm)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -381,8 +381,9 @@ func (r *AzureStackHCIMachineReconciler) reconcileVirtualMachineNormal(machineSc
|
||||||
func (r *AzureStackHCIMachineReconciler) reconcileDelete(machineScope *scope.MachineScope, clusterScope *scope.ClusterScope) (reconcile.Result, error) {
|
func (r *AzureStackHCIMachineReconciler) reconcileDelete(machineScope *scope.MachineScope, clusterScope *scope.ClusterScope) (reconcile.Result, error) {
|
||||||
machineScope.Info("Handling deleted AzureStackHCIMachine", "MachineName", machineScope.AzureStackHCIMachine.Name)
|
machineScope.Info("Handling deleted AzureStackHCIMachine", "MachineName", machineScope.AzureStackHCIMachine.Name)
|
||||||
|
|
||||||
if err := r.reconcileVirtualMachineDelete(machineScope, clusterScope); err != nil {
|
result, err := r.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
return reconcile.Result{}, err
|
if err != nil || result.RequeueAfter > 0 {
|
||||||
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
controllerutil.RemoveFinalizer(machineScope.AzureStackHCIMachine, infrav1.MachineFinalizer)
|
controllerutil.RemoveFinalizer(machineScope.AzureStackHCIMachine, infrav1.MachineFinalizer)
|
||||||
|
@ -390,47 +391,51 @@ func (r *AzureStackHCIMachineReconciler) reconcileDelete(machineScope *scope.Mac
|
||||||
return reconcile.Result{}, nil
|
return reconcile.Result{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *AzureStackHCIMachineReconciler) reconcileVirtualMachineDelete(machineScope *scope.MachineScope, clusterScope *scope.ClusterScope) error {
|
func (r *AzureStackHCIMachineReconciler) reconcileVirtualMachineDelete(machineScope *scope.MachineScope, clusterScope *scope.ClusterScope) (reconcile.Result, error) {
|
||||||
// use Get to find VM
|
// Use Get to find the VM
|
||||||
vm := &infrav1.AzureStackHCIVirtualMachine{}
|
vm := &infrav1.AzureStackHCIVirtualMachine{}
|
||||||
vmName := apitypes.NamespacedName{
|
vmName := apitypes.NamespacedName{
|
||||||
Namespace: clusterScope.Namespace(),
|
Namespace: clusterScope.Namespace(),
|
||||||
Name: machineScope.Name(),
|
Name: machineScope.Name(),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use Delete to delete it
|
|
||||||
if err := r.Client.Get(clusterScope.Context, vmName, vm); err != nil {
|
if err := r.Client.Get(clusterScope.Context, vmName, vm); err != nil {
|
||||||
// if the VM resource is not found, it was already deleted
|
// If the error is other than NotFound, return with error
|
||||||
// otherwise return the error
|
|
||||||
if !apierrors.IsNotFound(err) {
|
if !apierrors.IsNotFound(err) {
|
||||||
return errors.Wrapf(err, "failed to get AzureStackHCIVirtualMachine %s", vmName)
|
return reconcile.Result{}, errors.Wrapf(err, "failed to get AzureStackHCIVirtualMachine %s", vmName)
|
||||||
}
|
|
||||||
} else if vm.GetDeletionTimestamp().IsZero() {
|
|
||||||
// this means the VM resource was found and has not been deleted
|
|
||||||
infrav1util.CopyCorrelationId(machineScope.AzureStackHCIMachine, vm)
|
|
||||||
if err := r.Client.Update(clusterScope.Context, vm); err != nil {
|
|
||||||
if !apierrors.IsNotFound(err) {
|
|
||||||
return errors.Wrapf(err, "failed to update AzureStackHCIVirtualMachine %s", vmName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// is this a synchronous call?
|
|
||||||
err := r.Client.Delete(clusterScope.Context, vm)
|
|
||||||
telemetry.RecordHybridAKSCRDChange(
|
|
||||||
clusterScope.GetLogger(),
|
|
||||||
clusterScope.GetCustomResourceTypeWithName(),
|
|
||||||
fmt.Sprintf("%s/%s/%s", vm.TypeMeta.Kind, vm.ObjectMeta.Namespace, vm.ObjectMeta.Name),
|
|
||||||
telemetry.Delete,
|
|
||||||
telemetry.CRD,
|
|
||||||
nil,
|
|
||||||
err)
|
|
||||||
if err != nil {
|
|
||||||
if !apierrors.IsNotFound(err) {
|
|
||||||
return errors.Wrapf(err, "failed to delete AzureStackHCIVirtualMachine %s", vmName)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// If the VM resource is not found, no need to reconcile again
|
||||||
|
return reconcile.Result{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
// If the VM resource exists and has a deletion timestamp, it means a deletion has been requested.
|
||||||
|
// In this case, requeue the request after a delay to check again later if the deletion has been completed.
|
||||||
|
if !vm.DeletionTimestamp.IsZero() {
|
||||||
|
return reconcile.Result{RequeueAfter: 15 * time.Second}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the VM resource exists and does not have a deletion timestamp, proceed with the deletion process.
|
||||||
|
infrav1util.CopyCorrelationID(machineScope.AzureStackHCIMachine, vm)
|
||||||
|
if err := r.Client.Update(clusterScope.Context, vm); err != nil {
|
||||||
|
return reconcile.Result{}, errors.Wrapf(err, "failed to update AzureStackHCIVirtualMachine %s", vmName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete the VM resource
|
||||||
|
err := r.Client.Delete(clusterScope.Context, vm)
|
||||||
|
telemetry.RecordHybridAKSCRDChange(
|
||||||
|
clusterScope.GetLogger(),
|
||||||
|
clusterScope.GetCustomResourceTypeWithName(),
|
||||||
|
fmt.Sprintf("%s/%s/%s", vm.TypeMeta.Kind, vm.ObjectMeta.Namespace, vm.ObjectMeta.Name),
|
||||||
|
telemetry.Delete,
|
||||||
|
telemetry.CRD,
|
||||||
|
nil,
|
||||||
|
err)
|
||||||
|
if err != nil && !apierrors.IsNotFound(err) {
|
||||||
|
return reconcile.Result{}, errors.Wrapf(err, "failed to delete AzureStackHCIVirtualMachine %s", vmName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Requeue the reconciliation after a delay to check if the deletion has been completed
|
||||||
|
return reconcile.Result{RequeueAfter: 15 * time.Second}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// validateUpdate checks that no immutable fields have been updated and
|
// validateUpdate checks that no immutable fields have been updated and
|
||||||
|
|
|
@ -0,0 +1,245 @@
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
infrav1 "github.com/microsoft/cluster-api-provider-azurestackhci/api/v1beta1"
|
||||||
|
"github.com/microsoft/cluster-api-provider-azurestackhci/cloud/scope"
|
||||||
|
mock8sclient "github.com/microsoft/cluster-api-provider-azurestackhci/test/mocks/k8s/client"
|
||||||
|
. "github.com/onsi/ginkgo/v2"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
apitypes "k8s.io/apimachinery/pkg/types"
|
||||||
|
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
|
||||||
|
ctrl "sigs.k8s.io/controller-runtime"
|
||||||
|
"sigs.k8s.io/controller-runtime/pkg/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("AzureStackHCIMachine Controller", func() {
|
||||||
|
|
||||||
|
// Define utility constants for object names and testing timeouts/durations and intervals.
|
||||||
|
const (
|
||||||
|
AzureStackHCIMachineName = "test-cluster-control-plane-0"
|
||||||
|
AzureStackHCIClusterName = "test-cluster"
|
||||||
|
MachineNamespace = "default"
|
||||||
|
ClusterNamespace = "default"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
cluster *clusterv1.Cluster
|
||||||
|
machine *clusterv1.Machine
|
||||||
|
azureStackHCICluster *infrav1.AzureStackHCICluster
|
||||||
|
azureStackHCIMachine *infrav1.AzureStackHCIMachine
|
||||||
|
clusterScope *scope.ClusterScope
|
||||||
|
machineScope *scope.MachineScope
|
||||||
|
)
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
|
||||||
|
Context("Unit tests for reconcileVirtualMachineCreate", func() {
|
||||||
|
|
||||||
|
It("should return no requeue and no error when AzureStackHCIVirtualMachine is not found", func() {
|
||||||
|
logger := log.FromContext(ctx)
|
||||||
|
|
||||||
|
// Create a test cluster resource
|
||||||
|
cluster = &clusterv1.Cluster{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: AzureStackHCIClusterName,
|
||||||
|
Namespace: ClusterNamespace,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a test AzureStackHCICluster resource
|
||||||
|
azureStackHCICluster = &infrav1.AzureStackHCICluster{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: AzureStackHCIClusterName,
|
||||||
|
Namespace: ClusterNamespace,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a test machine resource
|
||||||
|
machine = &clusterv1.Machine{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: AzureStackHCIMachineName,
|
||||||
|
Namespace: MachineNamespace,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a test AzureStackHCIMachine resource
|
||||||
|
azureStackHCIMachine = &infrav1.AzureStackHCIMachine{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: AzureStackHCIMachineName,
|
||||||
|
Namespace: MachineNamespace,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new scope for the cluster(creating this way to skip some of the logic in the scope constructor)
|
||||||
|
clusterScope = &scope.ClusterScope{
|
||||||
|
Logger: logger,
|
||||||
|
Cluster: cluster,
|
||||||
|
AzureStackHCICluster: azureStackHCICluster,
|
||||||
|
Context: ctx,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a new scope for the machine
|
||||||
|
machineScope = &scope.MachineScope{
|
||||||
|
Logger: logger,
|
||||||
|
Cluster: cluster,
|
||||||
|
Machine: machine,
|
||||||
|
AzureStackHCICluster: azureStackHCICluster,
|
||||||
|
AzureStackHCIMachine: azureStackHCIMachine,
|
||||||
|
}
|
||||||
|
|
||||||
|
reconcileResult, reconcileErr := azureStackHCIMachineReconciler.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
|
Expect(reconcileResult).To(Equal(ctrl.Result{}))
|
||||||
|
Expect(reconcileErr).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should return no requeue and error if there is error in getting the AzureStackHCIVirtualMachine resource", func() {
|
||||||
|
// Create mocks client
|
||||||
|
mockClient := mock8sclient.NewMockClient(mockctrl)
|
||||||
|
|
||||||
|
vmName := apitypes.NamespacedName{
|
||||||
|
Namespace: clusterScope.Namespace(),
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// When it asks for the AzureStackHCIVirtualMachine, return some error
|
||||||
|
mockClient.EXPECT().Get(ctx, vmName, &infrav1.AzureStackHCIVirtualMachine{}).Return(errors.New("test error"))
|
||||||
|
azureStackHCIMachineReconciler.Client = mockClient
|
||||||
|
|
||||||
|
reconcileResult, reconcileErr := azureStackHCIMachineReconciler.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
|
Expect(reconcileResult).To(Equal(ctrl.Result{}))
|
||||||
|
Expect(reconcileErr).To(HaveOccurred())
|
||||||
|
Expect(reconcileErr.Error()).To(ContainSubstring("test error"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should return requeue and no error if AzureStackHCIVirtualMachine is found and deletion timestamp is not zero", func() {
|
||||||
|
// Create mocks client
|
||||||
|
mockClient := mock8sclient.NewMockClient(mockctrl)
|
||||||
|
|
||||||
|
vmName := apitypes.NamespacedName{
|
||||||
|
Namespace: clusterScope.Namespace(),
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the deletion timestamp to nil
|
||||||
|
azureStackHCIVirtualMachine := &infrav1.AzureStackHCIVirtualMachine{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
Namespace: machineScope.Namespace(),
|
||||||
|
DeletionTimestamp: &metav1.Time{Time: time.Now()},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// When it asks for the AzureStackHCIVirtualMachine, return the test resource
|
||||||
|
mockClient.EXPECT().Get(ctx, vmName, &infrav1.AzureStackHCIVirtualMachine{}).Return(nil).SetArg(2, *azureStackHCIVirtualMachine)
|
||||||
|
azureStackHCIMachineReconciler.Client = mockClient
|
||||||
|
|
||||||
|
reconcileResult, reconcileErr := azureStackHCIMachineReconciler.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
|
Expect(reconcileResult).To(Equal(ctrl.Result{RequeueAfter: 15 * time.Second}))
|
||||||
|
Expect(reconcileErr).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should return no requeue and error if AzureStackHCIVirtualMachine is found, deletion timestamp is zero and update returns error", func() {
|
||||||
|
// Create mocks client
|
||||||
|
mockClient := mock8sclient.NewMockClient(mockctrl)
|
||||||
|
|
||||||
|
vmName := apitypes.NamespacedName{
|
||||||
|
Namespace: clusterScope.Namespace(),
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the deletion timestamp to nil
|
||||||
|
azureStackHCIVirtualMachine := &infrav1.AzureStackHCIVirtualMachine{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
Namespace: machineScope.Namespace(),
|
||||||
|
DeletionTimestamp: nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// When it asks for the AzureStackHCIVirtualMachine, return the test resource
|
||||||
|
mockClient.EXPECT().Get(ctx, vmName, &infrav1.AzureStackHCIVirtualMachine{}).Return(nil).SetArg(2, *azureStackHCIVirtualMachine)
|
||||||
|
|
||||||
|
// When it asks to update the AzureStackHCIVirtualMachine, return some error
|
||||||
|
mockClient.EXPECT().Update(ctx, azureStackHCIVirtualMachine).Return(errors.New("test error"))
|
||||||
|
azureStackHCIMachineReconciler.Client = mockClient
|
||||||
|
|
||||||
|
reconcileResult, reconcileErr := azureStackHCIMachineReconciler.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
|
Expect(reconcileResult).To(Equal(ctrl.Result{}))
|
||||||
|
Expect(reconcileErr).To(HaveOccurred())
|
||||||
|
Expect(reconcileErr.Error()).To(ContainSubstring("test error"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should return no requeue and error if AzureStackHCIVirtualMachine is found, deletion timestamp is zero, update returns no error and delete returns error", func() {
|
||||||
|
// Create mocks client
|
||||||
|
mockClient := mock8sclient.NewMockClient(mockctrl)
|
||||||
|
|
||||||
|
vmName := apitypes.NamespacedName{
|
||||||
|
Namespace: clusterScope.Namespace(),
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the deletion timestamp to nil
|
||||||
|
azureStackHCIVirtualMachine := &infrav1.AzureStackHCIVirtualMachine{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
Namespace: machineScope.Namespace(),
|
||||||
|
DeletionTimestamp: nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// When it asks for the AzureStackHCIVirtualMachine, return the test resource
|
||||||
|
mockClient.EXPECT().Get(ctx, vmName, &infrav1.AzureStackHCIVirtualMachine{}).Return(nil).SetArg(2, *azureStackHCIVirtualMachine)
|
||||||
|
|
||||||
|
// When it asks to update the AzureStackHCIVirtualMachine, return no error
|
||||||
|
mockClient.EXPECT().Update(ctx, azureStackHCIVirtualMachine).Return(nil)
|
||||||
|
|
||||||
|
// When it asks to delete the AzureStackHCIVirtualMachine, return some error
|
||||||
|
mockClient.EXPECT().Delete(ctx, azureStackHCIVirtualMachine).Return(errors.New("test error"))
|
||||||
|
azureStackHCIMachineReconciler.Client = mockClient
|
||||||
|
|
||||||
|
reconcileResult, reconcileErr := azureStackHCIMachineReconciler.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
|
Expect(reconcileResult).To(Equal(ctrl.Result{}))
|
||||||
|
Expect(reconcileErr).To(HaveOccurred())
|
||||||
|
Expect(reconcileErr.Error()).To(ContainSubstring("test error"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("should return requeue and no error if AzureStackHCIVirtualMachine is found, deletion timestamp is zero, update returns no error and delete returns no error", func() {
|
||||||
|
// Create mocks client
|
||||||
|
mockClient := mock8sclient.NewMockClient(mockctrl)
|
||||||
|
|
||||||
|
vmName := apitypes.NamespacedName{
|
||||||
|
Namespace: clusterScope.Namespace(),
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the deletion timestamp to nil
|
||||||
|
azureStackHCIVirtualMachine := &infrav1.AzureStackHCIVirtualMachine{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: machineScope.Name(),
|
||||||
|
Namespace: machineScope.Namespace(),
|
||||||
|
DeletionTimestamp: nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// When it asks for the AzureStackHCIVirtualMachine, return the test resource
|
||||||
|
mockClient.EXPECT().Get(ctx, vmName, &infrav1.AzureStackHCIVirtualMachine{}).Return(nil).SetArg(2, *azureStackHCIVirtualMachine)
|
||||||
|
|
||||||
|
// When it asks to update the AzureStackHCIVirtualMachine, return no error
|
||||||
|
mockClient.EXPECT().Update(ctx, azureStackHCIVirtualMachine).Return(nil)
|
||||||
|
|
||||||
|
// When it asks to delete the AzureStackHCIVirtualMachine, return no error
|
||||||
|
mockClient.EXPECT().Delete(ctx, azureStackHCIVirtualMachine).Return(nil)
|
||||||
|
azureStackHCIMachineReconciler.Client = mockClient
|
||||||
|
|
||||||
|
reconcileResult, reconcileErr := azureStackHCIMachineReconciler.reconcileVirtualMachineDelete(machineScope, clusterScope)
|
||||||
|
Expect(reconcileResult).To(Equal(ctrl.Result{RequeueAfter: 15 * time.Second}))
|
||||||
|
Expect(reconcileErr).ToNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
|
@ -0,0 +1,129 @@
|
||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
infrav1 "github.com/microsoft/cluster-api-provider-azurestackhci/api/v1beta1"
|
||||||
|
. "github.com/onsi/ginkgo/v2"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
"github.com/onsi/gomega/gexec"
|
||||||
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
|
"k8s.io/client-go/tools/record"
|
||||||
|
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
|
||||||
|
ctrl "sigs.k8s.io/controller-runtime"
|
||||||
|
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||||
|
"sigs.k8s.io/controller-runtime/pkg/controller"
|
||||||
|
"sigs.k8s.io/controller-runtime/pkg/envtest"
|
||||||
|
logf "sigs.k8s.io/controller-runtime/pkg/log"
|
||||||
|
"sigs.k8s.io/controller-runtime/pkg/log/zap"
|
||||||
|
|
||||||
|
"github.com/golang/mock/gomock"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
testEnv *envtest.Environment
|
||||||
|
k8sClient client.Client
|
||||||
|
fakeRecorder *record.FakeRecorder
|
||||||
|
mockctrl *gomock.Controller
|
||||||
|
|
||||||
|
azureStackHCIMachineReconciler AzureStackHCIMachineReconciler
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestClusterApiProviderAzureStackHCIControllerSuite(t *testing.T) {
|
||||||
|
RegisterFailHandler(Fail)
|
||||||
|
RunSpecs(t, "ClusterApiProviderAzureStackHCIController Suite")
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = BeforeSuite(func() {
|
||||||
|
logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true)))
|
||||||
|
|
||||||
|
// Download the Machine CRD
|
||||||
|
resp, err := http.Get("https://raw.githubusercontent.com/kubernetes-sigs/cluster-api/master/config/crd/bases/cluster.x-k8s.io_machines.yaml")
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
// Write the CRD to a temporary file
|
||||||
|
tmpfile, err := ioutil.TempFile("", "machine.crd.*.yaml")
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
defer os.Remove(tmpfile.Name()) // clean up
|
||||||
|
|
||||||
|
b, err := ioutil.ReadAll(resp.Body)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
_, err = tmpfile.Write(b)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
err = tmpfile.Close()
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
// Add the path to the temporary file to the CRDDirectoryPaths
|
||||||
|
testEnv = &envtest.Environment{
|
||||||
|
CRDDirectoryPaths: []string{filepath.Join("..", "config", "crd", "bases"), tmpfile.Name()},
|
||||||
|
ErrorIfCRDPathMissing: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
By("bootstrapping test environment")
|
||||||
|
cfg, err := testEnv.Start()
|
||||||
|
if err != nil {
|
||||||
|
logf.Log.Error(err, "unable to start test environment")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = infrav1.AddToScheme(scheme.Scheme)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
err = clusterv1.AddToScheme(scheme.Scheme)
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
|
||||||
|
// +kubebuilder:scaffold:scheme
|
||||||
|
|
||||||
|
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
|
||||||
|
Expect(err).NotTo(HaveOccurred())
|
||||||
|
Expect(k8sClient).NotTo(BeNil())
|
||||||
|
|
||||||
|
k8sManager, err := ctrl.NewManager(cfg, ctrl.Options{
|
||||||
|
Scheme: scheme.Scheme,
|
||||||
|
})
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
fakeRecorder = record.NewFakeRecorder(100)
|
||||||
|
|
||||||
|
err = (&AzureStackHCIClusterReconciler{
|
||||||
|
Client: k8sClient,
|
||||||
|
Log: ctrl.Log.WithName("controllers").WithName("AzureStackHCICluster"),
|
||||||
|
Recorder: fakeRecorder,
|
||||||
|
}).SetupWithManager(k8sManager, controller.Options{})
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
azureStackHCIMachineReconciler = AzureStackHCIMachineReconciler{
|
||||||
|
Client: k8sClient,
|
||||||
|
Log: ctrl.Log.WithName("controllers").WithName("AzureStackHCIMachine"),
|
||||||
|
Recorder: fakeRecorder,
|
||||||
|
}
|
||||||
|
err = azureStackHCIMachineReconciler.SetupWithManager(k8sManager, controller.Options{})
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
// Start the manager/controller
|
||||||
|
go func() {
|
||||||
|
defer GinkgoRecover()
|
||||||
|
err = k8sManager.Start(ctrl.SetupSignalHandler())
|
||||||
|
gexec.KillAndWait(4 * time.Second)
|
||||||
|
|
||||||
|
err := testEnv.Stop()
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
}()
|
||||||
|
})
|
||||||
|
|
||||||
|
var _ = BeforeEach(func() {
|
||||||
|
mockctrl = gomock.NewController(GinkgoT())
|
||||||
|
})
|
||||||
|
|
||||||
|
var _ = AfterEach(func() {
|
||||||
|
GinkgoRecover()
|
||||||
|
|
||||||
|
mockctrl.Finish()
|
||||||
|
})
|
7
go.mod
7
go.mod
|
@ -6,8 +6,11 @@ require (
|
||||||
github.com/Azure/go-autorest/autorest/to v0.4.0
|
github.com/Azure/go-autorest/autorest/to v0.4.0
|
||||||
github.com/blang/semver v3.5.1+incompatible
|
github.com/blang/semver v3.5.1+incompatible
|
||||||
github.com/go-logr/logr v1.2.3
|
github.com/go-logr/logr v1.2.3
|
||||||
|
github.com/golang/mock v1.6.0
|
||||||
github.com/microsoft/moc v0.11.0-alpha.37
|
github.com/microsoft/moc v0.11.0-alpha.37
|
||||||
github.com/microsoft/moc-sdk-for-go v0.11.1-alpha.14
|
github.com/microsoft/moc-sdk-for-go v0.11.1-alpha.14
|
||||||
|
github.com/onsi/ginkgo/v2 v2.9.2
|
||||||
|
github.com/onsi/gomega v1.27.5
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
golang.org/x/crypto v0.17.0
|
golang.org/x/crypto v0.17.0
|
||||||
|
@ -39,6 +42,7 @@ require (
|
||||||
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||||
github.com/go-openapi/jsonreference v0.20.0 // indirect
|
github.com/go-openapi/jsonreference v0.20.0 // indirect
|
||||||
github.com/go-openapi/swag v0.22.3 // indirect
|
github.com/go-openapi/swag v0.22.3 // indirect
|
||||||
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
||||||
github.com/gobuffalo/flect v1.0.2 // indirect
|
github.com/gobuffalo/flect v1.0.2 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
|
||||||
|
@ -47,6 +51,7 @@ require (
|
||||||
github.com/google/gnostic v0.6.9 // indirect
|
github.com/google/gnostic v0.6.9 // indirect
|
||||||
github.com/google/go-cmp v0.5.9 // indirect
|
github.com/google/go-cmp v0.5.9 // indirect
|
||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
|
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect
|
||||||
github.com/google/uuid v1.3.1 // indirect
|
github.com/google/uuid v1.3.1 // indirect
|
||||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect
|
github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 // indirect
|
||||||
|
@ -61,7 +66,6 @@ require (
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
|
||||||
github.com/onsi/gomega v1.27.5 // indirect
|
|
||||||
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||||
github.com/prometheus/client_golang v1.14.0 // indirect
|
github.com/prometheus/client_golang v1.14.0 // indirect
|
||||||
github.com/prometheus/client_model v0.4.0 // indirect
|
github.com/prometheus/client_model v0.4.0 // indirect
|
||||||
|
@ -84,6 +88,7 @@ require (
|
||||||
golang.org/x/term v0.15.0 // indirect
|
golang.org/x/term v0.15.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.3.0 // indirect
|
||||||
|
golang.org/x/tools v0.13.0 // indirect
|
||||||
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
|
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20231127180814-3a041ad873d4 // indirect
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -925,6 +925,7 @@ github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhO
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||||
|
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||||
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
|
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
|
||||||
github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
|
github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
|
||||||
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
|
@ -1210,9 +1211,9 @@ github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+
|
||||||
github.com/onsi/ginkgo v1.6.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.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||||
github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
|
github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
|
||||||
github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
|
|
||||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||||
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
|
github.com/onsi/ginkgo/v2 v2.9.2 h1:BA2GMJOtfGAfagzYtrAlufIP0lq6QERkFmHLMLPwFSU=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts=
|
||||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
|
github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
|
||||||
|
@ -1426,6 +1427,7 @@ golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
|
golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc=
|
||||||
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
||||||
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
bases:
|
|
||||||
- ../../config
|
|
||||||
|
|
||||||
patchesJson6902:
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
- target:
|
kind: Kustomization
|
||||||
group: apps
|
resources:
|
||||||
version: v1
|
- ../../config
|
||||||
kind: Deployment
|
patches:
|
||||||
name: controller-manager
|
- path: manager_image_patch.yaml
|
||||||
path: manager_image_patch.yaml
|
target:
|
||||||
|
group: apps
|
||||||
|
kind: Deployment
|
||||||
|
name: controller-manager
|
||||||
|
version: v1
|
||||||
|
|
|
@ -65,10 +65,10 @@ func GetAuthorizerFromKubernetesCluster(ctx context.Context, cloudFqdn string) (
|
||||||
return nil, errors.Wrap(err, "failed to create a client")
|
return nil, errors.Wrap(err, "failed to create a client")
|
||||||
}
|
}
|
||||||
|
|
||||||
return ReconcileAzureStackHCIAccess(logger, ctx, c, cloudFqdn)
|
return ReconcileAzureStackHCIAccess(ctx, logger, c, cloudFqdn)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReconcileAzureStackHCIAccess(logger logr.Logger, ctx context.Context, cli client.Client, cloudFqdn string) (auth.Authorizer, error) {
|
func ReconcileAzureStackHCIAccess(ctx context.Context, logger logr.Logger, cli client.Client, cloudFqdn string) (auth.Authorizer, error) {
|
||||||
|
|
||||||
wssdconfigpath := os.Getenv("WSSD_CONFIG_PATH")
|
wssdconfigpath := os.Getenv("WSSD_CONFIG_PATH")
|
||||||
if wssdconfigpath == "" {
|
if wssdconfigpath == "" {
|
||||||
|
@ -78,9 +78,9 @@ func ReconcileAzureStackHCIAccess(logger logr.Logger, ctx context.Context, cli c
|
||||||
if strings.ToLower(os.Getenv("WSSD_DEBUG_MODE")) != "on" {
|
if strings.ToLower(os.Getenv("WSSD_DEBUG_MODE")) != "on" {
|
||||||
_, err := os.Stat(wssdconfigpath)
|
_, err := os.Stat(wssdconfigpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return login(logger, ctx, cli, cloudFqdn)
|
return login(ctx, logger, cli, cloudFqdn)
|
||||||
}
|
}
|
||||||
go UpdateLoginConfig(logger, ctx, cli)
|
go UpdateLoginConfig(ctx, logger, cli)
|
||||||
}
|
}
|
||||||
authorizer, err := auth.NewAuthorizerFromEnvironment(cloudFqdn)
|
authorizer, err := auth.NewAuthorizerFromEnvironment(cloudFqdn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -89,12 +89,12 @@ func ReconcileAzureStackHCIAccess(logger logr.Logger, ctx context.Context, cli c
|
||||||
return nil, errors.Wrap(err, "error: new authorizer failed")
|
return nil, errors.Wrap(err, "error: new authorizer failed")
|
||||||
}
|
}
|
||||||
// Login if certificate expired
|
// Login if certificate expired
|
||||||
return login(logger, ctx, cli, cloudFqdn)
|
return login(ctx, logger, cli, cloudFqdn)
|
||||||
}
|
}
|
||||||
return authorizer, nil
|
return authorizer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func UpdateLoginConfig(logger logr.Logger, ctx context.Context, cli client.Client) {
|
func UpdateLoginConfig(ctx context.Context, logger logr.Logger, cli client.Client) {
|
||||||
secret, err := GetSecret(ctx, cli, AzHCIAccessCreds)
|
secret, err := GetSecret(ctx, cli, AzHCIAccessCreds)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err, "error: failed to create wssd session, missing login credentials secret")
|
logger.Error(err, "error: failed to create wssd session, missing login credentials secret")
|
||||||
|
@ -119,7 +119,7 @@ func UpdateLoginConfig(logger logr.Logger, ctx context.Context, cli client.Clien
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func login(logger logr.Logger, ctx context.Context, cli client.Client, cloudFqdn string) (auth.Authorizer, error) {
|
func login(ctx context.Context, logger logr.Logger, cli client.Client, cloudFqdn string) (auth.Authorizer, error) {
|
||||||
wssdconfigpath := os.Getenv("WSSD_CONFIG_PATH")
|
wssdconfigpath := os.Getenv("WSSD_CONFIG_PATH")
|
||||||
if wssdconfigpath == "" {
|
if wssdconfigpath == "" {
|
||||||
return nil, errors.New("ReconcileAzureStackHCIAccess: Environment variable WSSD_CONFIG_PATH is not set")
|
return nil, errors.New("ReconcileAzureStackHCIAccess: Environment variable WSSD_CONFIG_PATH is not set")
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2020 The Kubernetes Authors.
|
|
||||||
Portions Copyright © Microsoft Corporation.
|
|
||||||
|
|
||||||
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 cloudtest
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"testing"
|
|
||||||
|
|
||||||
"github.com/go-logr/logr"
|
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RuntimeRawExtension takes anything and turns it into a *runtime.RawExtension.
|
|
||||||
// This is helpful for creating clusterv1.Cluster/Machine objects that need
|
|
||||||
// a specific AzureClusterProviderSpec or Status.
|
|
||||||
func RuntimeRawExtension(t *testing.T, p interface{}) *runtime.RawExtension {
|
|
||||||
t.Helper()
|
|
||||||
out, err := json.Marshal(p)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err)
|
|
||||||
}
|
|
||||||
return &runtime.RawExtension{
|
|
||||||
Raw: out,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Log implements logr.Logger for testing. Do not use if you actually want to
|
|
||||||
// test log messages.
|
|
||||||
type Log struct{}
|
|
||||||
|
|
||||||
func (l *Log) Error(err error, msg string, keysAndValues ...interface{}) {}
|
|
||||||
func (l *Log) V(level int) logr.InfoLogger { return l }
|
|
||||||
func (l *Log) WithValues(keysAndValues ...interface{}) logr.Logger { return l }
|
|
||||||
func (l *Log) WithName(name string) logr.Logger { return l }
|
|
||||||
func (l *Log) Info(msg string, keysAndValues ...interface{}) {}
|
|
||||||
func (l *Log) Enabled() bool { return false }
|
|
|
@ -58,7 +58,7 @@ func GetReconcileID(ctx context.Context) types.UID {
|
||||||
return reconcileID
|
return reconcileID
|
||||||
}
|
}
|
||||||
|
|
||||||
func CopyCorrelationId(source, target client.Object) {
|
func CopyCorrelationID(source, target client.Object) {
|
||||||
sourceAnnotations := source.GetAnnotations()
|
sourceAnnotations := source.GetAnnotations()
|
||||||
if len(sourceAnnotations) == 0 {
|
if len(sourceAnnotations) == 0 {
|
||||||
return
|
return
|
||||||
|
|
|
@ -3,4 +3,4 @@ apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
namespace: default
|
namespace: default
|
||||||
resources:
|
resources:
|
||||||
- cluster-template.yaml
|
- cluster-template.yaml
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
resources:
|
resources:
|
||||||
- ../base
|
- ../base
|
||||||
patchesStrategicMerge:
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
- patches/default.yaml
|
kind: Kustomization
|
||||||
|
patches:
|
||||||
|
- path: patches/default.yaml
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
resources:
|
resources:
|
||||||
- ../base
|
- ../base
|
||||||
- mgmt-machine.yaml
|
- mgmt-machine.yaml
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package test
|
||||||
|
|
||||||
|
// controller-runtime k8s client
|
||||||
|
|
||||||
|
//go:generate mockgen -destination=k8s/client/client.go sigs.k8s.io/controller-runtime/pkg/client Client
|
|
@ -0,0 +1,228 @@
|
||||||
|
// Code generated by MockGen. DO NOT EDIT.
|
||||||
|
// Source: sigs.k8s.io/controller-runtime/pkg/client (interfaces: Client)
|
||||||
|
|
||||||
|
// Package mock_client is a generated GoMock package.
|
||||||
|
package mock_client
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
reflect "reflect"
|
||||||
|
|
||||||
|
gomock "github.com/golang/mock/gomock"
|
||||||
|
meta "k8s.io/apimachinery/pkg/api/meta"
|
||||||
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
client "sigs.k8s.io/controller-runtime/pkg/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
// MockClient is a mock of Client interface.
|
||||||
|
type MockClient struct {
|
||||||
|
ctrl *gomock.Controller
|
||||||
|
recorder *MockClientMockRecorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// MockClientMockRecorder is the mock recorder for MockClient.
|
||||||
|
type MockClientMockRecorder struct {
|
||||||
|
mock *MockClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMockClient creates a new mock instance.
|
||||||
|
func NewMockClient(ctrl *gomock.Controller) *MockClient {
|
||||||
|
mock := &MockClient{ctrl: ctrl}
|
||||||
|
mock.recorder = &MockClientMockRecorder{mock}
|
||||||
|
return mock
|
||||||
|
}
|
||||||
|
|
||||||
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
||||||
|
func (m *MockClient) EXPECT() *MockClientMockRecorder {
|
||||||
|
return m.recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create mocks base method.
|
||||||
|
func (m *MockClient) Create(arg0 context.Context, arg1 client.Object, arg2 ...client.CreateOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1}
|
||||||
|
for _, a := range arg2 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "Create", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create indicates an expected call of Create.
|
||||||
|
func (mr *MockClientMockRecorder) Create(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1}, arg2...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Create", reflect.TypeOf((*MockClient)(nil).Create), varargs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete mocks base method.
|
||||||
|
func (m *MockClient) Delete(arg0 context.Context, arg1 client.Object, arg2 ...client.DeleteOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1}
|
||||||
|
for _, a := range arg2 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "Delete", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete indicates an expected call of Delete.
|
||||||
|
func (mr *MockClientMockRecorder) Delete(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1}, arg2...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Delete", reflect.TypeOf((*MockClient)(nil).Delete), varargs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteAllOf mocks base method.
|
||||||
|
func (m *MockClient) DeleteAllOf(arg0 context.Context, arg1 client.Object, arg2 ...client.DeleteAllOfOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1}
|
||||||
|
for _, a := range arg2 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "DeleteAllOf", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteAllOf indicates an expected call of DeleteAllOf.
|
||||||
|
func (mr *MockClientMockRecorder) DeleteAllOf(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1}, arg2...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteAllOf", reflect.TypeOf((*MockClient)(nil).DeleteAllOf), varargs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get mocks base method.
|
||||||
|
func (m *MockClient) Get(arg0 context.Context, arg1 types.NamespacedName, arg2 client.Object, arg3 ...client.GetOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1, arg2}
|
||||||
|
for _, a := range arg3 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "Get", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get indicates an expected call of Get.
|
||||||
|
func (mr *MockClientMockRecorder) Get(arg0, arg1, arg2 interface{}, arg3 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1, arg2}, arg3...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Get", reflect.TypeOf((*MockClient)(nil).Get), varargs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// List mocks base method.
|
||||||
|
func (m *MockClient) List(arg0 context.Context, arg1 client.ObjectList, arg2 ...client.ListOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1}
|
||||||
|
for _, a := range arg2 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "List", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// List indicates an expected call of List.
|
||||||
|
func (mr *MockClientMockRecorder) List(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1}, arg2...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "List", reflect.TypeOf((*MockClient)(nil).List), varargs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch mocks base method.
|
||||||
|
func (m *MockClient) Patch(arg0 context.Context, arg1 client.Object, arg2 client.Patch, arg3 ...client.PatchOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1, arg2}
|
||||||
|
for _, a := range arg3 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "Patch", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch indicates an expected call of Patch.
|
||||||
|
func (mr *MockClientMockRecorder) Patch(arg0, arg1, arg2 interface{}, arg3 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1, arg2}, arg3...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Patch", reflect.TypeOf((*MockClient)(nil).Patch), varargs...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RESTMapper mocks base method.
|
||||||
|
func (m *MockClient) RESTMapper() meta.RESTMapper {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "RESTMapper")
|
||||||
|
ret0, _ := ret[0].(meta.RESTMapper)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// RESTMapper indicates an expected call of RESTMapper.
|
||||||
|
func (mr *MockClientMockRecorder) RESTMapper() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RESTMapper", reflect.TypeOf((*MockClient)(nil).RESTMapper))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scheme mocks base method.
|
||||||
|
func (m *MockClient) Scheme() *runtime.Scheme {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Scheme")
|
||||||
|
ret0, _ := ret[0].(*runtime.Scheme)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scheme indicates an expected call of Scheme.
|
||||||
|
func (mr *MockClientMockRecorder) Scheme() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Scheme", reflect.TypeOf((*MockClient)(nil).Scheme))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status mocks base method.
|
||||||
|
func (m *MockClient) Status() client.SubResourceWriter {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "Status")
|
||||||
|
ret0, _ := ret[0].(client.SubResourceWriter)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Status indicates an expected call of Status.
|
||||||
|
func (mr *MockClientMockRecorder) Status() *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Status", reflect.TypeOf((*MockClient)(nil).Status))
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubResource mocks base method.
|
||||||
|
func (m *MockClient) SubResource(arg0 string) client.SubResourceClient {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
ret := m.ctrl.Call(m, "SubResource", arg0)
|
||||||
|
ret0, _ := ret[0].(client.SubResourceClient)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// SubResource indicates an expected call of SubResource.
|
||||||
|
func (mr *MockClientMockRecorder) SubResource(arg0 interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SubResource", reflect.TypeOf((*MockClient)(nil).SubResource), arg0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update mocks base method.
|
||||||
|
func (m *MockClient) Update(arg0 context.Context, arg1 client.Object, arg2 ...client.UpdateOption) error {
|
||||||
|
m.ctrl.T.Helper()
|
||||||
|
varargs := []interface{}{arg0, arg1}
|
||||||
|
for _, a := range arg2 {
|
||||||
|
varargs = append(varargs, a)
|
||||||
|
}
|
||||||
|
ret := m.ctrl.Call(m, "Update", varargs...)
|
||||||
|
ret0, _ := ret[0].(error)
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update indicates an expected call of Update.
|
||||||
|
func (mr *MockClientMockRecorder) Update(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
|
||||||
|
mr.mock.ctrl.T.Helper()
|
||||||
|
varargs := append([]interface{}{arg0, arg1}, arg2...)
|
||||||
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Update", reflect.TypeOf((*MockClient)(nil).Update), varargs...)
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче