ARO-RP/pkg/api/openshiftcluster.go

201 строка
5.9 KiB
Go
Исходник Обычный вид История

2019-10-16 06:29:17 +03:00
package api
2019-12-17 04:16:50 +03:00
// Copyright (c) Microsoft Corporation.
// Licensed under the Apache License 2.0.
2019-10-16 06:29:17 +03:00
import (
"crypto/rsa"
"time"
)
// OpenShiftCluster represents an OpenShift cluster
type OpenShiftCluster struct {
MissingFields
2019-11-28 19:31:37 +03:00
// ID, Name and Type are cased as the user provided them at create time.
// ID, Name, Type and Location are immutable.
2019-10-16 06:29:17 +03:00
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Location string `json:"location,omitempty"`
Tags map[string]string `json:"tags,omitempty"`
Properties Properties `json:"properties,omitempty"`
}
// Properties represents an OpenShift cluster's properties
type Properties struct {
MissingFields
2019-11-28 19:31:37 +03:00
// Provisioning state machine:
//
// From ARM's perspective, Succeeded and Failed are the only two terminal
// provisioning states for asynchronous operations. Clients will poll PUT,
// PATCH or DELETE operations until the resource gets to one of those
// provisioning states.
//
// ARO uses Creating, Updating and Deleting as non-terminal provisioning
// states to signal asynchronous operations from the front end to the back
// end.
//
// In case of failures, the back end sets failedProvisioningState to the
// provisioning state at the time of the failure.
//
// The ARO front end gates provisioning state machine transitions as
// follows:
//
// * no PUT, PATCH or DELETE is accepted unless the cluster is currently in
// a terminal provisioning state.
//
// * DELETE is always allowed regardless of the terminal provisioning state
// of the cluster.
//
// * PUT and PATCH are allowed as long as the cluster is in Succeeded
// provisioning state, or in a Failed provisioning state with the failed
// provisioning state to Updating.
//
// i.e. if a cluster creation or deletion fails, there is no remedy but to
// delete the cluster.
ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
FailedProvisioningState ProvisioningState `json:"failedProvisioningState,omitempty"`
2019-10-16 06:29:17 +03:00
2020-01-10 17:52:45 +03:00
ClusterProfile ClusterProfile `json:"clusterProfile,omitempty"`
2019-12-31 06:49:34 +03:00
2019-11-18 06:07:44 +03:00
ServicePrincipalProfile ServicePrincipalProfile `json:"servicePrincipalProfile,omitempty"`
2019-10-16 06:29:17 +03:00
NetworkProfile NetworkProfile `json:"networkProfile,omitempty"`
MasterProfile MasterProfile `json:"masterProfile,omitempty"`
WorkerProfiles []WorkerProfile `json:"workerProfiles,omitempty"`
2019-12-31 17:22:06 +03:00
APIServerProfile APIServerProfile `json:"apiserverProfile,omitempty"`
2019-12-31 23:45:25 +03:00
IngressProfiles []IngressProfile `json:"ingressProfiles,omitempty"`
2019-12-31 17:22:06 +03:00
ConsoleURL string `json:"consoleUrl,omitempty"`
2019-10-16 06:29:17 +03:00
// Install is non-nil only when an install is in progress
Install *Install `json:"install,omitempty"`
2019-10-16 06:29:17 +03:00
StorageSuffix string `json:"storageSuffix,omitempty"`
SSHKey *rsa.PrivateKey `json:"sshKey,omitempty"`
AdminKubeconfig []byte `json:"adminKubeconfig,omitempty"`
KubeadminPassword string `json:"kubeadminPassword,omitempty"`
}
// ProvisioningState represents a provisioning state
type ProvisioningState string
// ProvisioningState constants
const (
2019-11-28 19:31:37 +03:00
ProvisioningStateCreating ProvisioningState = "Creating"
2019-10-16 06:29:17 +03:00
ProvisioningStateUpdating ProvisioningState = "Updating"
ProvisioningStateDeleting ProvisioningState = "Deleting"
ProvisioningStateSucceeded ProvisioningState = "Succeeded"
ProvisioningStateFailed ProvisioningState = "Failed"
)
2020-01-10 17:52:45 +03:00
// ClusterProfile represents a cluster profile.
type ClusterProfile struct {
MissingFields
2020-01-10 20:42:48 +03:00
Domain string `json:"domain,omitempty"`
Version string `json:"version,omitempty"`
ResourceGroupID string `json:"resourceGroupId,omitempty"`
2020-01-10 17:52:45 +03:00
}
2019-11-18 06:07:44 +03:00
// ServicePrincipalProfile represents a service principal profile.
type ServicePrincipalProfile struct {
2019-11-21 05:32:34 +03:00
MissingFields
TenantID string `json:"tenantId,omitempty"`
2019-11-18 06:07:44 +03:00
ClientID string `json:"clientId,omitempty"`
ClientSecret string `json:"clientSecret,omitempty"`
}
// NetworkProfile represents a network profile
2019-10-16 06:29:17 +03:00
type NetworkProfile struct {
2019-11-21 05:32:34 +03:00
MissingFields
2019-10-16 06:29:17 +03:00
PodCIDR string `json:"podCidr,omitempty"`
ServiceCIDR string `json:"serviceCidr,omitempty"`
PrivateEndpointIP string `json:"privateEndpointIp,omitempty"`
2019-10-16 06:29:17 +03:00
}
// MasterProfile represents a master profile
type MasterProfile struct {
2019-11-21 05:32:34 +03:00
MissingFields
VMSize VMSize `json:"vmSize,omitempty"`
SubnetID string `json:"subnetId,omitempty"`
2019-10-16 06:29:17 +03:00
}
// VMSize represents a VM size
type VMSize string
// VMSize constants
const (
VMSizeStandardD2sV3 VMSize = "Standard_D2s_v3"
VMSizeStandardD4sV3 VMSize = "Standard_D4s_v3"
VMSizeStandardD8sV3 VMSize = "Standard_D8s_v3"
)
// WorkerProfile represents a worker profile
type WorkerProfile struct {
2019-11-21 05:32:34 +03:00
MissingFields
2019-10-16 06:29:17 +03:00
Name string `json:"name,omitempty"`
VMSize VMSize `json:"vmSize,omitempty"`
DiskSizeGB int `json:"diskSizeGB,omitempty"`
2019-11-21 05:32:34 +03:00
SubnetID string `json:"subnetId,omitempty"`
2019-10-16 06:29:17 +03:00
Count int `json:"count,omitempty"`
}
2019-12-31 17:22:06 +03:00
// APIServerProfile represents an API server profile
type APIServerProfile struct {
MissingFields
Visibility Visibility `json:"visibility,omitempty"`
URL string `json:"url,omitempty"`
IP string `json:"ip,omitempty"`
2019-12-31 17:22:06 +03:00
}
// Visibility represents visibility.
type Visibility string
// Visibility constants
const (
VisibilityPublic Visibility = "Public"
VisibilityPrivate Visibility = "Private"
)
2019-12-31 23:45:25 +03:00
// IngressProfile represents an ingress profile
type IngressProfile struct {
MissingFields
Name string `json:"name,omitempty"`
Visibility Visibility `json:"visibility,omitempty"`
IP string `json:"ip,omitempty"`
2019-12-31 23:45:25 +03:00
}
// Install represents an install process
type Install struct {
2019-10-16 06:29:17 +03:00
MissingFields
Now time.Time `json:"now,omitempty"`
Phase InstallPhase `json:"phase"`
2019-10-16 06:29:17 +03:00
}
// InstallPhase represents an install phase
type InstallPhase int
2019-10-16 06:29:17 +03:00
// InstallPhase constants
2019-10-16 06:29:17 +03:00
const (
InstallPhaseDeployStorage InstallPhase = iota
InstallPhaseDeployResources
InstallPhaseRemoveBootstrap
2019-10-16 06:29:17 +03:00
)