use visibility enum instead of private bool

This commit is contained in:
Jim Minter 2020-01-02 13:03:33 -06:00
Родитель a7b058f647
Коммит 6a359dbe8a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 0730CBDA10D1A2D3
22 изменённых файлов: 191 добавлений и 95 удалений

Просмотреть файл

@ -1 +1 @@
3e74ae0b44d701ee0d77c72b50ff31de165f255fe434307ef8a339d99e8ae0e2 swagger/redhatopenshift/resource-manager/Microsoft.RedHatOpenShift/preview/2019-12-31-preview/redhatopenshift.json
eeaa4dca6ad0e0de1a183d0e42f947aa3d31a64b88c7ea29cdf670dfa5d2fd26 swagger/redhatopenshift/resource-manager/Microsoft.RedHatOpenShift/preview/2019-12-31-preview/redhatopenshift.json

Просмотреть файл

@ -149,18 +149,27 @@ type WorkerProfile struct {
type APIServerProfile struct {
MissingFields
Private bool `json:"private,omitempty"`
URL string `json:"url,omitempty"`
IP string `json:"ip,omitempty"`
Visibility Visibility `json:"visibility,omitempty"`
URL string `json:"url,omitempty"`
IP string `json:"ip,omitempty"`
}
// Visibility represents visibility.
type Visibility string
// Visibility constants
const (
VisibilityPublic Visibility = "Public"
VisibilityPrivate Visibility = "Private"
)
// IngressProfile represents an ingress profile
type IngressProfile struct {
MissingFields
Name string `json:"name,omitempty"`
Private bool `json:"private,omitempty"`
IP string `json:"ip,omitempty"`
Name string `json:"name,omitempty"`
Visibility Visibility `json:"visibility,omitempty"`
IP string `json:"ip,omitempty"`
}
// Install represents an install process

Просмотреть файл

@ -132,8 +132,8 @@ type WorkerProfile struct {
// APIServerProfile represents an API server profile.
type APIServerProfile struct {
// Expose the API server on a private IP address only (immutable).
Private bool `json:"private,omitempty"`
// API server visibility (immutable).
Visibility Visibility `json:"visibility,omitempty"`
// The URL to access the cluster API server (immutable).
URL string `json:"url,omitempty"`
@ -142,13 +142,22 @@ type APIServerProfile struct {
IP string `json:"ip,omitempty"`
}
// Visibility represents visibility.
type Visibility string
// Visibility constants
const (
VisibilityPublic Visibility = "Public"
VisibilityPrivate Visibility = "Private"
)
// IngressProfile represents an ingress profile.
type IngressProfile struct {
// The ingress profile name. Must be "default" (immutable).
Name string `json:"name,omitempty"`
// Expose the ingress on a private IP address only (immutable).
Private bool `json:"private,omitempty"`
// Ingress visibility (immutable).
Visibility Visibility `json:"visibility,omitempty"`
// The IP of the ingress (immutable).
IP string `json:"ip,omitempty"`

Просмотреть файл

@ -34,9 +34,9 @@ func openShiftClusterToExternal(oc *api.OpenShiftCluster) *OpenShiftCluster {
SubnetID: oc.Properties.MasterProfile.SubnetID,
},
APIServerProfile: APIServerProfile{
Private: oc.Properties.APIServerProfile.Private,
URL: oc.Properties.APIServerProfile.URL,
IP: oc.Properties.APIServerProfile.IP,
Visibility: Visibility(oc.Properties.APIServerProfile.Visibility),
URL: oc.Properties.APIServerProfile.URL,
IP: oc.Properties.APIServerProfile.IP,
},
ConsoleURL: oc.Properties.ConsoleURL,
},
@ -59,9 +59,9 @@ func openShiftClusterToExternal(oc *api.OpenShiftCluster) *OpenShiftCluster {
out.Properties.IngressProfiles = make([]IngressProfile, 0, len(oc.Properties.IngressProfiles))
for _, p := range oc.Properties.IngressProfiles {
out.Properties.IngressProfiles = append(out.Properties.IngressProfiles, IngressProfile{
Name: p.Name,
Private: p.Private,
IP: p.IP,
Name: p.Name,
Visibility: Visibility(p.Visibility),
IP: p.IP,
})
}
}
@ -132,7 +132,7 @@ func openShiftClusterToInternal(oc *OpenShiftCluster, out *api.OpenShiftCluster)
outp.SubnetID = p.SubnetID
outp.Count = p.Count
}
out.Properties.APIServerProfile.Private = oc.Properties.APIServerProfile.Private
out.Properties.APIServerProfile.Visibility = api.Visibility(oc.Properties.APIServerProfile.Visibility)
out.Properties.APIServerProfile.URL = oc.Properties.APIServerProfile.URL
out.Properties.APIServerProfile.IP = oc.Properties.APIServerProfile.IP
for _, p := range oc.Properties.IngressProfiles {
@ -148,7 +148,7 @@ func openShiftClusterToInternal(oc *OpenShiftCluster, out *api.OpenShiftCluster)
outp = &out.Properties.IngressProfiles[len(out.Properties.IngressProfiles)-1]
}
outp.Name = p.Name
outp.Private = p.Private
outp.Visibility = api.Visibility(p.Visibility)
outp.IP = p.IP
}
out.Properties.ConsoleURL = oc.Properties.ConsoleURL

Просмотреть файл

@ -37,15 +37,15 @@ func exampleOpenShiftCluster() *OpenShiftCluster {
},
},
APIServerProfile: APIServerProfile{
Private: true,
URL: "https://api.cluster.location.aroapp.io:6443/",
IP: "1.2.3.4",
Visibility: VisibilityPublic,
URL: "https://api.cluster.location.aroapp.io:6443/",
IP: "1.2.3.4",
},
IngressProfiles: []IngressProfile{
{
Name: "default",
Private: true,
IP: "1.2.3.4",
Name: "default",
Visibility: VisibilityPublic,
IP: "1.2.3.4",
},
},
ConsoleURL: "https://console-openshift-console.apps.cluster.location.aroapp.io/",

Просмотреть файл

@ -218,6 +218,11 @@ func (v *validator) validateWorkerProfile(path string, wp *WorkerProfile, mp *Ma
}
func (v *validator) validateAPIServerProfile(path string, ap *APIServerProfile) error {
switch ap.Visibility {
case VisibilityPublic, VisibilityPrivate:
default:
return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".visibility", "The provided visibility '%s' is invalid.", ap.Visibility)
}
if ap.URL != "" {
if _, err := url.Parse(ap.URL); err != nil {
return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".url", "The provided URL '%s' is invalid.", ap.URL)
@ -241,6 +246,11 @@ func (v *validator) validateIngressProfile(path string, p *IngressProfile) error
if p.Name != "default" {
return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".name", "The provided ingress name '%s' is invalid.", p.Name)
}
switch p.Visibility {
case VisibilityPublic, VisibilityPrivate:
default:
return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, path+".visibility", "The provided visibility '%s' is invalid.", p.Visibility)
}
if p.IP != "" {
ip := net.ParseIP(p.IP)
if ip == nil {

Просмотреть файл

@ -373,6 +373,13 @@ func TestValidateAPIServerProfile(t *testing.T) {
{
name: "valid",
},
{
name: "visibility invalid",
modify: func(oc *OpenShiftCluster) {
oc.Properties.APIServerProfile.Visibility = "invalid"
},
wantErr: "400: InvalidParameter: properties.apiserverProfile.visibility: The provided visibility 'invalid' is invalid.",
},
{
name: "empty url valid",
modify: func(oc *OpenShiftCluster) {
@ -425,6 +432,13 @@ func TestValidateIngressProfile(t *testing.T) {
},
wantErr: "400: InvalidParameter: properties.ingressProfiles[0].name: The provided ingress name 'invalid' is invalid.",
},
{
name: "visibility invalid",
modify: func(oc *OpenShiftCluster) {
oc.Properties.IngressProfiles[0].Visibility = "invalid"
},
wantErr: "400: InvalidParameter: properties.ingressProfiles[0].visibility: The provided visibility 'invalid' is invalid.",
},
{
name: "empty ip valid",
modify: func(oc *OpenShiftCluster) {
@ -506,9 +520,9 @@ func TestOpenShiftClusterValidateDelta(t *testing.T) {
{
name: "apiServer private change",
modify: func(oc *OpenShiftCluster) {
oc.Properties.APIServerProfile.Private = !oc.Properties.APIServerProfile.Private
oc.Properties.APIServerProfile.Visibility = "invalid"
},
wantErr: "400: PropertyChangeNotAllowed: properties.apiserverProfile.private: Changing property 'properties.apiserverProfile.private' is not allowed.",
wantErr: "400: PropertyChangeNotAllowed: properties.apiserverProfile.visibility: Changing property 'properties.apiserverProfile.visibility' is not allowed.",
},
{
name: "apiServer url change",
@ -528,9 +542,9 @@ func TestOpenShiftClusterValidateDelta(t *testing.T) {
{
name: "ingress private change",
modify: func(oc *OpenShiftCluster) {
oc.Properties.IngressProfiles[0].Private = !oc.Properties.IngressProfiles[0].Private
oc.Properties.IngressProfiles[0].Visibility = "invalid"
},
wantErr: "400: PropertyChangeNotAllowed: properties.ingressProfiles[0].private: Changing property 'properties.ingressProfiles[0].private' is not allowed.",
wantErr: "400: PropertyChangeNotAllowed: properties.ingressProfiles[0].visibility: Changing property 'properties.ingressProfiles[0].visibility' is not allowed.",
},
{
name: "ingress ip change",

Просмотреть файл

@ -194,7 +194,7 @@ func (m *Manager) Create(ctx context.Context) error {
},
}
if m.doc.OpenShiftCluster.Properties.IngressProfiles[0].Private {
if m.doc.OpenShiftCluster.Properties.IngressProfiles[0].Visibility == api.VisibilityPrivate {
installConfig.Config.Publish = types.InternalPublishingStrategy
}

Просмотреть файл

@ -50,6 +50,36 @@ func PossibleProvisioningStateValues() []ProvisioningState {
return []ProvisioningState{Creating, Deleting, Failed, Succeeded, Updating}
}
// Visibility enumerates the values for visibility.
type Visibility string
const (
// Private ...
Private Visibility = "Private"
// Public ...
Public Visibility = "Public"
)
// PossibleVisibilityValues returns an array of possible values for the Visibility const type.
func PossibleVisibilityValues() []Visibility {
return []Visibility{Private, Public}
}
// Visibility1 enumerates the values for visibility 1.
type Visibility1 string
const (
// Visibility1Private ...
Visibility1Private Visibility1 = "Private"
// Visibility1Public ...
Visibility1Public Visibility1 = "Public"
)
// PossibleVisibility1Values returns an array of possible values for the Visibility1 const type.
func PossibleVisibility1Values() []Visibility1 {
return []Visibility1{Visibility1Private, Visibility1Public}
}
// VMSize enumerates the values for vm size.
type VMSize string
@ -86,8 +116,8 @@ func PossibleVMSize1Values() []VMSize1 {
// APIServerProfile aPIServerProfile represents an API server profile.
type APIServerProfile struct {
// Private - Expose the API server on a private IP address only (immutable).
Private *bool `json:"private,omitempty"`
// Visibility - API server visibility (immutable). Possible values include: 'Private', 'Public'
Visibility Visibility `json:"visibility,omitempty"`
// URL - The URL to access the cluster API server (immutable).
URL *string `json:"url,omitempty"`
// IP - The IP of the cluster API server (immutable).
@ -140,8 +170,8 @@ type Display struct {
type IngressProfile struct {
// Name - The ingress profile name. Must be "default" (immutable).
Name *string `json:"name,omitempty"`
// Private - Expose the ingress on a private IP address only (immutable).
Private *bool `json:"private,omitempty"`
// Visibility - Ingress visibility (immutable). Possible values include: 'Visibility1Private', 'Visibility1Public'
Visibility Visibility1 `json:"visibility,omitempty"`
// IP - The IP of the ingress (immutable).
IP *string `json:"ip,omitempty"`
}

Просмотреть файл

@ -288,7 +288,7 @@ func (i *Installer) installResources(ctx context.Context) error {
},
APIVersion: apiVersions["network"],
},
i.apiServerPublicLoadBalancer(installConfig.Config.Azure.Region, i.doc.OpenShiftCluster.Properties.APIServerProfile.Private),
i.apiServerPublicLoadBalancer(installConfig.Config.Azure.Region, i.doc.OpenShiftCluster.Properties.APIServerProfile.Visibility),
{
Resource: &mgmtnetwork.LoadBalancer{
Sku: &mgmtnetwork.LoadBalancerSku{
@ -677,7 +677,7 @@ func (i *Installer) installResources(ctx context.Context) error {
{
ipAddress := lbIP.String()
if !i.doc.OpenShiftCluster.Properties.APIServerProfile.Private {
if i.doc.OpenShiftCluster.Properties.APIServerProfile.Visibility == api.VisibilityPublic {
ip, err := i.publicipaddresses.Get(ctx, i.doc.OpenShiftCluster.Properties.ResourceGroup, "aro-pip", "")
if err != nil {
return err

Просмотреть файл

@ -7,10 +7,11 @@ import (
mgmtnetwork "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2019-07-01/network"
"github.com/Azure/go-autorest/autorest/to"
"github.com/Azure/ARO-RP/pkg/api"
"github.com/Azure/ARO-RP/pkg/util/arm"
)
func (i *Installer) apiServerPublicLoadBalancer(location string, private bool) *arm.Resource {
func (i *Installer) apiServerPublicLoadBalancer(location string, visibility api.Visibility) *arm.Resource {
lb := &mgmtnetwork.LoadBalancer{
Sku: &mgmtnetwork.LoadBalancerSku{
Name: mgmtnetwork.LoadBalancerSkuNameStandard,
@ -54,7 +55,7 @@ func (i *Installer) apiServerPublicLoadBalancer(location string, private bool) *
Location: &location,
}
if !private {
if visibility == api.VisibilityPublic {
lb.LoadBalancingRules = &[]mgmtnetwork.LoadBalancingRule{
{
LoadBalancingRulePropertiesFormat: &mgmtnetwork.LoadBalancingRulePropertiesFormat{

Просмотреть файл

@ -7,6 +7,7 @@ from azext_aro._validators import validate_client_secret
from azext_aro._validators import validate_cluster_domain
from azext_aro._validators import validate_resource_name
from azext_aro._validators import validate_subnet
from azext_aro._validators import validate_visibility
from azext_aro._validators import validate_vnet
from azext_aro._validators import validate_vnet_resource_group_name
from azext_aro._validators import validate_worker_count
@ -15,7 +16,6 @@ from azure.cli.core.commands.parameters import name_type
from azure.cli.core.commands.parameters import resource_group_name_type
from azure.cli.core.commands.parameters import tags_type
from azure.cli.core.commands.validators import get_default_location_from_resource_group
from knack.arguments import CLIArgumentType
def load_arguments(self, _):
@ -59,13 +59,13 @@ def load_arguments(self, _):
help='Count of worker VMs.',
validator=validate_worker_count)
c.argument('private_apiserver',
CLIArgumentType(action='store_true'),
help='Private API server.')
c.argument('apiserver_visibility',
help='API server visibility.',
validator=validate_visibility('apiserver_visibility'))
c.argument('private_ingress',
CLIArgumentType(action='store_true'),
help='Private ingress.')
c.argument('ingress_visibility',
help='Ingress visibility.',
validator=validate_visibility('ingress_visibility'))
c.argument('vnet_resource_group_name',
resource_group_name_type,

Просмотреть файл

@ -154,6 +154,17 @@ def validate_subnets(master_subnet, worker_subnet):
)
def validate_visibility(key):
def _validate_visibility(namespace):
visibility = getattr(namespace, key)
if visibility is not None:
if visibility not in ["Private", "Public"]:
raise CLIError("Invalid --%s '%s'." %
(key.replace('_', '-'), visibility))
return _validate_visibility
def validate_vnet(cmd, namespace):
validate_vnet_resource_group_name(namespace)

Просмотреть файл

@ -35,8 +35,8 @@ def aro_create(cmd, # pylint: disable=too-many-locals
worker_vm_size=None,
worker_vm_disk_size_gb=None,
worker_count=None,
private_apiserver=None,
private_ingress=None,
apiserver_visibility=None,
ingress_visibility=None,
tags=None,
no_wait=False):
vnet = validate_subnets(master_subnet, worker_subnet)
@ -89,12 +89,12 @@ def aro_create(cmd, # pylint: disable=too-many-locals
)
],
apiserver_profile=v2019_12_31_preview.APIServerProfile(
private=private_apiserver or False,
visibility=apiserver_visibility or "Public",
),
ingress_profiles=[
v2019_12_31_preview.IngressProfile(
name="default", # TODO: "default" should not be hard-coded
private=private_ingress or False,
visibility=ingress_visibility or "Public",
)
],
)

Просмотреть файл

@ -26,9 +26,10 @@ from msrest.exceptions import HttpOperationError
class APIServerProfile(Model):
"""APIServerProfile represents an API server profile.
:param private: Expose the API server on a private IP address only
(immutable).
:type private: bool
:param visibility: API server visibility (immutable). Possible values
include: 'Private', 'Public'
:type visibility: str or
~azure.mgmt.redhatopenshift.v2019_12_31_preview.models.enum
:param url: The URL to access the cluster API server (immutable).
:type url: str
:param ip: The IP of the cluster API server (immutable).
@ -36,14 +37,14 @@ class APIServerProfile(Model):
"""
_attribute_map = {
'private': {'key': 'private', 'type': 'bool'},
'visibility': {'key': 'visibility', 'type': 'str'},
'url': {'key': 'url', 'type': 'str'},
'ip': {'key': 'ip', 'type': 'str'},
}
def __init__(self, **kwargs):
super(APIServerProfile, self).__init__(**kwargs)
self.private = kwargs.get('private', None)
self.visibility = kwargs.get('visibility', None)
self.url = kwargs.get('url', None)
self.ip = kwargs.get('ip', None)
@ -216,23 +217,24 @@ class IngressProfile(Model):
:param name: The ingress profile name. Must be "default" (immutable).
:type name: str
:param private: Expose the ingress on a private IP address only
(immutable).
:type private: bool
:param visibility: Ingress visibility (immutable). Possible values
include: 'Private', 'Public'
:type visibility: str or
~azure.mgmt.redhatopenshift.v2019_12_31_preview.models.enum
:param ip: The IP of the ingress (immutable).
:type ip: str
"""
_attribute_map = {
'name': {'key': 'name', 'type': 'str'},
'private': {'key': 'private', 'type': 'bool'},
'visibility': {'key': 'visibility', 'type': 'str'},
'ip': {'key': 'ip', 'type': 'str'},
}
def __init__(self, **kwargs):
super(IngressProfile, self).__init__(**kwargs)
self.name = kwargs.get('name', None)
self.private = kwargs.get('private', None)
self.visibility = kwargs.get('visibility', None)
self.ip = kwargs.get('ip', None)

Просмотреть файл

@ -26,9 +26,10 @@ from msrest.exceptions import HttpOperationError
class APIServerProfile(Model):
"""APIServerProfile represents an API server profile.
:param private: Expose the API server on a private IP address only
(immutable).
:type private: bool
:param visibility: API server visibility (immutable). Possible values
include: 'Private', 'Public'
:type visibility: str or
~azure.mgmt.redhatopenshift.v2019_12_31_preview.models.enum
:param url: The URL to access the cluster API server (immutable).
:type url: str
:param ip: The IP of the cluster API server (immutable).
@ -36,14 +37,14 @@ class APIServerProfile(Model):
"""
_attribute_map = {
'private': {'key': 'private', 'type': 'bool'},
'visibility': {'key': 'visibility', 'type': 'str'},
'url': {'key': 'url', 'type': 'str'},
'ip': {'key': 'ip', 'type': 'str'},
}
def __init__(self, *, private: bool=None, url: str=None, ip: str=None, **kwargs) -> None:
def __init__(self, *, visibility=None, url: str=None, ip: str=None, **kwargs) -> None:
super(APIServerProfile, self).__init__(**kwargs)
self.private = private
self.visibility = visibility
self.url = url
self.ip = ip
@ -216,23 +217,24 @@ class IngressProfile(Model):
:param name: The ingress profile name. Must be "default" (immutable).
:type name: str
:param private: Expose the ingress on a private IP address only
(immutable).
:type private: bool
:param visibility: Ingress visibility (immutable). Possible values
include: 'Private', 'Public'
:type visibility: str or
~azure.mgmt.redhatopenshift.v2019_12_31_preview.models.enum
:param ip: The IP of the ingress (immutable).
:type ip: str
"""
_attribute_map = {
'name': {'key': 'name', 'type': 'str'},
'private': {'key': 'private', 'type': 'bool'},
'visibility': {'key': 'visibility', 'type': 'str'},
'ip': {'key': 'ip', 'type': 'str'},
}
def __init__(self, *, name: str=None, private: bool=None, ip: str=None, **kwargs) -> None:
def __init__(self, *, name: str=None, visibility=None, ip: str=None, **kwargs) -> None:
super(IngressProfile, self).__init__(**kwargs)
self.name = name
self.private = private
self.visibility = visibility
self.ip = ip

Просмотреть файл

@ -33,12 +33,12 @@
}
],
"apiserverProfile": {
"private": true
"visibility": "Public"
},
"ingressProfiles": [
{
"name": "default",
"private": true
"visibility": "Public"
}
]
}
@ -78,14 +78,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],
@ -126,14 +126,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],

Просмотреть файл

@ -39,14 +39,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],

Просмотреть файл

@ -39,14 +39,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],

Просмотреть файл

@ -40,14 +40,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],

Просмотреть файл

@ -33,12 +33,12 @@
}
],
"apiserverProfile": {
"private": true
"visibility": "Public"
},
"ingressProfiles": [
{
"name": "default",
"private": true
"visibility": "Public"
}
]
}
@ -78,14 +78,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],
@ -126,14 +126,14 @@
}
],
"apiserverProfile": {
"private": true,
"visibility": "Public",
"url": "https://api.cluster.location.aroapp.io:6443/",
"ip": "1.2.3.4"
},
"ingressProfiles": [
{
"name": "default",
"private": true,
"visibility": "Public",
"ip": "1.2.3.4"
}
],

Просмотреть файл

@ -394,9 +394,9 @@
"APIServerProfile": {
"description": "APIServerProfile represents an API server profile.",
"properties": {
"private": {
"description": "Expose the API server on a private IP address only (immutable).",
"type": "boolean"
"visibility": {
"$ref": "#/definitions/Visibility",
"description": "API server visibility (immutable)."
},
"url": {
"description": "The URL to access the cluster API server (immutable).",
@ -469,9 +469,9 @@
"description": "The ingress profile name. Must be \"default\" (immutable).",
"type": "string"
},
"private": {
"description": "Expose the ingress on a private IP address only (immutable).",
"type": "boolean"
"visibility": {
"$ref": "#/definitions/Visibility",
"description": "Ingress visibility (immutable)."
},
"ip": {
"description": "The IP of the ingress (immutable).",
@ -670,6 +670,14 @@
],
"type": "string"
},
"Visibility": {
"description": "Visibility represents visibility.",
"enum": [
"Private",
"Public"
],
"type": "string"
},
"WorkerProfile": {
"description": "WorkerProfile represents a worker profile.",
"properties": {