Package entity contains type definitions for Kublr.
AWSAPIAccessKeySpec defines AWS Access Key and Secret Key.
type AWSAPIAccessKeySpec struct {
AccessKeyID string `json:"accessKeyId" yaml:"accessKeyId"`
SecretAccessKey string `json:"secretAccessKey" yaml:"secretAccessKey"`
// AWS session token
// Since version 1.24
SessionToken string `json:"sessionToken,omitempty" yaml:"sessionToken,omitempty"`
// Partition AWS partition
// Since version 1.20
Partition string `json:"partition,omitempty" yaml:"partition,omitempty"`
}
AWSAvailabilityZoneCloudFormationExtrasSpec overrides, customizations, and additional properties for Kublr-generated CloudFormation template and CloudFormation template resources for a specific AZ Since version 1.24
type AWSAvailabilityZoneCloudFormationExtrasSpec struct {
// NatGateway overrides and extended properties for NAT Gateway in this AZ
NatGateway interface{} `json:"natGateway,omitempty" yaml:"natGateway,omitempty"`
// NatGatewayElasticIP overrides and extended properties for the NAT Gateway EIP in this AZ
NatGatewayElasticIP interface{} `json:"natGatewayElasticIP,omitempty" yaml:"natGatewayElasticIP,omitempty"`
// RouteTablePrivate overrides and extended properties for the private route table in this AZ
RouteTablePrivate interface{} `json:"routeTablePrivate,omitempty" yaml:"routeTablePrivate,omitempty"`
// RouteTablePrivateRouteToInternet overrides and extended properties for the private internet Route AWS resources in this AZ
RouteTablePrivateRouteToInternet interface{} `json:"routeTablePrivateRouteToInternet,omitempty" yaml:"routeTablePrivateRouteToInternet,omitempty"`
// Subnet overrides and extended properties for all subnets in this AZ
Subnet interface{} `json:"subnet,omitempty" yaml:"subnet,omitempty"`
// SubnetRouteTableAssociation overrides and extended properties for all subnets route table associations in this AZ;
// currently only routeTableAssociation.Properties.RouteTableId override makes sense.
SubnetRouteTableAssociation interface{} `json:"subnetRouteTableAssociation,omitempty" yaml:"subnetRouteTableAssociation,omitempty"`
}
AWSBlockDeviceMapping object for instance groups
type AWSBlockDeviceMapping struct {
// DeviceName specifies name of the device within Amazon EC2
DeviceName *string `json:"deviceName,omitempty" yaml:"deviceName,omitempty"`
// Ebs is Elastic Block Storage volume information.
Ebs *AWSEbsVolumeSpec `json:"ebs,omitempty" yaml:"ebs,omitempty"`
// NoDevice suppresses the device mapping.
NoDevice *bool `json:"noDevice,omitempty" yaml:"noDevice,omitempty"`
// VirtualName is virtual name associated with the device.
VirtualName *string `json:"virtualName,omitempty" yaml:"virtualName,omitempty"`
}
AWSCloudWatchLogSinkSpec is a spec for log sink in AWS CloudWatch.
type AWSCloudWatchLogSinkSpec struct {
// Enabled indicates if this sink is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
}
AWSEbsVolumeSpec is a spec for EBS volume.
type AWSEbsVolumeSpec struct {
// Type specifies type of the volume. See EBS Volume Types.
Type *string `json:"type,omitempty" yaml:"type,omitempty"`
// Size determines size of the volume, in GBs.
Size *int64 `json:"size,omitempty" yaml:"size,omitempty"`
// Iops specifies required iops for the volume. Valiod only for Volume type with provisioned iops.
Iops *int64 `json:"iops,omitempty" yaml:"iops,omitempty"`
// Encrypted flag indicates if EBS volume should be encrypted.
Encrypted *bool `json:"encrypted,omitempty" yaml:"encrypted,omitempty"`
// KmsKeyID The Amazon Resource Name (ARN) of the AWS Key Management Service master key that is used to create the
// encrypted volume, such as arn:aws:kms:us-east-1:012345678910:key/abcd1234-a123-456a-a12b-a123b4cd56ef.
// If you create an encrypted volume and don’t specify this property, AWS CloudFormation uses the default master key.
//+optional
KmsKeyID interface{} `json:"kmsKeyId,omitempty" yaml:"kmsKeyId,omitempty"`
// SnapshotID is AWS Snapshot ID to create EBS volume from
SnapshotID interface{} `json:"snapshotId,omitempty" yaml:"snapshotId,omitempty" bson:"snapshotId,omitempty"`
// DeleteOnTermination property for ASG EBS mapping volumes
DeleteOnTermination *bool `json:"deleteOnTermination,omitempty" yaml:"deleteOnTermination,omitempty"`
}
AWSEipAllocationPolicyEnum -
type AWSEipAllocationPolicyEnum string
AWSInstanceGroupLocationCloudFormationExtrasSpec optional overrides, customizations, and additional properties for Kublr-generated CloudFormation template and CloudFormation template resources Since version 1.24
type AWSInstanceGroupLocationCloudFormationExtrasSpec struct {
// MasterEBS overrides and extended properties for master etcd EBS common for all masters (ignored for non-master groups)
MasterEBS interface{} `json:"masterEBS,omitempty" yaml:"masterEBS,omitempty"`
// MasterEBSByOrdinal overrides and extended properties for master etcd EBS specific to each master (ignored for non-master groups)
MasterEBSByOrdinal []interface{} `json:"masterEBSByOrdinal,omitempty" yaml:"masterEBSByOrdinal,omitempty"`
// AutoScalingGroup overrides and extended properties for the group ASG
AutoScalingGroup interface{} `json:"autoScalingGroup,omitempty" yaml:"autoScalingGroup,omitempty"`
// LaunchConfiguration overrides and extended properties for the group LaunchConfiguration (if available)
LaunchConfiguration interface{} `json:"launchConfiguration,omitempty" yaml:"launchConfiguration,omitempty"`
// LaunchTemplate overrides and extended properties for the group LaunchTemplate (if available)
LaunchTemplate interface{} `json:"launchTemplate,omitempty" yaml:"launchTemplate,omitempty"`
// ElasticIP overrides and extended properties for the group Elastic IPs (if available).
// This resource is created for masters or for stateful groups that use public IPs as public stable entry points.
ElasticIP interface{} `json:"elasticIP,omitempty" yaml:"elasticIP,omitempty"`
}
AWSInstanceGroupLocationSpec is a spec for instance group location in AWS. It maps to auto-scaling group with a launch configuration.
type AWSInstanceGroupLocationSpec struct {
// GroupType is a type of underlying structure supporting this group.
// Currently 'asg' and 'elastigroup' are supported;
// default value is 'asg'
GroupType *AWSInstanceGroupLocationSpecGroupTypeEnum `json:"groupType,omitempty" yaml:"groupType,omitempty" bson:"groupType"`
// SSHKey is a name of AWS SSH Key Pair used to access instances in the group.
SSHKey *string `json:"sshKey,omitempty" yaml:"sshKey,omitempty"`
// PinToZone is 'pin' if instances must be pinned to a single AZ from the list, or 'span' if no pinning is necessary.
// 'default' is the same as 'pin' for stateful groups and 'span' for stateless.
PinToZone *InstanceGroupLocationSpecPinToZoneTypeEnum `json:"pinToZone,omitempty" yaml:"pinToZone,omitempty"`
// AvailabilityZones is list of AZs that can be used in the location.
// If omitted, generator will automatically assign it to all available zones.
//+optional
AvailabilityZones []*string `valid:"required" json:"availabilityZones,omitempty" yaml:"availabilityZones,omitempty"`
InstanceType *string `json:"instanceType,omitempty" yaml:"instanceType,omitempty"`
OverrideImageID *string `json:"overrideImageId,omitempty" yaml:"overrideImageId,omitempty"`
ImageID *string `json:"imageId,omitempty" yaml:"imageId,omitempty"`
ImageRootDeviceName *string `json:"imageRootDeviceName,omitempty" yaml:"imageRootDeviceName,omitempty"`
RootVolume *AWSEbsVolumeSpec `json:"rootVolume,omitempty" yaml:"rootVolume,omitempty"`
MasterVolume *AWSEbsVolumeSpec `json:"masterVolume,omitempty" yaml:"masterVolume,omitempty"`
// MasterNlbAllocationPolicy allocation policy for master NLB.
//
// Allowed values: 'none', 'private', 'public', 'privateAndPublic', 'auto' ('public' for multi-master,
// and 'none' for single-master), or 'default' (same as 'auto', deprecated)
//
// By default (value empty):
// - set to 'auto' for new clusters created by Kublr 1.20+
// - set to 'none' for clusters created before Kublr 1.20 and updated in in Kublr 1.20+
//
// The property is ignored in non-master instance groups.
//
// Since version 1.20
MasterNlbAllocationPolicy *MasterLBAllocationPolicyEnum `json:"masterNlbAllocationPolicy,omitempty" yaml:"masterNlbAllocationPolicy,omitempty"`
// MasterElbAllocationPolicy allocation policy for master NLB.
//
// Allowed values: 'none', 'private', 'public', 'privateAndPublic', 'auto' ('public' for multi-master,
// and 'none' for single-master), or 'default' (same as 'auto', deprecated)
//
// By default (value empty):
// - set to 'none' for new clusters created by Kublr 1.20 and later
// - set to 'auto' for clusters created before Kublr 1.20 and updated in in Kublr 1.20+
//
// The property is ignored in non-master instance groups.
//
//+deprecated use NLB instead of ELB
MasterElbAllocationPolicy *MasterLBAllocationPolicyEnum `json:"masterElbAllocationPolicy,omitempty" yaml:"masterElbAllocationPolicy,omitempty"`
// MasterEipAllocationPolicy master EIP allocation policy: 'default' ('none' for multi-master, and 'public' for single-master), 'none', or 'public'.
//
// The property is ignored in non-master instance groups.
//
//+deprecated the property is ignored if `eipAllocationPolicy` is defined, use `eipAllocationPolicy` instead
MasterEipAllocationPolicy *AWSEipAllocationPolicyEnum `json:"masterEipAllocationPolicy,omitempty" yaml:"masterEipAllocationPolicy,omitempty"`
// NodeIPAllocationPolicy is Instance IP allocation policy - 'default' (same as 'privateAndPublic'), 'private', or 'privateAndPublic'.
NodeIPAllocationPolicy *NodeIPAllocationPolicyEnum `json:"nodeIpAllocationPolicy,omitempty" yaml:"nodeIpAllocationPolicy,omitempty"`
// EipAllocationPolicy Groups EIP allocation policy - 'default', 'none', or 'public'.
//
// 'default' means:
// - 'none' for multi-master groups (note that master groups are always stateful)
// - 'none' for single-master groups with nodeIpAllocationPolicy==='private'
// - 'public' for single-master groups with nodeIpAllocationPolicy!=='private'
// - 'none' for stateful node groups with nodeIpAllocationPolicy==='private'
// - 'public' for stateful node groups with nodeIpAllocationPolicy!=='private'
// - 'none' for non-stateful node groups
//
// Constraints:
// - eipAllocationPolicy may not be 'public' if nodeIpAllocationPolicy==='private'
// - eipAllocationPolicy may not be 'public' if the group is not stateful
EipAllocationPolicy *AWSEipAllocationPolicyEnum `json:"eipAllocationPolicy,omitempty" yaml:"eipAllocationPolicy,omitempty"`
// InstanceMonitoring controls whether instances in this group are launched with detailed monitoring or not.
// detailed monitoring for EC2 instances by default will be disabled
// default value 'false'
// Do not set omitempty flag because it affects behavior.
InstanceMonitoring *bool `json:"instanceMonitoring,omitempty" yaml:"instanceMonitoring,omitempty"`
// Cooldown AWS AutoScalingGroup parameter
Cooldown *string `json:"cooldown,omitempty" yaml:"cooldown,omitempty"`
// LoadBalancerNames names of additional load balancers to associate with the instance group's
// autoscaling group
LoadBalancerNames []interface{} `json:"loadBalancerNames,omitempty" yaml:"loadBalancerNames,omitempty"`
// TargetGroupARNs ARNs of the target groups to associate with the instance group's autoscaling group
TargetGroupARNs []interface{} `json:"targetGroupARNs,omitempty" yaml:"targetGroupARNs,omitempty"`
// AWS LaunchConfiguration parameters:
// - BlockDeviceMappings
// - EbsOptimized
// - InstanceMonitoring
// - PlacementTenancy
// - SpotPrice
BlockDeviceMappings []*AWSBlockDeviceMapping `json:"blockDeviceMappings,omitempty" yaml:"blockDeviceMappings,omitempty"`
// EbsOptimized specifies whether the instance is optimized for Amazon EBS I/O
EbsOptimized *bool `json:"ebsOptimized,omitempty" yaml:"ebsOptimized,omitempty"`
// PlacementTenancy specifies the tenancy of the instance. It can be either default or dedicated.
PlacementTenancy *string `json:"placementTenancy,omitempty" yaml:"placementTenancy,omitempty"`
// SpotPrice specifies the price to bid when launching Spot Instances.
SpotPrice *string `json:"spotPrice,omitempty" yaml:"spotPrice,omitempty"`
// SubnetIds IDs of subnets to be used for this instance group.
//
// If omitted, subnets will be created to accommodate this instance group, otherwise corresponding autoscaling group
// will be assigned to the specified subnets.
//
// Subnets must be specified corresponding to each AZ in availabilityZones array, so that for example, if
// `availabilityZones == ['us-east1a', 'us-east-1c', 'us-east-1d']` and
// `subnetIds == ['subnet1', '', 'subnet3']`, then generator will assume that `subnet1` exist in AZ `us-east-1a`,
// `subnet3` exists in `us-east-1d`, and it will create a new subnet in `us-east-1c`.
//
// Note also that if a subnet id is specified in a certain position of `subnetIds` array, a correct
// AZ in which this subnet is located MUST also be specified in corresponding position of `availabilityZones`
// array.
//
// SubnetIds values may be string IDs of specific subnets, or objects allowed for inclusion into
// a Cloudformation stack templates, such as `{ Ref: MySubnet }`
SubnetIds []interface{} `json:"subnetIds,omitempty" yaml:"subnetIds,omitempty"`
// PrivateMasterPublicLbSubnetIds IDs of subnets to use for public ELB and/or NLB of private master instances.
//
// If omitted, subnets will be created when necessary.
//
// These subnets are only necessary for public ELB and/or NLB to have access to private masters.
// This property will be ignored in any other situation (e.g. this is a non-master group, or the group is
// public, or no public ELB or NLB is needed).
//
// privateMasterPublicLbSubnetIds values may be string IDs of specific subnets, or objects allowed for inclusion into
// a Cloudformation stack templates, such as `{ Ref: MySubnet }`
//
// Note also that if a subnet ID is specified in a certain position of `privateMasterPublicLbSubnetIds` array,
// a correct AZ in which this subnet is located MUST also be specified in corresponding position of
// `availabilityZones` array.
//
// Since version 1.20
PrivateMasterPublicLbSubnetIds []interface{} `json:"privateMasterPublicLbSubnetIds,omitempty" yaml:"privateMasterPublicLbSubnetIds,omitempty"`
// ExistingSecurityGroupIds are in addition to security groups specified in `existingSecurityGroupIds`
// property in `AWSLocationSpec` object.
//
// GroupId of existing security groups that need to be added to this node group instances.
// These security groups are in addition to security groups specified in `existingSecurityGroupIds`
// property in `AWSLocationSpec` object.
//
// existingSecurityGroupIds values may be string IDs of specific security groups, or objects
// allowed for inclusion into a Cloudformation stack templates, such as `{ Ref: MySG }`
ExistingSecurityGroupIds []interface{} `json:"existingSecurityGroupIds,omitempty" yaml:"existingSecurityGroupIds,omitempty"`
// Elastigroup is a specification of elastigroup.
//+optional if groupType != 'elastigroup'
Elastigroup *ElastigroupSpec `json:"elastigroup,omitempty" yaml:"elastigroup,omitempty"`
// ASGCloudFormationExtras additional AWS specific parameters for ASG
//+deprecated since version 1.24, use cloudFormationExtras.autoScalingGroup instead
ASGCloudFormationExtras StringMap `json:"asgCloudFormationExtras,omitempty" yaml:"asgCloudFormationExtras,omitempty"`
// ASGPropertiesCloudFormationExtras additional AWS specific parameters for ASG
//+deprecated since version 1.24, use cloudFormationExtras.autoScalingGroup.Properties instead
ASGPropertiesCloudFormationExtras StringMap `json:"asgPropertiesCloudFormationExtras,omitempty" yaml:"asgPropertiesCloudFormationExtras,omitempty"`
// LaunchConfigurationPropertiesCloudFormationExtras additional AWS specific parameters for LaunchConfiguration
//+deprecated since version 1.24, use cloudFormationExtras.launchConfiguration.Properties instead
LaunchConfigurationPropertiesCloudFormationExtras StringMap `json:"launchConfigurationPropertiesCloudFormationExtras,omitempty" yaml:"launchConfigurationPropertiesCloudFormationExtras,omitempty"`
// LaunchTemplateDataCloudFormationExtras additional AWS specific parameters for LaunchTemplate
//+deprecated since version 1.24, use cloudFormationExtras.launchTemplate.Properties.LaunchTemplateData instead
LaunchTemplateDataCloudFormationExtras StringMap `json:"launchTemplateDataCloudFormationExtras,omitempty" yaml:"launchTemplateDataCloudFormationExtras,omitempty"`
// MixedInstancesPolicyCloudFormationExtras additional AWS specific parameters for LaunchTemplate
//+deprecated since version 1.24, use cloudFormationExtras.autoScalingGroup.Properties.MixedInstancesPolicy instead
MixedInstancesPolicyCloudFormationExtras StringMap `json:"mixedInstancesPolicyCloudFormationExtras,omitempty" yaml:"mixedInstancesPolicyCloudFormationExtras,omitempty"`
// CloudFormationExtras optional overrides, customizations, and additional properties for Kublr-generated CloudFormation template and
// CloudFormation template resources
// Since version 1.24
//+optional
CloudFormationExtras *AWSInstanceGroupLocationCloudFormationExtrasSpec `json:"cloudFormationExtras,omitempty" yaml:"cloudFormationExtras,omitempty"`
}
AWSInstanceGroupLocationSpecGroupTypeEnum defines type of Instance Group in AWS.
type AWSInstanceGroupLocationSpecGroupTypeEnum string
AWSLocationAvailabilityZoneSpec specifies Kublr generator behavior for resources created within an AZ (such as subnets for example)
type AWSLocationAvailabilityZoneSpec struct {
// specify Kublr generator behavior for subnets of different type created with an AZ
SubnetMasterPublic *AWSSubnetSpec `json:"subnetMasterPublic,omitempty" yaml:"subnetMasterPublic,omitempty"`
SubnetMasterPrivate *AWSSubnetSpec `json:"subnetMasterPrivate,omitempty" yaml:"subnetMasterPrivate,omitempty"`
SubnetNodePublic *AWSSubnetSpec `json:"subnetNodePublic,omitempty" yaml:"subnetNodePublic,omitempty"`
SubnetNodePrivate *AWSSubnetSpec `json:"subnetNodePrivate,omitempty" yaml:"subnetNodePrivate,omitempty"`
SubnetOtherPublic *AWSSubnetSpec `json:"subnetOtherPublic,omitempty" yaml:"subnetOtherPublic,omitempty"`
// CloudFormationExtras optional overrides, customizations, and additional properties for Kublr-generated
// CloudFormation template and CloudFormation template resources for a specific AZ
// Since version 1.24
CloudFormationExtras *AWSAvailabilityZoneCloudFormationExtrasSpec `json:"cloudFormationExtras,omitempty" yaml:"cloudFormationExtras,omitempty"`
}
AWSLocationAvailabilityZoneSubnetServiceLoadBalancerPolicyEnum defines load balancer tagging policy
type AWSLocationAvailabilityZoneSubnetServiceLoadBalancerPolicyEnum string
AWSLocationCloudFormationExtrasSpec optional overrides, customizations, and additional properties for Kublr-generated CloudFormation template and CloudFormation template resources Since version 1.24
type AWSLocationCloudFormationExtrasSpec struct {
// Resources map of additional CloudFormation AWS resources to include in the CloudFormation stack template
Resources StringMap `json:"resources,omitempty" yaml:"resources,omitempty"`
// Tags array of additional tags common for all resources in the CloudFormation stack template.
// Note that these additional tags are not automatically added to additional AWS resources
// specified in the 'resources' property.
Tags []AWSTagSpec `json:"tags,omitempty" yaml:"tags,omitempty"`
// Vpc overrides and extended properties for the VPC AWS resource in this location
Vpc interface{} `json:"vpc,omitempty" yaml:"vpc,omitempty"`
// VpcDhcpOptions overrides and extended properties for the VPC DHCPOptions AWS resource in this location
VpcDhcpOptions interface{} `json:"vpcDhcpOptions,omitempty" yaml:"vpcDhcpOptions,omitempty"`
// VpcDhcpOptionsAssociation overrides and extended properties for the VPC DHCPOptionsAssociation AWS resource in this location
VpcDhcpOptionsAssociation interface{} `json:"vpcDhcpOptionsAssociation,omitempty" yaml:"vpcDhcpOptionsAssociation,omitempty"`
// SecurityGroupDefault overrides and extended properties for the default SecurityGroup AWS resource created by Kublr in this location; note that this will only affect the security group created by Kublr for an existing (non-Kublr-created) VPC. If Kublr creates a new VPC (this is the default mode), the default VPC SecurityGroup is created automatically by AWS, and this override property is not used.
SecurityGroupDefault interface{} `json:"securityGroupDefault,omitempty" yaml:"securityGroupDefault,omitempty"`
// SecurityGroupMaster overrides and extended properties for the master nodes SecurityGroup AWS resource in this location
SecurityGroupMaster interface{} `json:"securityGroupMaster,omitempty" yaml:"securityGroupMaster,omitempty"`
// SecurityGroupNode overrides and extended properties for the worker nodes SecurityGroup AWS resource in this location
SecurityGroupNode interface{} `json:"securityGroupNode,omitempty" yaml:"securityGroupNode,omitempty"`
// SecurityGroupRuleByName overrides and extended properties for the SecurityGroupIngress and SecurityGroupEgress AWS resources in this location
SecurityGroupRuleByName interface{} `json:"securityGroupRuleByName,omitempty" yaml:"securityGroupRuleByName,omitempty"`
// Subnet overrides and extended properties common for all Subnet AWS resources in this location
Subnet interface{} `json:"subnet,omitempty" yaml:"subnet,omitempty"`
// SubnetRouteTableAssociation overrides and extended properties for all the subnets route table associations in this location; currently only routeTableAssociation.Properties.RouteTableId override makes sense.
SubnetRouteTableAssociation interface{} `json:"subnetRouteTableAssociation,omitempty" yaml:"subnetRouteTableAssociation,omitempty"`
// MasterElbPrivate overrides and extended properties for the master private ELB AWS resource in this location
MasterElbPrivate interface{} `json:"masterElbPrivate,omitempty" yaml:"masterElbPrivate,omitempty"`
// MasterElbPrivateListener overrides and extended properties for the listener of the master private ELB AWS resource in this location
MasterElbPrivateListener interface{} `json:"masterElbPrivateListener,omitempty" yaml:"masterElbPrivateListener,omitempty"`
// MasterElbPrivateSecurityGroup overrides and extended properties for the master private ELB SecurityGroup AWS resource in this location
MasterElbPrivateSecurityGroup interface{} `json:"masterElbPrivateSecurityGroup,omitempty" yaml:"masterElbPrivateSecurityGroup,omitempty"`
// MasterElbPrivateSecurityGroupIngress overrides and extended properties for the master private ELB SecurityGroup Ingress rules AWS resource in this location
MasterElbPrivateSecurityGroupIngress interface{} `json:"masterElbPrivateSecurityGroupIngress,omitempty" yaml:"masterElbPrivateSecurityGroupIngress,omitempty"`
// MasterElbPrivateSecurityGroupEgress overrides and extended properties for the master private ELB SecurityGroup Egress rules AWS resource in this location
MasterElbPrivateSecurityGroupEgress interface{} `json:"masterElbPrivateSecurityGroupEgress,omitempty" yaml:"masterElbPrivateSecurityGroupEgress,omitempty"`
// MasterElbPublic overrides and extended properties for the master public ELB AWS resource in this location
MasterElbPublic interface{} `json:"masterElbPublic,omitempty" yaml:"masterElbPublic,omitempty"`
// MasterElbPublicListener overrides and extended properties for the listener of the master public ELB AWS resource in this location
MasterElbPublicListener interface{} `json:"masterElbPublicListener,omitempty" yaml:"masterElbPublicListener,omitempty"`
// MasterElbPublicSecurityGroup overrides and extended properties for the master public ELB SecurityGroup AWS resource in this location
MasterElbPublicSecurityGroup interface{} `json:"masterElbPublicSecurityGroup,omitempty" yaml:"masterElbPublicSecurityGroup,omitempty"`
// MasterElbPublicSecurityGroupIngress overrides and extended properties for the master public ELB SecurityGroup Ingress rules AWS resource in this location
MasterElbPublicSecurityGroupIngress interface{} `json:"masterElbPublicSecurityGroupIngress,omitempty" yaml:"masterElbPublicSecurityGroupIngress,omitempty"`
// MasterElbPublicSecurityGroupEgress overrides and extended properties for the master public ELB SecurityGroup Egress rules AWS resource in this location
MasterElbPublicSecurityGroupEgress interface{} `json:"masterElbPublicSecurityGroupEgress,omitempty" yaml:"masterElbPublicSecurityGroupEgress,omitempty"`
// MasterNlbPrivate overrides and extended properties for the master private NLB AWS resource in this location
MasterNlbPrivate interface{} `json:"masterNlbPrivate,omitempty" yaml:"masterNlbPrivate,omitempty"`
// MasterNlbPrivateListener overrides and extended properties for the master private NLB Listener AWS resource in this location
MasterNlbPrivateListener interface{} `json:"masterNlbPrivateListener,omitempty" yaml:"masterNlbPrivateListener,omitempty"`
// MasterNlbPrivateListenerDefaultAction overrides and extended properties for the default action of the master private NLB Listener AWS resource in this location
MasterNlbPrivateListenerDefaultAction interface{} `json:"masterNlbPrivateListenerDefaultAction,omitempty" yaml:"masterNlbPrivateListenerDefaultAction,omitempty"`
// MasterNlbPrivateTargetGroup overrides and extended properties for the master private NLB Target Group AWS resource in this location
MasterNlbPrivateTargetGroup interface{} `json:"masterNlbPrivateTargetGroup,omitempty" yaml:"masterNlbPrivateTargetGroup,omitempty"`
// MasterNlbPublic overrides and extended properties for the master public NLB AWS resource in this location
MasterNlbPublic interface{} `json:"masterNlbPublic,omitempty" yaml:"masterNlbPublic,omitempty"`
// MasterNlbPublicListener overrides and extended properties for the master public NLB Listener AWS resource in this location
MasterNlbPublicListener interface{} `json:"masterNlbPublicListener,omitempty" yaml:"masterNlbPublicListener,omitempty"`
// MasterNlbPublicListenerDefaultAction overrides and extended properties for the default action of the master public NLB Listener AWS resource in this location
MasterNlbPublicListenerDefaultAction interface{} `json:"masterNlbPublicListenerDefaultAction,omitempty" yaml:"masterNlbPublicListenerDefaultAction,omitempty"`
// MasterNlbPublicTargetGroup overrides and extended properties for the master public NLB Target Group AWS resource in this location
MasterNlbPublicTargetGroup interface{} `json:"masterNlbPublicTargetGroup,omitempty" yaml:"masterNlbPublicTargetGroup,omitempty"`
// IamRoleMaster overrides and extended properties for Kublr-generated master IAM role AWS resource
IamRoleMaster interface{} `json:"iamRoleMaster,omitempty" yaml:"iamRoleMaster,omitempty"`
// IamProfileMaster overrides and extended properties for Kublr-generated master IAM profile AWS resource
IamProfileMaster interface{} `json:"iamProfileMaster,omitempty" yaml:"iamProfileMaster,omitempty"`
// IamRoleNode overrides and extended properties for Kublr-generated node IAM role AWS resource
IamRoleNode interface{} `json:"iamRoleNode,omitempty" yaml:"iamRoleNode,omitempty"`
// IamProfileNode overrides and extended properties for Kublr-generated node IAM profile AWS resource
IamProfileNode interface{} `json:"iamProfileNode,omitempty" yaml:"iamProfileNode,omitempty"`
// LogGroup overrides and extended properties for Kublr-generated log group AWS resource
LogGroup interface{} `json:"logGroup,omitempty" yaml:"logGroup,omitempty"`
// InternetGateway overrides and extended properties for the InternetGateway AWS resource in this location
InternetGateway interface{} `json:"internetGateway,omitempty" yaml:"internetGateway,omitempty"`
// VpcGatewayAttachment overrides and extended properties for the VPCGatewayAttachment AWS resource in this location
VpcGatewayAttachment interface{} `json:"vpcGatewayAttachment,omitempty" yaml:"vpcGatewayAttachment,omitempty"`
// RouteTablePublic overrides and extended properties for the public Route Table AWS resource in this location
RouteTablePublic interface{} `json:"routeTablePublic,omitempty" yaml:"routeTablePublic,omitempty"`
// RouteTablePublicRouteToInternet overrides and extended properties for the public internet Route AWS resource in this location
RouteTablePublicRouteToInternet interface{} `json:"routeTablePublicRouteToInternet,omitempty" yaml:"routeTablePublicRouteToInternet,omitempty"`
// NatGateway overrides and extended properties common for all the NatGateway AWS resources in this location
NatGateway interface{} `json:"natGateway,omitempty" yaml:"natGateway,omitempty"`
// NatGatewayElasticIP overrides and extended properties common for all the Nat gateway EIP AWS resources in this location
NatGatewayElasticIP interface{} `json:"natGatewayElasticIP,omitempty" yaml:"natGatewayElasticIP,omitempty"`
// RouteTablePrivate overrides and extended properties common for all the private Route Table AWS resources in this location
RouteTablePrivate interface{} `json:"routeTablePrivate,omitempty" yaml:"routeTablePrivate,omitempty"`
// RouteTablePrivateRouteToInternet overrides and extended properties common for all the private internet Route AWS resources in this location
RouteTablePrivateRouteToInternet interface{} `json:"routeTablePrivateRouteToInternet,omitempty" yaml:"routeTablePrivateRouteToInternet,omitempty"`
// SecretStoreS3Bucket overrides and extended properties for the secret store S3 Bucket AWS resource in this location
SecretStoreS3Bucket interface{} `json:"secretStoreS3Bucket,omitempty" yaml:"secretStoreS3Bucket,omitempty"`
// SecretStoreS3BucketVpcEndpoint overrides and extended properties for the secret store S3 Bucket VPC Endpoint AWS resource in this location
SecretStoreS3BucketVpcEndpoint interface{} `json:"secretStoreS3BucketVpcEndpoint,omitempty" yaml:"secretStoreS3BucketVpcEndpoint,omitempty"`
// SecretStoreS3BucketPolicy overrides and extended properties for the secret store S3 BucketPolicy AWS resource in this location
SecretStoreS3BucketPolicy interface{} `json:"secretStoreS3BucketPolicy,omitempty" yaml:"secretStoreS3BucketPolicy,omitempty"`
// SecretStoreS3BucketPolicyOverride overrides and extended properties for the secret store S3 BucketPolicy AWS resource in this location
SecretStoreS3BucketPolicyOverride interface{} `json:"secretStoreS3BucketPolicyOverride,omitempty" yaml:"secretStoreS3BucketPolicyOverride,omitempty"`
// AutoScalingGroup overrides and extended properties for all ASG AWS resources in this location
AutoScalingGroup interface{} `json:"autoScalingGroup,omitempty" yaml:"autoScalingGroup,omitempty"`
// LaunchConfiguration overrides and extended properties for all LaunchConfiguration AWS resources in this location
LaunchConfiguration interface{} `json:"launchConfiguration,omitempty" yaml:"launchConfiguration,omitempty"`
// LaunchTemplate overrides and extended properties for all LaunchTemplate AWS resources in this location
LaunchTemplate interface{} `json:"launchTemplate,omitempty" yaml:"launchTemplate,omitempty"`
// ElasticIP overrides and extended properties for all Elastic IPs AWS resources in this location.
ElasticIP interface{} `json:"elasticIP,omitempty" yaml:"elasticIP,omitempty"`
}
AWSLocationSpec is a spec for AWS Location.
type AWSLocationSpec struct {
// AwsAPIAccessSecretRef is a reference to the secret object containing AWS access key and secret key to access this
// location
AwsAPIAccessSecretRef *string `json:"awsApiAccessSecretRef,omitempty" yaml:"awsApiAccessSecretRef,omitempty"`
// AccountID is AWS accountId
// If omitted, it will be populated automatically based on the secret.
// If specified, it must correspond to the account specified in the secret.
//+optional
AccountID *string `json:"accountId,omitempty" yaml:"accountId,omitempty"`
// Region is AWS region
// If omitted, it will be populated automatically based on the secret.
//+optional
Region *string `json:"region,omitempty" yaml:"region,omitempty"`
//VpcID is ID of the VPC to use.
// If omitted, a new VPC will be created, otherwise existing VPC will be used.
//+optional
VpcID *string `json:"vpcId,omitempty" yaml:"vpcId,omitempty"`
// VpcCIDRBlock is an IP address range for instances in this VPC.
//*If omitted, one of 16 standard private /16 IP ranges (172.16.0.0/16, ... , 172.31.0.0/16) will be assigned.
//+optional
VpcCIDRBlock *string `json:"vpcCidrBlock,omitempty" yaml:"vpcCidrBlock,omitempty"`
// AvailabilityZones are AWS region availability zones to be used for Kubernetes cluster in this location.
// If omitted, it will be populated automatically to all zones available for this account in this region.
//+optional
AvailabilityZones []*string `valid:"required" json:"availabilityZones,omitempty" yaml:"availabilityZones,omitempty"`
// MasterCIDRBlocks List of CIDR blocks for master subnets.
// If omitted, generator will try to assign CIDRs automatically.
//+deprecated since version 1.19, use cidrBlocks property instead
// If value is specified in this property, it will be copied to cidrBlocks
MasterCIDRBlocks []*string `json:"masterCIDRBlocks,omitempty" yaml:"masterCIDRBlocks,omitempty"`
// NodesCIDRBlocks List of CIDR blocks for node subnets.
// If omitted, generator will try to assign CIDRs automatically.
//+deprecated since version 1.19, use cidrBlocks property instead
// If value is specified in this property, it will be copied to cidrBlocks
NodesCIDRBlocks []*string `json:"nodesCIDRBlocks,omitempty" yaml:"nodesCIDRBlocks,omitempty"`
// PublicSubnetCidrBlocks List of CIDR blocks for public subnets.
// These will currently be used only if neither nodes nor masters are public, so that no public subnets
// exist to place NAT and/or public ELB.
//+deprecated since version 1.19, use cidrBlocks property instead
// If value is specified in this property, it will be copied to cidrBlocks
PublicSubnetCidrBlocks []*string `json:"publicSubnetCidrBlocks,omitempty" yaml:"publicSubnetCidrBlocks,omitempty"`
// CidrBlocks is CIDR block allocation for various purpose subnets in this location.
//
// This replaces deprecated properties masterCIDRBlocks, nodesCIDRBlocks, and publicSubnetCidrBlocks
//
// CIDR blocks in the following arrays are specified according to availability zone indices.
//
// Availability zone index is the index of the zone in the list of all possible zones in this region, ordered in a standard
// lexicographical order. E.g. zones 'us-east-1a', 'us-east-1c', and 'us-east-1d' have indices 0, 2, and 3 correspondingly.
//
// Therefore, for example, if three public masters are defined, and two masters are placed in the zone 'us-east-1b' (zone
// index is 1) and one master is placed in the zone 'us-east-1d' (zone index is 3), then at least the following CIDRs
// must be specified:
//
// masterPublic:
// - ''
// - '<cidr for master subnet in zone us-east-1b>'
// - ''
// - '<cidr for master subnet in zone us-east-1d>'
//
// Each value in these arrays must either be a valid CIDR or an empty string (if unused or undefined).
//
// Generator will use its own set of rules when trying to specify CIDR blocks that are needed but undefined in the spec.
// It will not try to adjust these rules to accomodate user-specified CIDR's.
//
// Automatic CIDR generation rules on an example of 172.16.0.0/16 global CIDR:
// - 172.16.0.0/17 - reserved for public subnets
// - 172.16.0.0/20 - reserved for public master and other subnets
// - 172.16.0.0/23 - reserved for various non-master/auxilary public subnets
// - 172.16.0.0/26 - reserved
// - 172.16.0.64/26, ... , 172.16.1.192/26 - allocated for otherPublic (zones 0, 1, ... , 6) (7 * 64 IPs)
// - 172.16.2.0/23, ... , 172.16.14.0/23 - allocated for masterPublic (zones 0, 1, ... , 6) (7 * 512 IPs)
// - 172.16.16.0/20, ... , 172.16.112.0/20 - allocated for nodePublic (zones 0, 1, ... , 6) (7 * 16K IPs)
// - 172.16.128.0/17 - reserved for private subnets
// - 172.16.128.0/20 - reserved for private master and other subnets
// - 172.16.128.0/23 - reserved for various non-master/auxilary private subnets
// - 172.16.130.0/23, ... , 172.16.142.0/23 - allocated for masterPrivate (zones 0, 1, ... , 6) (7 * 512 IPs)
// - 172.16.144.0/20, ... , 172.16.240.0/20 - allocated for nodePrivate (zones 0, 1, ... , 6) (7 * 16K IPs)
CidrBlocks *AWSLocationSpecCidrBlocks `json:"cidrBlocks,omitempty" yaml:"cidrBlocks,omitempty"`
// OutpostArn If specified, the cluster subnets, master EBS disks, and the cluster S3 secret store will be created as AWS Ooutpost
// Since version 1.24
//+optional
OutpostArn *string `json:"outpostArn,omitempty" yaml:"outpostArn,omitempty"`
// IamRoleMasterPathName is a master role path name
IamRoleMasterPathName *string `json:"iamRoleMasterPathName,omitempty" yaml:"iamRoleMasterPathName,omitempty"`
// IamInstanceProfileMasterPathName is a master instance profile path name
IamInstanceProfileMasterPathName *string `json:"iamInstanceProfileMasterPathName,omitempty" yaml:"iamInstanceProfileMasterPathName,omitempty"`
// IamRoleNodePathName is a node role path name
IamRoleNodePathName *string `json:"iamRoleNodePathName,omitempty" yaml:"iamRoleNodePathName,omitempty"`
// IamInstanceProfileNodePathName is a node instance profile path name
IamInstanceProfileNodePathName *string `json:"iamInstanceProfileNodePathName,omitempty" yaml:"iamInstanceProfileNodePathName,omitempty"`
// IamRoleMasterCloudFormationExtras additional parameters (policies, statements) for Kublr-generated masters' IAM role
// Since version 1.20
//+deprecated since version 1.24, use cloudFormationExtras.iamRoleMaster instead
IamRoleMasterCloudFormationExtras interface{} `json:"iamRoleMasterCloudFormationExtras,omitempty" yaml:"iamRoleMasterCloudFormationExtras,omitempty"`
// IamRoleNodeCloudFormationExtras additional parameters (policies, statements) for Kublr-generated workers' IAM role
// Since version 1.20
//+deprecated since version 1.24, use cloudFormationExtras.iamRoleNode instead
IamRoleNodeCloudFormationExtras interface{} `json:"iamRoleNodeCloudFormationExtras,omitempty" yaml:"iamRoleNodeCloudFormationExtras,omitempty"`
// EnableTerminationProtection protects the AWS stack from deletion
// this flag is used when creating a stack
EnableTerminationProtection *bool `json:"enableTerminationProtection,omitempty" yaml:"enableTerminationProtection,omitempty" bson:"enableTerminationProtection,omitempty"`
// SkipSecurityGroupNode flag indicates if creating default security groups should be skipped
SkipSecurityGroupDefault *bool `json:"skipSecurityGroupDefault,omitempty" yaml:"skipSecurityGroupDefault,omitempty" bson:"skipSecurityGroupDefault,omitempty"`
// SkipSecurityGroupNode flag indicates if creating security groups of master should be skipped
SkipSecurityGroupMaster *bool `json:"skipSecurityGroupMaster,omitempty" yaml:"skipSecurityGroupMaster,omitempty" bson:"skipSecurityGroupMaster,omitempty"`
// SkipSecurityGroupNode flag indicates if creating security groups of node should be skipped
SkipSecurityGroupNode *bool `json:"skipSecurityGroupNode,omitempty" yaml:"skipSecurityGroupNode,omitempty" bson:"skipSecurityGroupNode,omitempty"`
// Regexp to enable security group rules diabled by default.
//
// Rules which CloudFormation logical names match the provided regexp (if specified) will be enabled.
//
// Examples:
// - 'SSH' - enable SSH access to master and worker nodes
// - 'Master.*SSH' - enable SSH access to master nodes only
// - 'Node.*SSH' - enable SSH access to worker nodes only
//
// Since version 1.21
EnableSecurityGroupRulesRegexp *string `json:"enableSecurityGroupRulesRegexp,omitempty" yaml:"enableSecurityGroupRulesRegexp,omitempty" bson:"enableSecurityGroupRulesRegexp,omitempty"`
// Regexp to disable security group rules enabled by default.
//
// Rules which CloudFormation logical names match the provided regexp (if specified) will be disabled.
//
// Examples:
// - 'NodePort' - disable all NodePort range access
// - 'NodePortUDP' - disable NodePort UDP access only
// - 'KubeTLS' - disable master Kubernetes API public access
//
// Since version 1.21
SkipSecurityGroupRulesRegexp *string `json:"skipSecurityGroupRulesRegexp,omitempty" yaml:"skipSecurityGroupRulesRegexp,omitempty" bson:"skipSecurityGroupRulesRegexp,omitempty"`
// ExistingSecurityGroupIds GroupId of existing security groups that need to be added to all instances.
//
// More security groups may be added to specific node groups by specifying additional
// GroupIds in `existingSecurityGroupIds` property of specific groups' `AWSInstanceGroupLocationSpec`
// objects.
//
// existingSecurityGroupIds values may be string IDs of specific security groups, or objects
// allowed for inclusion into a Cloudformation stack templates, such as `{ Ref: MySG }`
ExistingSecurityGroupIds []interface{} `json:"existingSecurityGroupIds,omitempty" yaml:"existingSecurityGroupIds,omitempty"`
// ResourcesCloudFormationExtras map of additional CloudFormation resources to be included in the CloudFormation stack template
//+deprecated since version 1.24, use cloudFormationExtras.resources
ResourcesCloudFormationExtras StringMap `json:"resourcesCloudFormationExtras,omitempty" yaml:"resourcesCloudFormationExtras,omitempty"`
// SkipPublicSubnetsForPrivateGroups flag indicates that creation of default empty public subnets for
// private node groups should be avoided.
//
// By default Kublr creates an empty public subnet for each AZ in which there is at least one
// private node group. CIDRs for such public subnets are taken from cidrBlocks.otherPublic property.
//
// These public subnets are necessary for public ELB created by Kubernetes for Services of type
// LoadBalancer to be able to connect to worker nodes running in private subnets in corresponding
// AZs.
//
// Note that even if skipPublicSubnetsForPrivateGroups === true, public subnets may still be created
// for NAT gateways for private master and/or worker groups;
//
// Public master subnets will also be created for private master groups if masterElbAllocationPolicy
// or masterNlbAllocationPolicy requires public load blancer.
//
// Therefore it is only possible to fully disable public subnet creation in clusters with:
// 1. all master and worker groups set to private
// 2. masterElbAllocationPolicy and masterNlbAllocationPolicy that do not require public load
// balancer (none, private, or default in single-master cluster)
// 3. natMode === 'none'
// 4. skipPublicSubnetsForPrivateGroups === true
SkipPublicSubnetsForPrivateGroups *bool `json:"skipPublicSubnetsForPrivateGroups,omitempty" yaml:"skipPublicSubnetsForPrivateGroups,omitempty"`
// NatMode can be 'legacy', 'multi-zone' or 'none' (default: 'multi-zone' for new clusters, 'legacy' for
// pre-existing ones):
// 1. 'legacy' mode is supported for compatibility with AWS clusters created by pre-1.19 Kublr releases;
// 2. 'multi-zone' mode is the default for all new clusters.
// 3. 'none' mode is used to avoid automatic creation of NAT gateways.
//
// Migration from 'legacy' to 'multi-zone' is possible but may affect the cluster public egress addresses,
// requires manual operation, and cannot be easily rolled back.
//
// With 'legacy' NAT mode only one NAT gateway is created in one of the availability zone, which is not
// AZ fault tolerant. Public subnet used for the NAT gateway in 'legacy' mode can change depending on the
// configuration of master and worker node groups, which may prevent CloudFormation stack from updating in
// some situation.
//
// With 'multi-zone' NAT mode by default a NAT gateway is created for each AZ in which private node groups are
// present.
// It is also possible to only create NAT gateways in some AZs, and to specify which NAT gateways should be used
// by which specific private subnets.
// NAT gateways created in 'multi-zone' mode also do not create any issues with any configuration changes in
// the clusters, thus never preventing CloudFormation stacks from updating.
NatMode *AWSLocationSpecNatModeEnum `json:"natMode,omitempty" yaml:"natMode,omitempty"`
// AZs for NAT gateways (default: undefined).
//
// Kublr creates one private subnet for each AZ in which there are/is (a) private node group(s).
// Such private subnets require a NAT gateway created in a public subnet.
// The NAT gateway does not have to be in the same AZ, but if the NAT gateway is in a different AZ,
// the private subnet internet accessibility is vulnerable to the NAT gateway AZ failures.
//
// By default Kublr will create NAT gateway in each AZ with private node groups.
//
// natAvailabilityZones property allows overriding this behavior. When natAvailabilityZones
// property is specified, for each AZ `availabilityZones[i]` NAT gateway from the AZ
// `natAvailabilityZones[i % len(natAvailabilityZones)]` will be used.
//
// So for example:
// 1. if `natAvailabilityZones == ['us-east-1c']`, then a single NAT gateway in AZ 'us-east-1c'
// will be used for all private subnets.
// 2. if `natAvailabilityZones == ['us-east-1c', 'us-east-1a']`, and
// `availabilityZones == ['us-east-1a', 'us-east-1b', 'us-east-1d']` then NAT gateways in AZs
// 'us-east-1c', 'us-east-1a', and 'us-east-1c' (again) will be used for private subnets in AZs
// 'us-east-1a', 'us-east-1b', and 'us-east-1d' correspondingly.
// 3. if `natAvailabilityZones` is undefined, null or empty, NAT gateways will be created in each
// AZ with private subnets and private subnet in each AZ will be setup with a NAT gateway in
// the same AZ.
NatAvailabilityZones []*string `json:"natAvailabilityZones,omitempty" yaml:"natAvailabilityZones,omitempty"`
// AvailabilityZoneSpec map allows to specify Kublr generator behavior for resources created per AZ (such as
// subnets for example).
AvailabilityZoneSpec map[string]*AWSLocationAvailabilityZoneSpec `json:"availabilityZoneSpec,omitempty" yaml:"availabilityZoneSpec,omitempty"`
// SkipInternetGateway skip creating AWS Internet Gateway for the VPC.
// Kublr by default automatically creates an AWS Internet Gateway for the VPC (if VPC is created).
// In some situations it is not desirable or allowed, in which case this property can be used
// to skip automatic Internet Gateway creation.
// Since version 1.20
SkipInternetGateway *bool `json:"skipInternetGateway,omitempty" yaml:"skipInternetGateway,omitempty"`
// CloudFormationExtras optional overrides, customizations, and additional properties for Kublr-generated
// CloudFormation template andCloudFormation template resources
// Since version 1.24
//+optional
CloudFormationExtras *AWSLocationCloudFormationExtrasSpec `json:"cloudFormationExtras,omitempty" yaml:"cloudFormationExtras,omitempty"`
}
AWSLocationSpecCidrBlocks defines CIDR block allocation for various purpose subnets in this location.
type AWSLocationSpecCidrBlocks struct {
// MasterPublic defines CIDR blocks for subnets used for public master groups
//+optional
MasterPublic []*string `json:"masterPublic,omitempty" yaml:"masterPublic,omitempty"`
// MasterPrivate defines CIDR blocks for subnets used for private master groups
//+optional
MasterPrivate []*string `json:"masterPrivate,omitempty" yaml:"masterPrivate,omitempty"`
// NodePublic defines CIDR blocks for subnets used for public node groups
//+optional
NodePublic []*string `json:"nodePublic,omitempty" yaml:"nodePublic,omitempty"`
// NodePrivate defines CIDR blocks for subnets used for private node groups
//+optional
NodePrivate []*string `json:"nodePrivate,omitempty" yaml:"nodePrivate,omitempty"`
// OtherPublic defines CIDR blocks used for public subnets necessary for other purposes (e.g. placing NAT and bastion host in situation
//when no other public subnets exist)
//+optional
OtherPublic []*string `json:"otherPublic,omitempty" yaml:"otherPublic,omitempty"`
}
AWSLocationSpecNatModeEnum defines NAT mode for AWS.
type AWSLocationSpecNatModeEnum string
AWSLocationState represents state of AWS Location.
type AWSLocationState struct {
CloudFormationStackID string `json:"cloudFormationStackId" yaml:"cloudFormationStackId"`
LastChangeSetID string `json:"changeSetId" yaml:"changeSetId"`
CloudFormationStackState string `json:"cloudFormationStackState" yaml:"cloudFormationStackState"`
LastStackEventID string `json:"lastStackEventId" yaml:"lastStackEventId"`
FirstStackError string `json:"firstStackError" yaml:"firstStackError"`
LastCreateUpdateError string `json:"lastCreateUpdateError" yaml:"lastCreateUpdateError" bson:"lastCreateUpdateError"`
PrepareToRecreateStack bool `json:"prepareToRecreateStack" yaml:"prepareToRecreateStack"`
TemplateBodyHash string `json:"templateBodyHash" yaml:"templateBodyHash"`
// SnapshotIDs parameter is not used since 1.24
//+deprecated since 1.24
SnapshotIDs map[string]*string `json:"snapshotIds" yaml:"snapshotIds"`
// LastActivityIDs stores the last activity ID for auto scaling groups
// key - auto scaling group name
// value - activity ID
LastASGActivityIDs map[string]string `json:"lastActivityIDs" yaml:"lastActivityIDs" bson:"lastActivityIDs"`
}
AWSS3SecretStoreSpec is a spec for secret store in Amazon S3 Bucket.
type AWSS3SecretStoreSpec struct {
// LocationRef a reference to an AWS location where the bucket will be created
LocationRef string `json:"locationRef" yaml:"locationRef"`
// S3BucketName S3 bucket name.
// If left empty, the name will be gnerated randomly and stored in the spec.
S3BucketName *string `json:"s3BucketName,omitempty" yaml:"s3BucketName,omitempty"`
// SecretExchangeBucketCloudFormationExtras additional CloudFormation S3 bucket resource
// properties that will be added into the S3 bucket CloudFormation resource as is.
// Since version 1.20
//+deprecated since version 1.24, use location.cloudFormationExtras.secretStoreS3Bucket
SecretExchangeBucketCloudFormationExtras interface{} `json:"secretExchangeBucketCloudFormationExtras,omitempty" yaml:"secretExchangeBucketCloudFormationExtras,omitempty"`
}
AWSSubnetCloudFormationExtrasSpec optional overrides, customizations, and additional properties for Kublr-generated CloudFormation template and CloudFormation template resources for this type of subnet Since version 1.24
type AWSSubnetCloudFormationExtrasSpec struct {
// Subnet overrides and extended properties for subnets
Subnet interface{} `json:"subnet,omitempty" yaml:"subnet,omitempty"`
// SubnetRouteTableAssociation overrides and extended properties for the subnets route table association;
// currently only routeTableAssociation.Properties.RouteTableId override makes sense.
// Since version 1.24
SubnetRouteTableAssociation interface{} `json:"subnetRouteTableAssociation,omitempty" yaml:"subnetRouteTableAssociation,omitempty"`
}
AWSSubnetSpec specify Kublr generator behavior for a subnet
type AWSSubnetSpec struct {
// tagging policy for the subnet for LoadBalancer Services
ServiceLoadBalancerPublicPolicy *AWSLocationAvailabilityZoneSubnetServiceLoadBalancerPolicyEnum `json:"serviceLoadBalancerPublicPolicy,omitempty" yaml:"serviceLoadBalancerPublicPolicy,omitempty"`
ServiceLoadBalancerInternalPolicy *AWSLocationAvailabilityZoneSubnetServiceLoadBalancerPolicyEnum `json:"serviceLoadBalancerInternalPolicy,omitempty" yaml:"serviceLoadBalancerInternalPolicy,omitempty"`
// CloudFormationExtras optional overrides, customizations, and additional properties for Kublr-generated CloudFormation template and
// CloudFormation template resources for this type of subnet
// Since version 1.24
//+optional
CloudFormationExtras *AWSSubnetCloudFormationExtrasSpec `json:"cloudFormationExtras,omitempty" yaml:"cloudFormationExtras,omitempty"`
}
AWSTagSpec AWS tag specification Since version 1.24
type AWSTagSpec struct {
Key *string `json:"Key,omitempty" yaml:"Key,omitempty"`
PropagateAtLaunch *bool `json:"PropagateAtLaunch,omitempty" yaml:"PropagateAtLaunch,omitempty"`
Value *string `json:"Value,omitempty" yaml:"Value,omitempty"`
}
AWSVolumeSnapshot - Amazon volume snapshot
type AWSVolumeSnapshot struct {
EbsVolumeID string `json:"ebsVolumeId" yaml:"ebsVolumeId" bson:"ebsVolumeId"`
SnapshotID string `json:"snapshotId" yaml:"snapshotId" bson:"snapshotId"`
AccountID string `json:"accountId" yaml:"accountId" bson:"accountId"`
// used in cluster restoration process
OriginalEbsVolumeID string `json:"originalEbsVolumeId" yaml:"originalEbsVolumeId" bson:"originalEbsVolumeId"`
}
AcmeSpec is a spec for Let’s Encrypt ACME Protocol.
type AcmeSpec struct {
// Enabled indicates if AMCE support is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty" bson:"enabled,omitempty"`
// API URL Is an Let's Encrypt endpoint to use.
APIURL *string `json:"apiUrl,omitempty" yaml:"apiUrl,omitempty"`
// Email is an e-mail to use for.
Email *string `json:"email,omitempty" yaml:"email,omitempty" bson:"email,omitempty"`
}
AgentConfigMap is a Kublr agent configuration flags
type AgentConfigMap map[string]interface{}
AgentExtensionSpec specifies a reference to a Kublr agent extension
type AgentExtensionSpec struct {
// TgzURL specifies URL of a Kublr extension to use
//+optional
TgzURL *string `json:"tgzUrl,omitempty" yaml:"tgzUrl,omitempty"`
// RepositorySecretRef specifies reference to the secret object containing username/password to access the extension repository
//+optional
RepositorySecretRef *string `json:"repositorySecretRef,omitempty" yaml:"repositorySecretRef,omitempty"`
}
AgentExtensionsMap a map of agent extensions
type AgentExtensionsMap map[string]AgentExtensionSpec
AlertManagerSpec is a spec for AlertManager installation
type AlertManagerSpec struct {
// Enabled indicates if AlertManager is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// Persistent indicates if storage is enabled.
Persistent *bool `json:"persistent,omitempty" yaml:"persistent,omitempty"`
// Size defines size of the storage, string, must follow k8s resource.Quantity rules.
Size *string `json:"size,omitempty" yaml:"size,omitempty"`
}
AppFeatureSpec is a spec for application controller feature in cluster.
type AppFeatureSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
// Enabled indicates if this feature is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// Namespace kubernetes namespace to which application controller will be installed.
Namespace *string `json:"namespace,omitempty" yaml:"namespace,omitempty"`
}
AzureAPIAccessKey defines Azure credentials.
type AzureAPIAccessKey struct {
TenantID string `json:"tenantId" yaml:"tenantId"`
SubscriptionID string `json:"subscriptionId" yaml:"subscriptionId"`
AadClientID string `json:"aadClientId" yaml:"aadClientId"`
AadClientSecret string `json:"aadClientSecret" yaml:"aadClientSecret"`
}
AzureASSecretStoreSpec is a spec for secret store in Azure Account Storage.
type AzureASSecretStoreSpec struct {
// current implementation automatically generate the new!
// name of container with secrets by next rule concat(deployment().name + 'secrets'.
// It could be changed in future for some static value secretsContainerName?: string;
LocationRef string `json:"locationRef" yaml:"locationRef"`
// UseExisting should use an existing secret store
UseExisting *bool `json:"useExisting,omitempty" yaml:"useExisting,omitempty"`
// If omitted, a new Storage Account, otherwise existing will be used
//+optional
StorageAccountName *string `json:"storageAccountName,omitempty" yaml:"storageAccountName,omitempty"`
// If omitted, a new Storage Container under Storage Account will be created, otherwise existing will be used
//+optional
StorageContainerName *string `json:"storageContainerName,omitempty" yaml:"storageContainerName,omitempty"`
}
AzureDataDiskSpec is a Data disk specification
type AzureDataDiskSpec struct {
// Lun specifies the logical unit number (LUN) for the data drive in the virtual machine.
// Each data disk must have a unique LUN.
Lun *int `json:"lun,omitempty" yaml:"lun,omitempty"`
// DiskSizeGB specifies the data disk size, in gigabytes.
DiskSizeGB *int `json:"diskSizeGb,omitempty" yaml:"diskSizeGb,omitempty"`
}
AzureGroupType Azure instance group type (‘AvailabilitySet’, ‘VirtualMachineScaleSet’, or ‘AvailabilitySetLegacy’)
Since version 1.20
type AzureGroupType string
AzureInstanceGroupLocationARMTemplateExtrasSpec optional overrides, customizations, and additional properties for Kublr-generated ARM template resources for this instance group
Since version 1.20
type AzureInstanceGroupLocationARMTemplateExtrasSpec struct {
// OSDisk overrides and extended properties for node OS disks of types 'vhd' and 'managedDisk'
// (ignored for OS disks of type 'image')
OSDisk interface{} `json:"osDisk,omitempty" yaml:"osDisk,omitempty"`
// MasterDataDisk overrides and extended properties for master etcd data disks (ignored for non-master groups)
MasterDataDisk interface{} `json:"masterDataDisk,omitempty" yaml:"masterDataDisk,omitempty"`
// AvailabilitySet overrides and extended properties for the group availability set (ignored for VMSS groups)
AvailabilitySet interface{} `json:"availabilitySet,omitempty" yaml:"availabilitySet,omitempty"`
// NetworkInterface overrides and extended properties for the network interface resources created for each non-VMSS VM
// or for the network interface profiles used in scale sets created for VMSS groups
NetworkInterface interface{} `json:"networkInterface,omitempty" yaml:"networkInterface,omitempty"`
// IPConfiguration overrides and extended properties for IP configurations in the network interface resources created
// for each non-VMSS VM or for the network interface profiles used in scale sets created for VMSS groups
IPConfiguration interface{} `json:"ipConfiguration,omitempty" yaml:"ipConfiguration,omitempty"`
// VirtualMachine overrides and extended properties for the virtual machine resources created for each non-VMSS VM;
// the property is ignored for VMSS groups
VirtualMachine interface{} `json:"virtualMachine,omitempty" yaml:"virtualMachine,omitempty"`
// ScaleSet overrides and extended properties for the virtual machine scale set resources created for each VMSS group;
// the property is ignored for non-VMSS groups
ScaleSet interface{} `json:"scaleSet,omitempty" yaml:"scaleSet,omitempty"`
}
AzureInstanceGroupLocationSpec is a spec for instance group location in Azure.
type AzureInstanceGroupLocationSpec struct {
// GroupType is a spec
// - 'VirtualMachine'
// - 'AvailabilitySet'
// - 'VirtualMachineScaleSet'
// - 'AvailabilitySetLegacy' (deprecated, not recommended, may be removed in the future)
// Default value is 'VirtualVachineScaleSet' for regular node groups and 'AvailabilitySet' for masters.
// 'AvailabilitySetLegacy' is set automaticall for clusters created by Kublr 1.19 and before, when
// migrating to Kublr 1.20 and after.
// Since version 1.20
GroupType *AzureGroupType `json:"groupType,omitempty" yaml:"groupType,omitempty" bson:"groupType"`
// Zones zones for the group
// zones array may include non-unique and empty entries, which may make sense for master/stateful node
// groups, and node groups where some VMS should be zoned and some not
// Since version 1.20
Zones []*string `json:"zones,omitempty" yaml:"zones,omitempty" bson:"zones"`
// PinToZone is 'pin' if instances must be pinned to a single zone from the list, or
// 'span' if no pinning is necessary.
// 'default' specifies default behavior depending on the groupType and whether it is
// master or worker, stateful or stateless group, and whether zones are defined or not.
//
// pinToZone cannot be set to 'span' for the master group.
//
// VirtualMachineScaleSet stateless - many instances, one VMSS
// - zones specified - the VMSS has all of them
// - pinToZone = 'pin' - error, not supported
// - zones not specified - no zones in VMSS (warning for pinToZone = 'span' | 'pin')
// VirtualMachineScaleSet stateful - many VMSS, one for for each instance
// - zones specified
// - pinToZone = 'span' - each VMSS has all of them
// - pinToZone = 'pin' | 'default' - each VMSS has one zone
// - zones not specified - no zones in VMSS (warning for pinToZone = 'span' | 'pin')
// AvailabilitySet stateful (never stateless) - one AS, many VMs
// - zones specified - error, not supported
// VirtualMachine stateful (never stateless) - no AS, many VMs
// - zones specified - each VM has one zone
// - pinToZone = 'span' - error, not supported
// - zones not specified - no zones in VMSS
// - pinToZone = 'span' | 'pin' - warning
// AvailabilitySetLegacy stateful (never stateless)
// - pinToZone SHOULD be 'default', zones SHOULD NOT be specified, warning otherwise
// Since version 1.20
PinToZone *InstanceGroupLocationSpecPinToZoneTypeEnum `json:"pinToZone,omitempty" yaml:"pinToZone,omitempty"`
// SSHKeySecretRef reference to the secret object containing public SSH key
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty"`
// SSHUsername SSH username to set up on the instances
SSHUsername *string `json:"sshUsername,omitempty" yaml:"sshUsername,omitempty"`
// SSHKey public SSH key to set of the instance
//+deprecated since version 1.20, use SSHKeySecretRef instead
SSHKey *string `json:"sshKey,omitempty" yaml:"sshKey,omitempty"`
// IsAvailabilitySet indicates usage of Azure availability set
//+deprecated since version 1.20, ignored, use groupType instead
IsAvailabilitySet *bool `json:"isAvailabilitySet,omitempty" yaml:"isAvailabilitySet,omitempty"`
InstanceType *string `json:"instanceType,omitempty" yaml:"instanceType,omitempty"`
// OsDisk describes OS disk
OsDisk *AzureOSDiskSpec `json:"osDisk,omitempty" yaml:"osDisk,omitempty"`
// MasterDataDisk describes master Data disk
MasterDataDisk *AzureDataDiskSpec `json:"masterDataDisk,omitempty" yaml:"masterDataDisk,omitempty"`
// MasterLBAllocationPolicy Master LB allocation policy.
// Must be one of:
// - AzureMasterLBAllocationPolicyPrivate: Use both 'public' and 'private' LB
// - AzureMasterLBAllocationPolicy: Use only 'private' LB
// If omitted - AzureMasterLBAllocationPolicyPrivate will be used.
//
// The property is ignored for non-master node groups.
MasterLBAllocationPolicy *AzureMasterLBAllocationPolicy `json:"masterLBAllocationPolicy,omitempty" yaml:"masterLBAllocationPolicy,omitempty"`
// MasterLBSeparate if set to true then separate load balancers are created for master nodes for Kubernetes API.
//
// By default (starting with Kublr 1.20) Kublr uses the same load balancers for master as Kubernets
// Azure cloud provider uses for services of type LoadBalancer.
//
// With this property set to true Kublr will create separate private and public load balancers
// for master nodes.
//
// The property is ignored for non-master node groups.
//
// Note 1: a node cannot be included in differnt node pools that belong to different load balancers,
// so this property should not be set to true for master-only clusters in which you want to use
// services of type LoadBalancer.
//
// Note 2: Kublr 1.19 and earlier always created separate load balancers for master nodes, so for a
// cluster migrated from Kublr 1.19 to Kublr 1.20 this property will be set to true automatically.
//
// Since version 1.20
MasterLBSeparate *bool `json:"masterLBSeparate,omitempty" yaml:"masterLBSeparate,omitempty"`
// ArmTemplateExtras optional overrides, customizations, and additional properties for Kublr-generated ARM template and
// ARM template resources for this instance group
// Since version 1.20
//+optional
ArmTemplateExtras *AzureInstanceGroupLocationARMTemplateExtrasSpec `json:"armTemplateExtras,omitempty" yaml:"armTemplateExtras,omitempty"`
}
AzureLocationARMTemplateExtrasSpec optional overrides, customizations, and additional properties for Kublr-generated ARM template and ARM template resources.
Since version 1.20
type AzureLocationARMTemplateExtrasSpec struct {
// APIVersions optional map of overrides for Azure API versions used by Kublr generator for ARM resources
//
// Example:
// apiVersions:
// 'Microsoft.Network/routeTables': '2021-08-01'
//
// Since version 1.24
APIVersions map[string]interface{} `json:"apiVersions,omitempty" yaml:"apiVersions,omitempty"`
// APIProfile optional override for ARM template apiProfile
APIProfile *string `json:"apiProfile,omitempty" yaml:"apiProfile,omitempty"`
// Variables optional map of additional ARM template variables
Variables map[string]interface{} `json:"variables,omitempty" yaml:"variables,omitempty"`
// Functions optional map of ARM template functions
Functions []interface{} `json:"functions,omitempty" yaml:"functions,omitempty"`
// Resources optional list of additional ARM template resources
Resources []interface{} `json:"resources,omitempty" yaml:"resources,omitempty"`
// Outputs optional map of additional ARM template outputs
Outputs map[string]interface{} `json:"outputs,omitempty" yaml:"outputs,omitempty"`
// StorageAccount optional overrides and additional properties for Kublr-generated ARM template StorageAccount resource
StorageAccount interface{} `json:"storageAccount,omitempty" yaml:"storageAccount,omitempty"`
// BlobService optional overrides and additional properties for Kublr-generated ARM template BlobService resource
BlobService interface{} `json:"blobService,omitempty" yaml:"blobService,omitempty"`
// Container optional overrides and additional properties for Kublr-generated ARM template Container resource
Container interface{} `json:"container,omitempty" yaml:"container,omitempty"`
// SecurityGroup optional overrides and additional properties for Kublr-generated ARM template SecurityGroup resource
SecurityGroup interface{} `json:"securityGroup,omitempty" yaml:"securityGroup,omitempty"`
// RouteTable optional overrides and additional properties for Kublr-generated ARM template RouteTable resource
RouteTable interface{} `json:"routeTable,omitempty" yaml:"routeTable,omitempty"`
// VirtualNetwork optional overrides and additional properties for Kublr-generated ARM template VirtualNetwork resource
VirtualNetwork interface{} `json:"virtualNetwork,omitempty" yaml:"virtualNetwork,omitempty"`
// Subnet optional overrides and additional properties for Kublr-generated ARM template Subnet resource
Subnet interface{} `json:"subnet,omitempty" yaml:"subnet,omitempty"`
// LoadBalancerPublic optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPublic resource
LoadBalancerPublic interface{} `json:"loadBalancerPublic,omitempty" yaml:"loadBalancerPublic,omitempty"`
// LoadBalancerPublicIP optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPublicIP resource
LoadBalancerPublicIP interface{} `json:"loadBalancerPublicIP,omitempty" yaml:"loadBalancerPublicIP,omitempty"`
// LoadBalancerPublicFrontendIPConfig optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPublicFrontendIPConfig resource
LoadBalancerPublicFrontendIPConfig interface{} `json:"loadBalancerPublicFrontendIPConfig,omitempty" yaml:"loadBalancerPublicFrontendIPConfig,omitempty"`
// LoadBalancerPublicBackendAddressPool optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPublicBackendAddressPool resource
LoadBalancerPublicBackendAddressPool interface{} `json:"loadBalancerPublicBackendAddressPool,omitempty" yaml:"loadBalancerPublicBackendAddressPool,omitempty"`
// LoadBalancerPublicRule optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPublicRule resource
LoadBalancerPublicRule interface{} `json:"loadBalancerPublicRule,omitempty" yaml:"loadBalancerPublicRule,omitempty"`
// LoadBalancerPublicProbe optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPublicProbe resource
LoadBalancerPublicProbe interface{} `json:"loadBalancerPublicProbe,omitempty" yaml:"loadBalancerPublicProbe,omitempty"`
// LoadBalancerPrivate optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPrivate resource
LoadBalancerPrivate interface{} `json:"loadBalancerPrivate,omitempty" yaml:"loadBalancerPrivate,omitempty"`
// LoadBalancerPrivateFrontendIPConfig optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPrivateFrontendIPConfig resource
LoadBalancerPrivateFrontendIPConfig interface{} `json:"loadBalancerPrivateFrontendIPConfig,omitempty" yaml:"loadBalancerPrivateFrontendIPConfig,omitempty"`
// LoadBalancerPrivateBackendAddressPool optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPrivateBackendAddressPool resource
LoadBalancerPrivateBackendAddressPool interface{} `json:"loadBalancerPrivateBackendAddressPool,omitempty" yaml:"loadBalancerPrivateBackendAddressPool,omitempty"`
// LoadBalancerPrivateRule optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPrivateRule resource
LoadBalancerPrivateRule interface{} `json:"loadBalancerPrivateRule,omitempty" yaml:"loadBalancerPrivateRule,omitempty"`
// LoadBalancerPrivateProbe optional overrides and additional properties for Kublr-generated ARM template LoadBalancerPrivateProbe resource
LoadBalancerPrivateProbe interface{} `json:"loadBalancerPrivateProbe,omitempty" yaml:"loadBalancerPrivateProbe,omitempty"`
// NatGateway optional overrides and additional properties for Kublr-generated NAT Gateway
NatGateway interface{} `json:"natGateway,omitempty" yaml:"natGateway,omitempty"`
NatGatewayPublicIP interface{} `json:"natGatewayPublicIP,omitempty" yaml:"natGatewayPublicIP,omitempty"`
// AvailabilitySetMasterLegacy optional overrides and additional properties for Kublr-generated ARM template AvailabilitySetMasterLegacy resource
AvailabilitySetMasterLegacy interface{} `json:"availabilitySetMasterLegacy,omitempty" yaml:"availabilitySetMasterLegacy,omitempty"`
// AvailabilitySetAgentLegacy optional overrides and additional properties for Kublr-generated ARM template AvailabilitySetAgentLegacy resource
AvailabilitySetAgentLegacy interface{} `json:"availabilitySetAgentLegacy,omitempty" yaml:"availabilitySetAgentLegacy,omitempty"`
// SecurityRuleMastersAllowSSH optional overrides and additional properties for Kublr-generated ARM template SSH Security Rule
SecurityRuleMastersAllowSSH interface{} `json:"securityRuleMastersAllowSSH,omitempty" yaml:"securityRuleMastersAllowSSH,omitempty"`
// SecurityRuleMastersAllowAPI optional overrides and additional properties for Kublr-generated ARM template API Security Rule
SecurityRuleMastersAllowAPI interface{} `json:"securityRuleMastersAllowAPI,omitempty" yaml:"securityRuleMastersAllowAPI,omitempty"`
}
AzureLocationSpec is a spec for Azure Location.
type AzureLocationSpec struct {
// AzureAPIAccessSecretRef is a reference to the secret object containing Azure secrets to access location
AzureAPIAccessSecretRef *string `json:"azureApiAccessSecretRef,omitempty" yaml:"azureApiAccessSecretRef,omitempty"`
// AzureSSHKeySecretRef is a reference to the secret object containing public SSH key
AzureSSHKeySecretRef *string `json:"azureSshKeySecretRef,omitempty" yaml:"azureSshKeySecretRef,omitempty"`
// Azure aadClientId
//+deprecated since version 1.20, unused, ignored
AadClientID *string `json:"aadClientId,omitempty" yaml:"aadClientId,omitempty"`
// Region is Azure region
Region *string `json:"region,omitempty" yaml:"region,omitempty"`
// Azure Resource Group
// If omitted, a new Resource Group will be created, otherwise existing will be used
//+optional
ResourceGroup *string `json:"resourceGroup,omitempty" yaml:"resourceGroup,omitempty"`
// Azure Network Security Group
// If omitted, a new Network Security Group will be created, otherwise existing will be used
//+optional
NetworkSecurityGroup *string `json:"networkSecurityGroup,omitempty" yaml:"networkSecurityGroup,omitempty"`
// Azure Route Table
// If omitted, a new Route Table will be created, otherwise existing will be used
//+optional
RouteTable *string `json:"routeTable,omitempty" yaml:"routeTable,omitempty"`
// Azure Storage Account type (i.e. Standard_LRS, Premium_LRS and etc)
// If omitted - default will be used.
StorageAccountType *string `json:"storageAccountType,omitempty" yaml:"storageAccountType,omitempty"`
// Azure Virtual Network
// If omitted, a new Virtual Network will be created, otherwise existing will be used
//+optional
VirtualNetwork *string `json:"virtualNetwork,omitempty" yaml:"virtualNetwork,omitempty"`
// Azure Virtual Network Subnet
// If omitted, a new Virtual Network Subnet will be created, otherwise existing will be used
//+optional
VirtualNetworkSubnet *string `json:"virtualNetworkSubnet,omitempty" yaml:"virtualNetworkSubnet,omitempty"`
// Ip address range for instances in this Virtual Network Subnet
// If omitted - default will be assigned
//+optional
VirtualNetworkSubnetCidrBlock *string `json:"virtualNetworkSubnetCidrBlock,omitempty" yaml:"virtualNetworkSubnetCidrBlock,omitempty"`
// SKU for the cluster load balancers.
// Values of "Basic" and "Standard" are supported.
// The default value is "Standard" for new cluster created in Kublr 1.20 and later.
// For clusters created in Kublr 1.19 and before the values is set to "Basic" during migration to 1.20.
// Basic load balancers are very limited and are only possible to use in certain limited Kublr clusters
// configurations, so Standard load balancers are recommended in most situations.
// Since version 1.20
LoadBalancerSKU *LoadBalancerSKU `json:"loadBalancerSKU,omitempty" yaml:"loadBalancerSKU,omitempty"`
// RouteTableRaw is a definition of Azure Route Tables to pass to ARM Deployment.
//+optional
RouteTableRaw map[string]interface{} `json:"routeTableRaw,omitempty" yaml:"routeTableRaw,omitempty"`
// ArmTemplateResourcesExtra is additional ARM resources. Will be added to main Azure template without any modification.
// Using to extend Azure ARM template in case if we need to deploy Azure resources to the same deployment as Kublr's resources.
//+deprecated since version 1.20, use armTemplateExtras.resources instead
//+optional
ArmTemplateResourcesExtra []interface{} `json:"armTemplateResourcesExtra,omitempty" yaml:"armTemplateResourcesExtra,omitempty"`
// SkipDefaultSecurityRules skip standard Kublr-generated security rules in the ARM templates
// Since version 1.20
SkipDefaultSecurityRules *bool `json:"skipDefaultSecurityRules,omitempty" yaml:"skipDefaultSecurityRules,omitempty"`
// EnableMasterSSH enable SSH NAT and security rules on public LB into masters
// Since version 1.20
EnableMasterSSH *bool `json:"enableMasterSSH,omitempty" yaml:"enableMasterSSH,omitempty"`
// NatMode enable NAT gateway.
// Values: 'single' - create a NAT GW for Standard SKU master LB, 'disable' - no NAT GW for Basic SKU LB
// Since version 1.20.3
NatMode *string `json:"natMode,omitempty" yaml:"natMode,omitempty"`
// ArmTemplateExtras optional overrides, customizations, and additional properties for Kublr-generated ARM template and
// ARM template resources
// Since version 1.20
//+optional
ArmTemplateExtras *AzureLocationARMTemplateExtrasSpec `json:"armTemplateExtras,omitempty" yaml:"armTemplateExtras,omitempty"`
}
AzureLocationState represents state of Azure Location.
type AzureLocationState struct {
ResourceGroupName string `json:"resourceGroupName" yaml:"resourceGroupName"`
DeploymentName string `json:"deploymentName" yaml:"deploymentName"`
DeploymentProvisioningState string `json:"deploymentProvisioningState" yaml:"deploymentProvisioningState"`
LastCreateUpdateError string `json:"lastCreateUpdateError" yaml:"lastCreateUpdateError" bson:"lastCreateUpdateError"`
FirstStackError string `json:"firstStackError" yaml:"firstStackError"`
Resources map[ResourceID]*ResourceState `json:"resources" yaml:"resources"`
SavedResources []ResourceID `json:"savedResources" yaml:"savedResources"`
}
AzureLocationUpdateState represents state of Azure Location update state.
type AzureLocationUpdateState struct {
UpdateStage UpdateStage `json:"updateStage" yaml:"updateStage"`
Victims Victims `json:"victims" yaml:"victims"`
}
AzureMasterLBAllocationPolicy is a Master LB allocation policy (i.e ‘privateAndPublic’, ‘private’ and etc)
type AzureMasterLBAllocationPolicy string
AzureOSDiskSpec is a spec for method creation VM in Azure.
type AzureOSDiskSpec struct {
// The the OS disk initialization type.
//
// Supported values: 'image', 'vhd', or 'managedDisk'
// - 'image' - the OS disk is created from an image specified by 'image*' properties
// - 'vhd' - the OS disk is created from an VHD image at 'sourceUri'
// - 'managedDisk' - the OS disk is created as a copy of an existing managed disk or a snapshot
Type *string `json:"type,omitempty" yaml:"type,omitempty"`
// The full resource group and the name of resource of type 'Microsoft.Compute/images' to
// use as an OS image for VMs in this group.
//
// An image resource ID based on these parameters is put into 'storageProfile.imageReference.id'
// property of the VM or VMSS
ImageResourceID *string `json:"imageResourceId,omitempty" yaml:"imageResourceId,omitempty"`
// The resource group and the name of resource of type 'Microsoft.Compute/images' to
// use as an OS image for VMs in this group.
//
// An image resource ID based on these parameters is put into 'storageProfile.imageReference.id'
// property of the VM or VMSS
ImageResourceGroup *string `json:"imageResourceGroup,omitempty" yaml:"imageResourceGroup,omitempty"`
ImageID *string `json:"imageId,omitempty" yaml:"imageId,omitempty"`
// The publisher, offer, and sku of the image to use as an OS image for VMs in this group.
//
// The values specified here are put into properties 'publisher', 'offer', and 'sku' of
// the VM/VMSS 'storageProfile.imageReference' properties object.
ImagePublisher *string `json:"imagePublisher,omitempty" yaml:"imagePublisher,omitempty"`
ImageOffer *string `json:"imageOffer,omitempty" yaml:"imageOffer,omitempty"`
ImageSku *string `json:"imageSku,omitempty" yaml:"imageSku,omitempty"`
ImageVersion *string `json:"imageVersion,omitempty" yaml:"imageVersion,omitempty"`
// SourceURI is used with OS disk types 'vhd', and provides the URI for the VHD to import.
SourceURI *string `json:"sourceUri,omitempty" yaml:"sourceUri,omitempty"`
// DiskSizeGB specifies the disk size, in gigabytes.
DiskSizeGB *int `json:"diskSizeGb,omitempty" yaml:"diskSizeGb,omitempty"`
}
Backup – backup model +deprecated
type Backup struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// ClusterID cluster reference
//+deprecated use OwnerReference
ClusterID string `json:"clusterId" yaml:"clusterId" bson:"clusterId"`
Spec BackupSpec `json:"spec" yaml:"spec" bson:"spec"`
ClusterSpec ClusterSpec `json:"clusterSpec" yaml:"clusterSpec" bson:"clusterSpec"`
TotalSize int64 `json:"totalSize" yaml:"totalSize" bson:"totalSize"`
FinishedAt time.Time `json:"finishedAt,omitempty" yaml:"finishedAt,omitempty" bson:"finishedAt"`
Status BackupStatus `json:"status" yaml:"status" bson:"status"`
}
BackupConfiguration - backup configuration model
type BackupConfiguration struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
ScheduleConfig []ScheduleInterval `json:"scheduleConfig" yaml:"scheduleConfig" bson:"scheduleConfig"`
Enabled bool `json:"enabled" yaml:"enabled" bson:"enabled"`
DryRun bool `json:"dryRun" yaml:"dryRun" bson:"dryRun"`
}
BackupConfigurationListResult - creates list for backup configuration
type BackupConfigurationListResult struct {
Total int `json:"total" yaml:"total" bson:"total"`
Items []BackupConfiguration `json:"items" yaml:"items" bson:"items"`
}
BackupListResult holds Backups.
type BackupListResult struct {
Total int `json:"total" yaml:"total" bson:"total"`
Items []Backup `json:"items" yaml:"items" bson:"items"`
}
BackupSpec – backup specification
type BackupSpec struct {
MasterDisksSnapshots []VolumeSnapshot `json:"masterDisksSnapshots" yaml:"masterDisksSnapshots" bson:"masterDisksSnapshots"`
PersistentVolumesSnapshots []VolumeSnapshot `json:"persistentVolumesSnapshots" yaml:"persistentVolumesSnapshots" bson:"persistentVolumesSnapshots"`
PersistentVolumeClaimsSnapshots []VolumeSnapshot `json:"persistentVolumeClaimsSnapshots" yaml:"persistentVolumeClaimsSnapshots" bson:"persistentVolumeClaimsSnapshots"`
}
BackupStats is the backup status of the cluster
type BackupStats struct {
ClusterID string `json:"clusterId" yaml:"clusterId" bson:"clusterId"`
ClusterName string `json:"clusterName" yaml:"clusterName" bson:"clusterName"`
LastSuccessBackup time.Time `json:"lastSuccessBackup,omitempty" yaml:"lastSuccessBackup,omitempty" bson:"lastSuccessBackup"`
NumberOfBackups int `json:"numberOfBackups" yaml:"numberOfBackups" bson:"numberOfBackups"`
}
BackupStatus status
type BackupStatus string
BaremetalInstanceGroupLocationSpec is a spec for instance group location.
type BaremetalInstanceGroupLocationSpec struct {
// Hosts is a list of hosts in the current instance group location.
//+optional
Hosts []*HostSpec `json:"hosts,omitempty" yaml:"hosts,omitempty"`
//load balancing address for apiserver of kubernetes
//+optional
LoadBalancerAddress *string `json:"loadBalancerAddress,omitempty" yaml:"loadBalancerAddress,omitempty"`
// Reference to the secret object containing private SSH key for instance group
// Can be overridden for host in HostSpec
// Secret Reference type: SSHPrivateKeySpec
//+optional
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty"`
// Username to connect to ssh for instance group
// Username is used to connect via SSH with certificate
// Can be overridden for host in HostSpec
//+optional
Username *string `json:"username,omitempty" yaml:"username,omitempty"`
// SSHUserPassSecretRef is a secret reference that contains username and password credentials for all nodes in this instance group
// This secret is used to connect via SSH and to execute sudo commands with password
// Secret Reference type: UsernamePasswordSpec
//+optional
SSHUserPassSecretRef *string `json:"sshUserPassSecretRef,omitempty" yaml:"sshUserPassSecretRef,omitempty" bson:"sshUserPassSecretRef,omitempty"`
// SuUserPassSecretRef is a secret reference containing credentials for a username and password for installation without sudo via su
// This secret is used to execute commands via su
// Secret Reference type: UsernamePasswordSpec
//+optional
SuUserPassSecretRef *string `json:"suUserPassSecretRef,omitempty" yaml:"suUserPassSecretRef,omitempty" bson:"suUserPassSecretRef,omitempty"`
}
BaremetalInstanceGroupLocationState - location state for group
type BaremetalInstanceGroupLocationState struct {
InstanceGroupRef string `json:"instanceGroupRef" yaml:"instanceGroupRef"`
HostStates []HostState `json:"hostStates,omitempty" yaml:"hostStates,omitempty"`
// RegisteredHosts number of hosts registered with KCP
//+deprecated kublr agent provides node state information
RegisteredHosts int `json:"registeredHosts" yaml:"registeredHosts"`
MinRegisteredHosts int `json:"minRegisteredHosts" yaml:"minRegisteredHosts"`
// DeregisteredHosts number of hosts de-registered with KCP
//+deprecated kublr agent provides node state information
DeregisteredHosts int `json:"deregisteredHosts" yaml:"deregisteredHosts"`
InitCommand []InitCommand `json:"initCommand,omitempty" yaml:"initCommand,omitempty"`
RemoveCommand []RemoveCommand `json:"removeCommand,omitempty" yaml:"removeCommand,omitempty"`
// Reference to the secret object containing private SSH key for instance group
// This SSH key is used to remove a node from the cluster via ssh.
// Can be overridden for host in HostState
// Secret Reference type: SSHPrivateKeySpec
//+optional
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty" bson:"sshKeySecretRef,omitempty"`
// SSHUserPassSecretRef is a secret reference that contains username and password credentials for all nodes in this instance group
// This secret is used to connect via SSH and to execute sudo commands with password
// Secret Reference type: UsernamePasswordSpec
//+optional
SSHUserPassSecretRef *string `json:"sshUserPassSecretRef,omitempty" yaml:"sshUserPassSecretRef,omitempty" bson:"sshUserPassSecretRef,omitempty"`
// SuUserPassSecretRef is a secret reference containing credentials for a username and password for removing without sudo via su
// This secret is used to execute commands via su
// Secret Reference type: UsernamePasswordSpec
//+optional
SuUserPassSecretRef *string `json:"suUserPassSecretRef,omitempty" yaml:"suUserPassSecretRef,omitempty" bson:"suUserPassSecretRef,omitempty"`
// Username to connect to ssh for instance group
// This Username is used to remove a node from the cluster via SSH with certificate.
// Can be overridden for host in HostState
// Secret Reference type: SSHPrivateKeySpec
//+optional
Username string `json:"username,omitempty" yaml:"username,omitempty" bson:"username,omitempty"`
}
BaremetalLocationSpec holds location specification for bare metal installations.
type BaremetalLocationSpec struct {
}
BaremetalLocationState represents state of Baremetal location.
type BaremetalLocationState struct {
InstanceGroupStates []BaremetalInstanceGroupLocationState `json:"instanceGroupStates,omitempty" yaml:"instanceGroupStates,omitempty"`
}
BaremetalSecretStoreSpec - Spec for bare-metal secret storage. this spec is empty. +deprecated use KublrAgentSecretStoreSpec instead
type BaremetalSecretStoreSpec struct {
}
BinaryRegistryAuth is a binary registry authentication information
type BinaryRegistryAuth struct {
Registry *string `json:"registry,omitempty" yaml:"registry,omitempty"`
SecretRef *string `json:"secretRef,omitempty" yaml:"secretRef,omitempty"`
}
BinaryRegistryOverride is a docker registry overrides
type BinaryRegistryOverride struct {
Default string `mapstructure:"default" json:"default,omitempty" yaml:"default,omitempty"`
StorageGoogleAPIs string `mapstructure:"storage_googleapis_com" json:"storage_googleapis_com,omitempty" yaml:"storage_googleapis_com,omitempty"`
Github string `mapstructure:"github_com" json:"github_com,omitempty" yaml:"github_com,omitempty"`
}
BinaryRegistrySecretSpec is a Binary Registry Secret
type BinaryRegistrySecretSpec struct {
// URL prefix for Binary repo (i.e. 'myregistry.com:5000')
// Required
URLPrefix string `json:"urlPrefix" yaml:"urlPrefix" bson:"urlPrefix"`
// Insecure can be set to true to disable TLS certificate verification for this registry.
//+optional
Insecure bool `json:"insecure" yaml:"insecure" bson:"insecure"`
// Username for Binary Registry access.
//+optional
Username string `json:"username,omitempty" yaml:"username,omitempty" bson:"username,omitempty"`
// Password for Binary Registry access.
//+optional
Password string `json:"password,omitempty" yaml:"password,omitempty" bson:"password,omitempty"`
// TrustedCertificate is Binary Registry trusted CA certificate.
//+optional
TrustedCertificate string `json:"trustedCertificate,omitempty" yaml:"trustedCertificate,omitempty" bson:"trustedCertificate,omitempty"`
}
BinaryRegistrySpec is a spec for docker registry
type BinaryRegistrySpec struct {
Auth []*BinaryRegistryAuth `json:"auth,omitempty" yaml:"auth,omitempty"`
Override *BinaryRegistryOverride `json:"override,omitempty" yaml:"override,omitempty"`
}
CentralLoggingSinkSpec is a spec for self-hosted cluster wide logging.
type CentralLoggingSinkSpec struct {
// Enabled indicates if this sink is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// Persistent indicates if EL storage is persistent.
Persistent *bool `json:"persistent,omitempty" yaml:"persistent,omitempty"`
// Size definesGenerate certificate for jwks size of the storage for elasticsearch in platform, string, must follow k8s resource.Quantity rules.
Size *string `json:"size,omitempty" yaml:"size,omitempty"`
// MasterNodes is the number of master nodes that control the cluster.
// number of master nodes is must not be 2, need to use 1 or 3 and more
MasterNodes *int `json:"masterNodes,omitempty" yaml:"masterNodes,omitempty" bson:"masterNodes"`
// DataNodes is the number of data nodes that hold data and perform data related operations such as CRUD, search, and aggregations.
DataNodes *int `json:"dataNodes,omitempty" yaml:"dataNodes,omitempty" bson:"dataNodes"`
// ClientNodes is the number of client nodes which serve client requests.
ClientNodes *int `json:"clientNodes,omitempty" yaml:"clientNodes,omitempty" bson:"clientNodes"`
// LogstashReplicas is the number of logstash which transfer logs from logsmover/rabbitmq to elasticsearch.
// Since version 1.20
LogstashReplicas *int `json:"logstashReplicas,omitempty" yaml:"logstashReplicas,omitempty" bson:"logstashReplicas,omitempty"`
// RetentionPeriodDays represents how old (in days) should be an Elasticsearch index to be deleted by Curator
RetentionPeriodDays *int `json:"retentionPeriodDays,omitempty" yaml:"retentionPeriodDays,omitempty" bson:"retentionPeriodDays,omitempty"`
}
Chart is a helm package
type Chart struct {
// The name of the chart
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
// RepoURL is address of helm repository
RepoURL *string `json:"repoUrl,omitempty" yaml:"repoUrl,omitempty"`
// Version of the chart
Version *string `json:"version,omitempty" yaml:"version,omitempty"`
// URL is absolute URL to a helm chart. For example: https://example.com/charts/nginx-1.2.3.tgz
// Since version 1.20
URL *string `json:"url,omitempty" yaml:"url,omitempty"`
// ChartPullSecret is a reference to kublr secret for accessing the chart repo
ChartPullSecret *string `json:"chartPullSecret,omitempty" yaml:"chartPullSecret,omitempty" bson:"chartPullSecret,omitempty"`
}
ChartValues represents helm chart values
type ChartValues map[string]interface{}
Cluster is a definition of cluster.
type Cluster struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// Spec is cluster specification.
Spec ClusterSpec `valid:"required" json:"spec" yaml:"spec"`
// Status hold cluster state.
Status ClusterState `valid:"" json:"status,omitempty" yaml:"status,omitempty"`
// Owner is an owner for cluster.
Owner *Owner `json:"owner,omitempty" yaml:"owner,omitempty"`
// Deleted indicates whether cluster was removed
Deleted bool `json:"deleted" yaml:"deleted" default:"false"`
}
ClusterBackupDetails - details for backup
type ClusterBackupDetails struct {
Cluster Cluster `json:"cluster" yaml:"cluster" bson:"cluster"`
LastSuccessBackup time.Time `json:"lastSuccessBackup,omitempty" yaml:"lastSuccessBackup,omitempty" bson:"lastSuccessBackup"`
NumberOfBackups int `json:"numberOfBackups" yaml:"numberOfBackups" bson:"numberOfBackups"`
BackupEnabled bool `json:"backupEnabled" yaml:"backupEnabled" bson:"backupEnabled"`
}
ClusterBackupDetailsListResult - result for backup details list
type ClusterBackupDetailsListResult struct {
Total int `json:"total" yaml:"total" bson:"total"`
Items []ClusterBackupDetails `json:"items" yaml:"items" bson:"items"`
}
ClusterFeaturesSpec is a spec for cluster-wide features.
type ClusterFeaturesSpec struct {
KublrOperator *KublrOperatorSpec `json:"kublrOperator,omitempty" yaml:"kublrOperator,omitempty" bson:"kublrOperator,omitempty"`
System *SystemFeatureSpec `json:"system,omitempty" yaml:"system,omitempty"`
Logging *ClusterLoggingSpec `json:"logging,omitempty" yaml:"logging,omitempty"`
Monitoring *ClusterMonitoringSpec `json:"monitoring,omitempty" yaml:"monitoring,omitempty"`
Ingress *ClusterIngressSpec `json:"ingress,omitempty" yaml:"ingress,omitempty"`
ControlPlane *ControlPlaneFeatureSpec `json:"controlPlane,omitempty" yaml:"controlPlane,omitempty"`
AppFeature *AppFeatureSpec `json:"appFeature,omitempty" yaml:"appFeature,omitempty"`
Kubedb *KubeDbFeatureSpec `json:"kubedb,omitempty" yaml:"kubedb,omitempty" bson:"kubedb,omitempty"`
}
ClusterIngressControllerSpec is a spec for cluster-wide ingress controller.
type ClusterIngressControllerSpec struct {
Nginx *NginxClusterIngressControllerSpec `json:"nginx,omitempty" yaml:"nginx,omitempty" bson:"nginx,omitempty"`
}
ClusterIngressSpec is a spec for Ingress in cluster.
type ClusterIngressSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
IngressControllers []*ClusterIngressControllerSpec `json:"ingressControllers,omitempty" yaml:"ingressControllers,omitempty"`
}
ClusterListResult holds clusters.
type ClusterListResult struct {
Total int `json:"total" yaml:"total"`
Items []Cluster `json:"items" yaml:"items"`
}
ClusterLogCollectionSpec is a spec for cluster log collection.
type ClusterLogCollectionSpec struct {
// Enabled is a flag indicating if log collection is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
}
ClusterLogSinksSpec is a spec for Cluster wide log sinks.
type ClusterLogSinksSpec struct {
SelfHosted *SelfHostedClusterLogSinkSpec `json:"selfHosted,omitempty" yaml:"selfHosted,omitempty"`
AwsCloudWatch *AWSCloudWatchLogSinkSpec `json:"awsCloudWatch,omitempty" yaml:"awsCloudWatch,omitempty"`
CentralLogging *CentralLoggingSinkSpec `json:"centralLogging,omitempty" yaml:"centralLogging,omitempty"`
}
ClusterLoggingSpec is a spec for cluster wide logging.
type ClusterLoggingSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
LogCollection *ClusterLogCollectionSpec `json:"logCollection,omitempty" yaml:"logCollection,omitempty"`
Sinks []*ClusterLogSinksSpec `json:"sinks,omitempty" yaml:"sinks,omitempty"`
// StorageHostPath is host path for persistent logging data
// This directory will be used for clusters that doesn't have dynamic volume provision.
// Default value: /var/lib/kublr/logging
//+deprecated configure node path for local host provisioner
StorageHostPath *string `json:"storageHostPath,omitempty" yaml:"storageHostPath,omitempty" bson:"storageHostPath,omitempty"`
}
ClusterMonitoringSpec is a spec for cluster wide monitoring.
type ClusterMonitoringSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
Platform *MonitoringPlatformSpec `json:"platform,omitempty" yaml:"platform,omitempty"`
PlatformClient *MonitoringPlatformClientSpec `json:"platformClient,omitempty" yaml:"platformClient,omitempty"`
SelfHosted *MonitoringSelfHostedSpec `json:"selfHosted,omitempty" yaml:"selfHosted,omitempty"`
// StorageHostPath is host path for persistent monitoring data
// This directory will be used for clusters that doesn't have dynamic volume provision.
// Default value: /var/lib/kublr/monitoring
//+deprecated configure node path for local host provisioner
StorageHostPath *string `json:"storageHostPath,omitempty" yaml:"storageHostPath,omitempty" bson:"storageHostPath,omitempty"`
// StatsCollection is a stats collection spec
//+deprecated kept here just for backward compatibility
StatsCollection *ClusterStatsCollectionSpec `json:"statsCollection,omitempty" yaml:"statsCollection,omitempty"`
}
ClusterPackageSpec is a specification of helm package that should be installed to cluster
type ClusterPackageSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
// ReleaseName is the release name of package
ReleaseName string `json:"releaseName" yaml:"releaseName" bson:"releaseName"`
// Namespace kubernetes namespace to which application controller will be installed.
Namespace string `json:"namespace" yaml:"namespace" bson:"namespace"`
// HelmVersion is helm version. available values: v2, v3
HelmVersion string `json:"helmVersion,omitempty" yaml:"helmVersion,omitempty" bson:"helmVersion,omitempty"`
}
ClusterPackageState is a state of cluster package
type ClusterPackageState struct {
// ReleaseName is the release name of package
ReleaseName string `json:"releaseName" yaml:"releaseName" bson:"releaseName"`
// Namespace kubernetes namespace to which application controller will be installed.
Namespace string `json:"namespace" yaml:"namespace" bson:"namespace"`
// ReleaseStatus is the status as given by Helm for the release
ReleaseStatus string `json:"releaseStatus" yaml:"releaseStatus" bson:"releaseStatus"`
// Version is the version of the installed feature
Version string `json:"version" yaml:"version"`
// SpecSha256Sum is the SHA256 checksum for the installed resource
Sha256Sum string `json:"sha256sum" yaml:"sha256sum" bson:"sha256sum"`
// ActualSha256Sum is the SHA256 checksum from the real resource in the target cluster
ActualSha256Sum string `json:"actualSha256sum" yaml:"actualSha256sum" bson:"actualSha256sum"`
// Conditions contains observations of the resource's state, e.g.,
// has the chart which it refers to been fetched.
Conditions []FeatureCondition `json:"conditions,omitempty" yaml:"conditions,omitempty" bson:"conditions,omitempty"`
}
ClusterPackagesSpec is a specification of all cluster packages map structure uses for simple patch-merge operations key is a unique value: “${namespace}/${releaseName}”
type ClusterPackagesSpec map[string]*ClusterPackageSpec
ClusterRollingUpdateSpec controls the desired behavior of rolling update.
type ClusterRollingUpdateSpec struct {
// The maximum number of instance groups that can be updated at one moment.
// Defaults to 1.
//+optional
MaxUpdatedGroups *int `json:"maxUpdatedGroups,omitempty" yaml:"maxUpdatedGroups,omitempty" bson:"maxUpdatedGroups,omitempty"`
}
ClusterSpec is a specification of the cluster.
type ClusterSpec struct {
// ControlPlaneAPI Kubernetes control plane spec; Mainly used for external clusters
ControlPlaneAPI *ControlPlaneAPISpec `json:"controlPlaneApi,omitempty" yaml:"controlPlaneApi,omitempty"`
// KublrVersion allows to specify which version of kublr to use.
//+deprecated since version 1.20
KublrVersion *string `json:"kublrVersion,omitempty" yaml:"kublrVersion,omitempty"`
// KublrBranch allows to specify which branch to use for cluster.
//+deprecated since version 1.20, ignored
KublrBranch *string `json:"kublrBranch,omitempty" yaml:"kublrBranch,omitempty"`
// KublrAgentRepositoryUsername specifies username to download kublr agent.
//+deprecated use KublrAgentRepositorySecretRef instead
//+optional
KublrAgentRepositoryUsername *string `json:"kublrAgentRepositoryUsername,omitempty" yaml:"kublrAgentRepositoryUsername,omitempty"`
// KublrAgentRepositoryPassword specifies password to download kublr agent.
//+deprecated use KublrAgentRepositorySecretRef instead
//+optional
KublrAgentRepositoryPassword *string `json:"kublrAgentRepositoryPassword,omitempty" yaml:"kublrAgentRepositoryPassword,omitempty"`
// DockerRegistry allows to override docker registries used to pull system docker images
DockerRegistry *DockerRegistrySpec `json:"dockerRegistry,omitempty" yaml:"dockerRegistry,omitempty"`
// BinaryRegistry allows to override registries used to pull binary data
BinaryRegistry *BinaryRegistrySpec `json:"binaryRegistry,omitempty" yaml:"binaryRegistry,omitempty"`
// ProxyServer spec for http/https proxy server
ProxyServer *ProxyServerSpec `json:"proxyServer,omitempty" yaml:"proxyServer,omitempty"`
// Locations specifies locations where cluster should be installed.
Locations []*LocationSpec `json:"locations,omitempty" yaml:"locations,omitempty"`
// Network is a specification of network.
Network *NetworkSpec `json:"network,omitempty" yaml:"network,omitempty"`
// Master is a spec for instance group used for kubernetes master nodes.
Master *InstanceGroupSpec `json:"master,omitempty" yaml:"master,omitempty"`
// Nodes is a slice with specs for instance groups used for worker nodes.
Nodes []*InstanceGroupSpec `json:"nodes,omitempty" yaml:"nodes,omitempty"`
// Features is a specification of cluster features.
Features *ClusterFeaturesSpec `json:"features,omitempty" yaml:"features,omitempty"`
// Packages is a specification of helm chart
Packages *ClusterPackagesSpec `json:"packages,omitempty" yaml:"packages,omitempty" bson:"packages,omitempty"`
// SecretStore is a spec for secret store.
SecretStore *SecretStoreSpec `json:"secretStore,omitempty" yaml:"secretStore,omitempty"`
// UpdateStrategy is used to update existing instance groups
//+optional
UpdateStrategy *ClusterUpdateStrategySpec `json:"updateStrategy,omitempty" yaml:"updateStrategy,omitempty" bson:"updateStrategy,omitempty"`
// ProcessesSpec specifies seeder and agent parameters overridable in LocationSpec, InstanceGroupSpec, and InstanceGroupLocationSpec
ProcessesSpec `json:",inline" yaml:",inline" bson:",inline"`
}
ClusterState represents status of the cluster. TODO: Should be renamed to ClusterStatus
type ClusterState struct {
CreateRequested time.Time `json:"createRequested,omitempty" yaml:"createRequested,omitempty"`
Created time.Time `json:"created,omitempty" yaml:"created,omitempty"`
UpdateRequested time.Time `json:"updateRequested,omitempty" yaml:"updateRequested,omitempty"`
Updated time.Time `json:"updated,omitempty" yaml:"updated,omitempty"`
DeleteRequested time.Time `json:"deleteRequested,omitempty" yaml:"deleteRequested,omitempty"`
Deleted time.Time `json:"deleted,omitempty" yaml:"deleted,omitempty"`
MonitorRequested time.Time `json:"monitorRequested,omitempty" yaml:"monitorRequested,omitempty"`
Monitored time.Time `json:"monitored,omitempty" yaml:"monitored,omitempty"`
Generated time.Time `json:"generated,omitempty" yaml:"generated,omitempty"` // time that system set after running generator for spec
// KubernetesConfigBucket name of the bucket where kubernetes config file is stored.
KubernetesConfigBucket string `json:"kubernetesConfigBucket,omitempty" yaml:"kubernetesConfigBucket,omitempty"`
// KubernetesConfigOk represents condition of kubernetes config.
KubernetesConfigOk *Condition `json:"kubernetesConfigOk,omitempty" yaml:"kubernetesConfigOk,omitempty"`
// Cluster's certificates
// This field is only populated for baremetal clusters with baremetal secret store (deprecated)
//+deprecated use kublrAgent secret store instead of baremetal secret store
ClusterCerts *gencert.ClusterCertificates `json:"clusterCerts,omitempty" yaml:"clusterCerts,omitempty"`
// Cluster Authentication Files (basic_auth.csv, known_tokens.csv, abac-authz-policy.jsonl, config)
// This field is only populated for baremetal clusters with baremetal secret store (deprecated)
//+deprecated use kublrAgent secret store instead of baremetal secret store
AuthFiles *gencert.AuthFiles `json:"authFiles,omitempty" yaml:"authFiles,omitempty"`
// APIEndpoint is API endpoint to access cluster.
APIEndpoint string `json:"apiEndpoint,omitempty" yaml:"apiEndpoint,omitempty"`
// APIOk represents condition of API.
APIOk *Condition `json:"apiOk,omitempty" yaml:"apiOk,omitempty"`
MastersOk *Condition `json:"mastersOk,omitempty" yaml:"mastersOk,omitempty"`
NodesOk *Condition `json:"nodesOk,omitempty" yaml:"nodesOk,omitempty"`
DNSOk *Condition `json:"dnsOk,omitempty" yaml:"dnsOk,omitempty"`
TillerOk *Condition `json:"tillerOk,omitempty" yaml:"tillerOk,omitempty"`
OverallClusterStatus *Condition `json:"overallClusterStatus,omitempty" yaml:"overallClusterStatus,omitempty" bson:"overallClusterStatus"`
// DashboardEndpoint is endpoint to Access Kubernetes Dashboard.
DashboardEndpoint string `json:"dashboardEndpoint,omitempty" yaml:"dashboardEndpoint,omitempty"`
DashboardOk *Condition `json:"dashboardOk,omitempty" yaml:"dashboardOk,omitempty"`
Conditions []*Condition `json:"conditions,omitempty" yaml:"conditions,omitempty"`
WarnConditions []*Condition `json:"warnConditions,omitempty" yaml:"warnConditions,omitempty"`
LocationStates []*LocationState `json:"locationStates,omitempty" yaml:"locationStates,omitempty"`
InstanceGroupStates []*InstanceGroupState `json:"instanceGroupStates,omitempty" yaml:"instanceGroupStates,omitempty"`
// FeatureStates represents the common state of the deployed features.
FeatureStates []*FeatureState `json:"featureStates,omitempty" yaml:"featureStates,omitempty"`
// DetailedFeatureStates represents the detailed state of the deployed features.
DetailedFeatureStates DetailedFeatureStates `json:"detailedFeatureStates,omitempty" yaml:"detailedFeatureStates,omitempty"`
// Packages represents the state of the deployed packages.
PackageStates PackageStates `json:"packageStates,omitempty" yaml:"packageStates,omitempty"`
// State is a current state of the cluster (i.e. Creating, Running, Error, Deleting, Deleted).
State CurrentState `json:"state,omitempty" yaml:"state,omitempty"`
// IngressLoadBalancer represents state of the ingress load balancer.
IngressLoadBalancer IngressLoadBalancer `json:"ingressLoadBalancer,omitempty" yaml:"ingressLoadBalancer,omitempty" bson:"ingressLoadBalancer"`
// LastSuccessfulSpecJSON is the last successful cluster spec in base64 format
LastSuccessfulSpecJSON string `json:"lastSuccessfulSpecJson,omitempty" yaml:"lastSuccessfulSpecJson,omitempty" bson:"lastSuccessfulSpecJson,omitempty"`
}
ClusterStatsCollectionSpec is a specification for cluster-wide statistic collection. +deprecated kept here just for backward compatibility
type ClusterStatsCollectionSpec struct {
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
}
ClusterUpdateStrategySpec describes how to update existing instance groups
type ClusterUpdateStrategySpec struct {
// Type of ClusterUpdateStrategyType.
// Default is RollingUpdate.
//+optional
Type ClusterUpdateStrategyType `json:"type,omitempty" yaml:"type,omitempty" bson:"type,omitempty"`
// Rolling update config params.
// Present only if Type = RollingUpdate.
//+optional
RollingUpdate *ClusterRollingUpdateSpec `json:"rollingUpdate,omitempty" yaml:"rollingUpdate,omitempty" bson:"rollingUpdate,omitempty"`
}
ClusterUpdateStrategyType is type of update strategy for a cluster.
type ClusterUpdateStrategyType string
Condition represents custom condition.
type Condition struct {
Type ConditionType `json:"type" yaml:"type"`
LastCheckTime time.Time `json:"lastCheckTime,omitempty" yaml:"lastCheckTime,omitempty"`
LastTransitionTime time.Time `json:"lastTransitionTime,omitempty" yaml:"lastTransitionTime,omitempty"`
Status ConditionStatus `json:"status" yaml:"status"`
Reason string `json:"reason" yaml:"reason"`
Message string `json:"message" yaml:"message"`
}
ConditionStatus represent status of the condition.
type ConditionStatus string
ConditionType represents type of the condition.
type ConditionType string
ControlPlaneAPISpec Kubernetes control plane access specification
type ControlPlaneAPISpec struct {
APIUrl []*string `json:"apiUrl,omitempty" yaml:"apiUrl,omitempty"`
KubeconfigSecretRef *string `json:"kubeconfigSecretRef,omitempty" yaml:"kubeconfigSecretRef,omitempty"`
}
ControlPlaneFeatureSpec is a spec for control plane (kublr) feature in cluster.
type ControlPlaneFeatureSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
// Enabled is bool value for enable feature
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// Namespace kubernetes namespace to which control plane will be installed.
Namespace *string `json:"namespace,omitempty" yaml:"namespace,omitempty"`
// Domain is a DNS name which will be used for API/UI/Auth.
Domain *string `json:"domain,omitempty" yaml:"domain,omitempty"`
// InitialAdminPassword password of admin user used for accessing kublr.
InitialAdminPassword *string `json:"initialAdminPassword,omitempty" yaml:"initialAdminPassword,omitempty"`
// Create ControlPlane in high availability mode (create replicas for databases)
HighAvailability *bool `json:"highAvailability,omitempty" yaml:"highAvailability,omitempty" bson:"highAvailability,omitempty"`
// StorageHostPath is host path for persistent data of control plane
// This directory will be used for clusters that doesn't have dynamic volume provision.
// Default value: /var/lib/kublr/kcp
//+deprecated configure node path for local host provisioner
StorageHostPath *string `json:"storageHostPath,omitempty" yaml:"storageHostPath,omitempty" bson:"storageHostPath,omitempty"`
IntercomID *string `json:"intercomId,omitempty" yaml:"intercomId,omitempty" bson:"intercomId,omitempty"`
KublrLicense *string `json:"kublrLicense,omitempty" yaml:"kublrLicense,omitempty" bson:"kublrLicense,omitempty"`
IntercomUserID *string `json:"intercomUserId,omitempty" yaml:"intercomUserId,omitempty" bson:"intercomUserId,omitempty"`
GoogleTagManagerID *string `json:"googleTagManagerId,omitempty" yaml:"googleTagManagerId,omitempty" bson:"googleTagManagerId,omitempty"`
GoogleAnalyticsID *string `json:"googleAnalyticsId,omitempty" yaml:"googleAnalyticsId,omitempty" bson:"googleAnalyticsId,omitempty"`
LogRocketID *string `json:"logRocketId,omitempty" yaml:"logRocketId,omitempty" bson:"logRocketId,omitempty"`
TrackingEnabled *bool `json:"trackingEnabled,omitempty" yaml:"trackingEnabled,omitempty" bson:"trackingEnabled,omitempty"`
UserRegBaseURL *string `json:"userRegBaseUrl,omitempty" yaml:"userRegBaseUrl,omitempty" bson:"userRegBaseUrl,omitempty"`
DocsBaseURL *string `json:"docsBaseUrl,omitempty" yaml:"docsBaseUrl,omitempty" bson:"docsBaseUrl,omitempty"`
}
ControlPlaneFeatureState represents state of the Control Plane feature.
type ControlPlaneFeatureState struct {
APIEndpoint string `json:"apiEndpoint" yaml:"apiEndpoint" bson:"apiEndpoint"`
AuthEndpoint string `json:"authEndpoint" yaml:"authEndpoint" bson:"authEndpoint"`
AuthTokenEndpoint string `json:"authTokenEndpoint" yaml:"authTokenEndpoint" bson:"authTokenEndpoint"`
UIEndpoint string `json:"uiEndpoint" yaml:"uiEndpoint" bson:"uiEndpoint"`
ReadyState Condition `json:"readyState" yaml:"readyState" bson:"readyState"` // ToDo : rename to condition
// KCPSha256Sum is SHA256 checksum of the current cluster specification saved during cluster registration
KCPSha256Sum string `json:"kcpSha256sum" yaml:"kcpSha256sum" bson:"kcpSha256sum"`
// ActualKCPSha256Sum is the SHA256 checksum of system cluster spec in the remote kcp
ActualKCPSha256Sum string `json:"actualKcpSha256sum" yaml:"actualKcpSha256sum" bson:"actualKcpSha256sum"`
// ClusterPackageState represents package status
ClusterPackageState `json:",inline" yaml:",inline" bson:",inline"`
}
CurrentState represents current state of the cluster.
type CurrentState string
DetailedFeatureStates represents the detailed state of the deployed features.
type DetailedFeatureStates struct {
KublrOperator *ClusterPackageState `json:"kublrOperator,omitempty" yaml:"kublrOperator,omitempty" bson:"kublrOperator,omitempty"`
KublrSystemState *ClusterPackageState `json:"kublrSystemState,omitempty" yaml:"kublrSystemState,omitempty" bson:"kublrSystemState,omitempty"`
ControlPlaneState *ControlPlaneFeatureState `json:"controlPlaneState,omitempty" yaml:"controlPlaneState,omitempty" bson:"controlPlaneState,omitempty"`
LoggingState *LoggingFeatureState `json:"loggingState,omitempty" yaml:"loggingState,omitempty" bson:"loggingState,omitempty"`
MonitoringState *MonitoringFeatureState `json:"monitoringState,omitempty" yaml:"monitoringState,omitempty" bson:"monitoringState,omitempty"`
KubeDbState *ClusterPackageState `json:"kubedbState,omitempty" yaml:"kubedbState,omitempty" bson:"kubedbState,omitempty"`
IngressState *IngressFeatureState `json:"ingressState,omitempty" yaml:"ingressState,omitempty" bson:"ingressState,omitempty"`
FeatureControllerOk *Condition `json:"featureControllerOk,omitempty" yaml:"featureControllerOk,omitempty" bson:"featureControllerOk,omitempty"`
}
DockerRegistryAuth is a docker registry authentication information
type DockerRegistryAuth struct {
Registry *string `json:"registry,omitempty" yaml:"registry,omitempty"`
SecretRef *string `json:"secretRef,omitempty" yaml:"secretRef,omitempty"`
}
DockerRegistryOverride is a docker registry overrides
type DockerRegistryOverride struct {
Default string `mapstructure:"default" json:"default,omitempty" yaml:"default,omitempty"`
DockerIO string `mapstructure:"docker_io" json:"docker_io,omitempty" yaml:"docker_io,omitempty"`
GcrIO string `mapstructure:"gcr_io" json:"gcr_io,omitempty" yaml:"gcr_io,omitempty"`
K8sGcrIO string `mapstructure:"k8s_gcr_io" json:"k8s_gcr_io,omitempty" yaml:"k8s_gcr_io,omitempty"`
QuayIO string `mapstructure:"quay_io" json:"quay_io,omitempty" yaml:"quay_io,omitempty"`
ElasticCO string `mapstructure:"elastic_co" json:"elastic_co,omitempty" yaml:"elastic_co,omitempty"`
}
DockerRegistrySecretSpec is a Docker Registry Secret
type DockerRegistrySecretSpec struct {
// Registry is name of Docker Registry (i.e. 'myregistry.com:5000')
// Required
Registry string `json:"registry" yaml:"registry" bson:"registry"`
// Insecure can be set to true to disable TLS certificate verification for this registry.
//+optional
Insecure bool `json:"insecure" yaml:"insecure" bson:"insecure"`
// Username for Docker Registry access.
//+optional
Username string `json:"username,omitempty" yaml:"username,omitempty" bson:"username,omitempty"`
// Password for Docker Registry access.
//+optional
Password string `json:"password,omitempty" yaml:"password,omitempty" bson:"password,omitempty"`
// Certificate is Docker Registry client certificate, that should be trusted by Docker daemon.
//+optional
Certificate string `json:"certificate,omitempty" yaml:"certificate,omitempty" bson:"certificate,omitempty"`
// Subtype specifies repository type of docker registry, for example AWS ECR, that have special logic
//+optional
// Since version 1.20
RepositoryType RepositoryType `json:"repositoryType,omitempty" yaml:"repositoryType,omitempty" bson:"repositoryType,omitempty"`
// AwsEcrSecretRef a reference to AWSAPIAccessKey secret used to access the ECR repository
// Since version 1.20
AwsEcrSecretRef string `json:"awsEcrSecretRef,omitempty" yaml:"awsEcrSecretRef,omitempty" bson:"awsEcrSecretRef,omitempty"`
}
DockerRegistrySpec is a spec for docker registry
type DockerRegistrySpec struct {
Auth []*DockerRegistryAuth `json:"auth,omitempty" yaml:"auth,omitempty"`
Override *DockerRegistryOverride `json:"override,omitempty" yaml:"override,omitempty"`
}
DrainStrategySpec controls the desired node drain behavior during update
type DrainStrategySpec struct {
// Skip to drain node during update
// Default: false
Skip bool `json:"skip,omitempty" yaml:"skip,omitempty" bson:"skip,omitempty"`
// Force is the flag of drain command
// Continue even if there are pods not managed by a ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet
// Default: true
Force *bool `json:"force,omitempty" yaml:"force,omitempty" bson:"force,omitempty"`
// IgnoreAllDaemonSets is the flag of drain command
// Ignore DaemonSet-managed pods
// Default: true
IgnoreAllDaemonSets *bool `json:"ignoreAllDaemonSets,omitempty" yaml:"ignoreAllDaemonSets,omitempty" bson:"ignoreAllDaemonSets,omitempty"`
// DeleteLocalData is the flag of drain command
// Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained)
// Default: true
DeleteLocalData *bool `json:"deleteLocalData,omitempty" yaml:"deleteLocalData,omitempty" bson:"deleteLocalData,omitempty"`
// GracePeriodSeconds is the flag of drain command
// Period of time in seconds given to each pod to terminate gracefully. If negative, the default value specified in the pod will be used
// Default: 30
GracePeriodSeconds *int `json:"gracePeriodSeconds,omitempty" yaml:"gracePeriodSeconds,omitempty" bson:"gracePeriodSeconds,omitempty"`
// Timeout is the flag of drain command
// The length of time to wait before giving up, zero means infinite
// Default: 30s
Timeout *string `json:"timeout,omitempty" yaml:"timeout,omitempty" bson:"timeout,omitempty"`
}
ElastigroupSpec object describes elastigroup parameters for a specific node group
type ElastigroupSpec struct {
SpotinstAccessTokenSecretRef *string `json:"spotinstAccessTokenSecretRef,omitempty" bson:"spotinstAccessTokenSecretRef" yaml:"spotinstAccessTokenSecretRef,omitempty"`
// Spec - Content of this object should correspond with 'Properties' object structure
// of CloudFormation custom resoure of type 'Custom::elasticgroup' as described in
// spotinst documentation, e.g.
// https://api.spotinst.com/provisioning-ci-cd-sdk/provisioning-tools/cloudformation/examples/elastigroup/create-generic/
//
// In particular it may include 'group', 'updatePolicy', 'deletePolicy' properties etc.
//
// Kublr generator will override or extend certain elsatigroup spec properties
// according to generic parameters in the instance group specification, e.g.
// min/max nodes, instance type, etc
Spec ElastigroupSpecMap `json:"spec,omitempty" yaml:"spec,omitempty" bson:"spec"`
}
ElastigroupSpecMap is a spec for elastigroup.
type ElastigroupSpecMap map[string]interface{}
Entity - MongoDB entity
type Entity struct {
// ID is object id assigned by MongoDB during save.
ID string `json:"id" yaml:"id" bson:"_id,omitempty"`
// Metadata is object metadata.
Metadata ObjectMeta `valid:"" json:"metadata" yaml:"metadata" bson:"metadata"`
// TypeMeta is type metadata.
TypeMeta `valid:"-" json:",inline" yaml:",inline"`
}
Event is a definition of events, which happens with cluster.
type Event struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// InvolvedObject is the object that this event is about.
// Intended usage is to put reference to kubernetes object to which this event about.
InvolvedObject *ObjectReference `json:"involvedObject,omitempty" yaml:"involvedObject,omitempty"`
Reason string `json:"reason,omitempty" yaml:"reason,omitempty"`
Message string `json:"message,omitempty" yaml:"message,omitempty"`
Source *EventSource `json:"eventSource,omitempty" yaml:"eventSource,omitempty"`
FirstTimestamp time.Time `json:"firstTimestamp,omitempty" yaml:"firstTimestamp,omitempty"`
LastTimestamp time.Time `json:"lastTimestamp,omitempty" yaml:"lastTimestamp,omitempty"`
Count int `json:"count" yaml:"count"`
// Severity is an Event Severity.
Severity EventSeverity `json:"severity" yaml:"severity"`
// ClusterID is an ID of the cluster to which this event belongs.
ClusterID string `json:"clusterId" yaml:"clusterId" bson:"clusterId"`
}
EventListResult holds Events.
type EventListResult struct {
Total int `json:"total" yaml:"total"`
Items []Event `json:"items" yaml:"items"`
}
EventSeverity is a severity of the event.
type EventSeverity int
EventSource defines source of the event.
type EventSource struct {
// Component - which component created the event.
Component string `json:"component" yaml:"component"`
// Host is a host on which event was initiated.
Host string `json:"host" yaml:"host"`
}
FeatureCondition represents feature condition
type FeatureCondition struct {
// Type is the type of the condition.
Type FeatureConditionType `json:"type" yaml:"type"`
// Last time we probed the condition.
//+optional
LastCheckTime time.Time `json:"lastCheckTime,omitempty" yaml:"lastCheckTime,omitempty"`
// Last time the condition transitioned from one status to another.
//+optional
LastTransitionTime time.Time `json:"lastTransitionTime,omitempty" yaml:"lastTransitionTime,omitempty"`
// Status is the status of the condition.
// Can be True, False, Unknown.
Status ConditionStatus `json:"status" yaml:"status"`
// Unique, one-word, CamelCase reason for the condition's last transition.
//+optional
Reason string `json:"reason,omitempty" yaml:"reason,omitempty"`
// Human-readable message indicating details about last transition.
//+optional
Message string `json:"message,omitempty" yaml:"message,omitempty"`
}
FeatureConditionType represents the type of the feature condition
type FeatureConditionType string
FeatureName is the type for the feature name
type FeatureName string
FeatureState represents state of the deployed feature.
type FeatureState struct {
FeatureName FeatureName `json:"featureName" yaml:"featureName"`
ReleaseName string `json:"releaseName" yaml:"releaseName"`
Created time.Time `json:"created,omitempty" yaml:"created,omitempty"`
Modified time.Time `json:"modified,omitempty" yaml:"modified,omitempty"`
Deleted time.Time `json:"deleted,omitempty" yaml:"deleted,omitempty"`
FeatureOk *Condition `json:"featureOk,omitempty" yaml:"featureOk,omitempty"`
// Namespace is kubernetes namespace to which the feature is installed.
Namespace string `json:"namespace" yaml:"namespace"`
// Version is the version of the installed feature
Version string `json:"version" yaml:"version"`
// Sha256sum is the SHA256 checksum for the installed function
Sha256sum string `json:"sha256sum" yaml:"sha256sum"`
}
GCPAPIAccessKeySpec defines Google cloud email, key, projectID
type GCPAPIAccessKeySpec struct {
ClientEmail string `json:"clientEmail,omitempty" yaml:"clientEmail,omitempty"`
PrivateKey string `json:"privateKey,omitempty" yaml:"privateKey,omitempty"`
ProjectID string `json:"projectId,omitempty" yaml:"projectId,omitempty"`
}
GCPDiskSpec is google cloud disk spec
type GCPDiskSpec struct {
SizeGb *int `json:"sizeGb,omitempty" yaml:"sizeGb,omitempty"`
Type *GCPDiskTypeEnum `json:"type,omitempty" yaml:"type,omitempty"`
SourceImage *string `json:"sourceImage,omitempty" yaml:"sourceImage,omitempty"`
}
GCPDiskTypeEnum is type for disk in google cloud
type GCPDiskTypeEnum string
GCPInstanceGroupLocationSpec is google cloud group location spec
type GCPInstanceGroupLocationSpec struct {
InstanceType *string `json:"instanceType,omitempty" yaml:"instanceType,omitempty"`
// SSHKeySecretRef reference to the secret object containing public SSH key
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty"`
SSHKey *string `json:"sshKey,omitempty" yaml:"sshKey,omitempty"`
// NodeIPAllocationPolicy is Instance IP allocation policy - 'default' (same as 'privateAndPublic'), 'private', or 'privateAndPublic'.
NodeIPAllocationPolicy *NodeIPAllocationPolicyEnum `json:"nodeIpAllocationPolicy,omitempty" yaml:"nodeIpAllocationPolicy,omitempty"`
BootDisk *GCPDiskSpec `json:"bootDisk,omitempty" yaml:"bootDisk,omitempty"`
MasterDataDisk *GCPDiskSpec `json:"masterDataDisk,omitempty" yaml:"masterDataDisk,omitempty"`
// Zones to limit this group to.
// If omitted, generator will automatically assign it to all available zones.
Zones []*string `json:"zones,omitempty" yaml:"zones,omitempty"`
// PinToZone is 'pin' if instances must be pinned to a single zone from the list, or 'span' if no pinning is necessary.
// 'default' is the same as 'pin' for stateful groups and 'span' for stateless.
PinToZone *InstanceGroupLocationSpecPinToZoneTypeEnum `json:"pinToZone,omitempty" yaml:"pinToZone,omitempty"`
}
GCPLocationSpec is google cloud location spec
type GCPLocationSpec struct {
// Reference to the secret object containing Google Cloud secrets to access
GCPApiAccessSecretRef *string `json:"gcpApiAccessSecretRef,omitempty" yaml:"gcpApiAccessSecretRef,omitempty"`
// Reference to the secret object containing public SSH key
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty"`
// Google Cloud Project ID
// If omitted, it will be populated automatically based on the secret.
ProjectID *string `json:"projectId,omitempty" yaml:"projectId,omitempty"`
// Google Cloud region
// refer to https://cloud.google.com/compute/docs/regions-zones/
Region *string `json:"region,omitempty" yaml:"region,omitempty"`
// Google Cloud region zones to be used for Kubernetes cluster in this location.
// If omitted, it will be populated automatically to all zones available for this project in this region.
Zones []*string `json:"zones,omitempty" yaml:"zones,omitempty"`
// VpcProjectID is a Google Cloud Project ID which owns the Existing VCP Network.
// If omitted - we assume network exists in the same project where cluster is created.
VpcProjectID *string `json:"vpcProjectId,omitempty" yaml:"vpcProjectId,omitempty"`
// VpcName is an existing VPC Network name.
// If omitted, a new VPC will be created, otherwise existing VPC will be used.
VpcName *string `json:"vpcName,omitempty" yaml:"vpcName,omitempty"`
// VpcCidrBlock is an IP address range for instances in VPC Network.
// If omitted, one of 16 standard private /16 IP ranges (172.16.0.0/16, ... , 172.31.0.0/16) will be assigned.
VpcCidrBlock *string `json:"vpcCidrBlock,omitempty" yaml:"vpcCidrBlock,omitempty"`
// VpcSubnetName is an existing VPC Network Subnet name.
// If omitted, a new subnet will be created, otherwise existing will be used.
VpcSubnetName *string `json:"vpcSubnetName,omitempty" yaml:"vpcSubnetName,omitempty"`
}
GCPLocationState represents state of GCP Location.
type GCPLocationState struct {
DeploymentName string `json:"deploymentName" yaml:"deploymentName"`
DeploymentState string `json:"deploymentState" yaml:"deploymentState"`
PrepareToCreateDeployment bool `json:"prepareToCreateDeployment" yaml:"prepareToCreateDeployment"`
InstanceGroups []string `json:"instanceGroups" yaml:"instanceGroups"`
DeletionAttempts int `json:"deletionAttempts" yaml:"deletionAttempts"`
LastInstGroupErrorTime *time.Time `json:"lastInstGroupErrorTime,omitempty" yaml:"lastInstGroupErrorTime,omitempty" bson:"lastInstGroupErrorTime,omitempty"`
}
GlobalRole is in global scope, not in any space
type GlobalRole struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// Rules holds all the PolicyRules for this Role
Rules []PolicyRule `json:"rules" yaml:"rules"`
}
GlobalRoleBinding is in the global scope
type GlobalRoleBinding struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// RoleRef can only reference a GlobalRole in the global space.
// If the RoleRef cannot be resolved, the Authorizer must return an error.
RoleRef RoleRef `json:"roleRef" yaml:"roleRef"`
// Subjects holds references to the objects the role applies to.
Subjects []Subject `json:"subjects" yaml:"subjects"`
}
GlobalRoleBindingListResult is a collection of GlobalRoleBindings
type GlobalRoleBindingListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of roleBindings
Items []GlobalRoleBinding `json:"items" yaml:"items"`
}
GlobalRoleListResult is a collection of GlobalRoles
type GlobalRoleListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of roles
Items []GlobalRole `json:"items" yaml:"items"`
}
GoogleGCSSecretStoreSpec - google cloud secret store spec
type GoogleGCSSecretStoreSpec struct {
LocationRef string `json:"locationRef,omitempty" yaml:"locationRef,omitempty"`
BucketName string `json:"bucketName,omitempty" yaml:"bucketName,omitempty"`
}
GrafanaSpec is a spec for Grafana installation
type GrafanaSpec struct {
// Enabled indicates if Grafana is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// Persistent indicates if storage is enabled.
Persistent *bool `json:"persistent,omitempty" yaml:"persistent,omitempty"`
// Size defines size of the storage, string, must follow k8s resource.Quantity rules.
Size *string `json:"size,omitempty" yaml:"size,omitempty"`
}
HostSpec is a spec for a host in bare-metal installations.
type HostSpec struct {
// Address is a reachable address for the host. Can be hostname or an IP-address.
Address *string `json:"address,omitempty" yaml:"address,omitempty" bson:"address,omitempty"`
// Reference to the secret object containing private SSH key
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty" bson:"sshKeySecretRef,omitempty"`
// Username to connect to ssh
Username *string `json:"username,omitempty" yaml:"username,omitempty" bson:"username,omitempty"`
}
HostState represents state of the host.
type HostState struct {
Address string `json:"address" yaml:"address"`
// Reference to the secret object containing private SSH key
SSHKeySecretRef *string `json:"sshKeySecretRef,omitempty" yaml:"sshKeySecretRef,omitempty" bson:"sshKeySecretRef,omitempty"`
// Username to connect to ssh
Username string `json:"username,omitempty" yaml:"username,omitempty" bson:"username,omitempty"`
// RegisterOk successfully registered
//+deprecated kublr agent provides node state information
RegisterOk Condition `json:"registerOk" yaml:"registerOk"`
// DeregisterOk successfully de-registered
//+deprecated kublr agent provides node state information
DeregisterOk Condition `json:"deregisterOk" yaml:"deregisterOk"`
}
IPRangeSpec - holds IP range spec
type IPRangeSpec struct {
// StartAddress is a start address of the IP range.
// Required
StartAddress *string `json:"startAddress,omitempty" yaml:"startAddress,omitempty"`
// EndAddress is an end address of the IP range.
// Required
EndAddress *string `json:"endAddress,omitempty" yaml:"endAddress,omitempty"`
}
IdentifiableEntity base interface for entity with ID and general metadata properties
type IdentifiableEntity interface {
GetID() string
SetID(string)
GetMetadata() ObjectMeta
GetTypeMeta() TypeMeta
SetResourceVersion(version int)
SetSpace(space string)
SetLabels(labels map[string]string)
GetResourceVersion() int
GetCreatedTimestamp() time.Time
GetUpdatedTimestamp() time.Time
SetCreatedTimestamp(t time.Time)
SetUpdatedTimestamp(t time.Time)
}
IngressFeatureState represents state of the ingress feature.
type IngressFeatureState struct {
// Address represents DNS name or IP address of load balancer.
// for Amazon - DNS name
// for Azure - IP address
Address string `json:"address" yaml:"address" bson:"address"`
// HTTPPort represents the port for the http connection.
HTTPPort int32 `json:"httpPort" yaml:"httpPort" bson:"httpPort"`
// HTTPSPort represents the port for the https connection.
HTTPSPort int32 `json:"httpsPort" yaml:"httpsPort" bson:"httpsPort"`
// ClusterPackageState represents package status
ClusterPackageState `json:",inline" yaml:",inline" bson:",inline"`
}
IngressLoadBalancer represents state of the ingress load balancer.
type IngressLoadBalancer struct {
// Address represents DNS name or IP address of load balancer.
// for Amazon - DNS name
// for Azure - IP address
Address string `json:"address,omitempty" yaml:"address,omitempty" bson:"address"`
// LoadBalancerOk represents condition of load balancer.
LoadBalancerOk *Condition `json:"loadBalancerOk,omitempty" yaml:"loadBalancerOk,omitempty" bson:"loadBalancerOk"`
// HTTPPort represents the port for the http connection.
HTTPPort int32 `json:"httpPort,omitempty" yaml:"httpPort,omitempty"`
// HTTPSPort represents the port for the https connection.
HTTPSPort int32 `json:"httpsPort,omitempty" yaml:"httpsPort,omitempty"`
}
InitCommand specifies command to be used for initialization of new node in the location state.
type InitCommand struct {
// NodeGroup name of the group to which command applies.
NodeGroup string `json:"nodeGroup" yaml:"nodeGroup"`
// NodeOrdinal is an ordinal within group.
NodeOrdinal int64 `json:"nodeOrdinal" yaml:"nodeOrdinal"`
// Command is a command to be executed to init a node.
Command string `json:"command" yaml:"command"`
}
InstanceGroupLocationSpec is a spec for an instance group location.
type InstanceGroupLocationSpec struct {
LocationRef *string `json:"locationRef,omitempty" yaml:"locationRef,omitempty"`
// Aws is a spec for AWS installations.
//+optional
Aws *AWSInstanceGroupLocationSpec `json:"aws,omitempty" yaml:"aws,omitempty"`
// Azure is a spec for Azure installations.
//+optional
Azure *AzureInstanceGroupLocationSpec `json:"azure,omitempty" yaml:"azure,omitempty"`
// Baremetal is a spec for bare-metal installation.
//+optional
Baremetal *BaremetalInstanceGroupLocationSpec `json:"baremetal,omitempty" yaml:"baremetal,omitempty"`
// Gcp is a spec to Google Cloud installations.
//+optional
Gcp *GCPInstanceGroupLocationSpec `json:"gcp,omitempty" yaml:"gcp,omitempty"`
// Vcd is a spec to VMware Cloud Director.
//+optional
Vcd *VCDInstanceGroupLocationSpec `json:"vcd,omitempty" yaml:"vcd,omitempty"`
// VSphere is a spec to VMWare vSphere.
//+optional
VSphere *VSphereInstanceGroupLocationSpec `json:"vSphere,omitempty" yaml:"vSphere,omitempty" bson:"vSphere,omitempty"`
// ProcessesSpec specifies seeder and agent parameters
ProcessesSpec `json:",inline" yaml:",inline" bson:",inline"`
}
InstanceGroupLocationSpecPinToZoneTypeEnum defines whether stateful group instances are pinned to zone for some cloud providers (currently AWS and GCP are supported).
type InstanceGroupLocationSpecPinToZoneTypeEnum string
InstanceGroupProcessesDescr specification of processes (seeder and agent) configuration for an instance group (POSSIBLY FUTURE: with potential variations by node ordinal and/or identifier)
type InstanceGroupProcessesDescr struct {
Group *ProcessesDescr `json:"group,omitempty" yaml:"group,omitempty"`
ByOrdinal []*ProcessesDescr `json:"byOrdinal,omitempty" yaml:"byOrdinal,omitempty"`
}
InstanceGroupRollingUpdateStrategySpec controls the desired behavior of rolling update.
type InstanceGroupRollingUpdateStrategySpec struct {
// The maximum number of nodes that can be unavailable during the update.
// Value can be an absolute number (ex: 5) or a percentage of desired nodes (ex: 10%).
// Absolute number is calculated from percentage by rounding down.
// Defaults to 1.
//+optional
MaxUnavailable *Int32OrString `json:"maxUnavailable,omitempty" yaml:"maxUnavailable,omitempty" bson:"maxUnavailable,omitempty"`
}
InstanceGroupSpec is a spec for instance group.
type InstanceGroupSpec struct {
Name *string `valid:"alphanum,required" json:"name,omitempty" yaml:"name,omitempty"`
// KublrVariant is a variant to use for this group.
// If omitted, generator will try to assign it automatically.
//+optional
KublrVariant *string `json:"kublrVariant,omitempty" yaml:"kublrVariant,omitempty"`
MinNodes *int `json:"minNodes,omitempty" yaml:"minNodes,omitempty"`
InitialNodes *int `json:"initialNodes,omitempty" yaml:"initialNodes,omitempty"`
MaxNodes *int `json:"maxNodes,omitempty" yaml:"maxNodes,omitempty"`
// Stateful indicates that this group is stateful. It means that Autoscaling MUST be disabled for this group.
// Also, all nodes will have stable identifiers in the group. (I.e. it will be a pet group, not cattle).
Stateful *bool `json:"stateful,omitempty" yaml:"stateful,omitempty"`
// Autoscaling is a flag indicating if autoscaling is enabled for this group or not.
Autoscaling *bool `json:"autoscaling,omitempty" yaml:"autoscaling,omitempty"`
// Locations is a spec for locations for this group.
// Only one location per group is currently supported.
// If omitted, generator will try to assign it automatically to the first available location.
//+optional
Locations []*InstanceGroupLocationSpec `json:"locations,omitempty" yaml:"locations,omitempty"`
// UpdateStrategy is used to update existing nodes
//+optional
UpdateStrategy *InstanceGroupUpdateStrategySpec `json:"updateStrategy,omitempty" yaml:"updateStrategy,omitempty" bson:"updateStrategy,omitempty"`
// ProcessesSpec specifies seeder and agent parameters overridable in InstanceGroupLocationSpec
ProcessesSpec `json:",inline" yaml:",inline" bson:",inline"`
// The maximum time in seconds for a instanceGroup to make progress before it is considered to be failed.
// Defaults to 1200s.
ProgressDeadlineSeconds *int `json:"progressDeadlineSeconds,omitempty" yaml:"progressDeadlineSeconds,omitempty" bson:"progressDeadlineSeconds,omitempty"`
}
InstanceGroupState is a state object for instance group
type InstanceGroupState struct {
// The name of instance group
Name string `valid:"alphanum,required" json:"name" yaml:"name" bson:"name"`
// UpdateStartTime is update start time
UpdateStartTime time.Time `json:"updateStartTime,omitempty" yaml:"updateStartTime,omitempty" bson:"updateStartTime"`
// BYOIGeneratedConfigs is specification of processes (seeder and agent) configuration
// This field is only populated for baremetal (BYOI) groups as it is only intended to be used for installation script generation.
// If seeder is used for this group, then only seeder part of the generated group config is saved here;
// otherwise agent config is saved.
//
// NB! json/yaml/bson serialization field name is different for backward compatibility.
BYOIGeneratedConfigs *InstanceGroupProcessesDescr `json:"generatedConfigs,omitempty" yaml:"generatedConfigs,omitempty" bson:"generatedConfigs,omitempty"`
// Total number of nodes found in this instance group
//+optional
Replicas int `json:"replicas" yaml:"replicas" bson:"replicas"`
// Total number of ready nodes in this instance group that have the desired configuration.
//+optional
UpdatedReplicas int `json:"updatedReplicas" yaml:"updatedReplicas" bson:"updatedReplicas"`
// Total number of ready nodes in this instance group.
//+optional
ReadyReplicas int `json:"readyReplicas" yaml:"readyReplicas" bson:"readyReplicas"`
// Total number of unavailable nodes in this instance group
// This is the total number of nodes that are running but not yet in ready state or nodes
// that still have not been created.
//+optional
UnavailableReplicas int `json:"unavailableReplicas" yaml:"unavailableReplicas" bson:"unavailableReplicas"`
// KublrAgentSha256 is checksum of binary Kublr agent that is set in manifest.yaml to Seeder
//+optional
KublrAgentSha256 string `json:"kublrAgentSha256,omitempty" yaml:"kublrAgentSha256,omitempty" bson:"kublrAgentSha256,omitempty"`
// KublrAgentExtSha256 is checksum of extensions of Kublr agent that is set in manifest.yaml to Seeder
//+optional
KublrAgentExtSha256 map[string]string `json:"kublrAgentExtSha256,omitempty" yaml:"kublrAgentExtSha256,omitempty" bson:"kublrAgentExtSha256,omitempty"`
// KublrAgentCfgSha256 is checksum of configuration of Kublr agent that is set in manifest.yaml to Seeder
// This field can be used only for stateless groups
//+optional
KublrAgentCfgSha256 string `json:"kublrAgentCfgSha256,omitempty" yaml:"kublrAgentCfgSha256,omitempty" bson:"kublrAgentCfgSha256,omitempty"`
// KublrAgentSha256Desired is checksum of binary Kublr agent that should be set after update cluster
//+optional
KublrAgentSha256Desired string `json:"kublrAgentSha256Desired,omitempty" yaml:"kublrAgentSha256Desired,omitempty" bson:"kublrAgentSha256Desired,omitempty"`
// KublrAgentExtSha256Desired is checksum of extensions of Kublr agent that should be set after update cluster
//+optional
KublrAgentExtSha256Desired map[string]string `json:"kublrAgentExtSha256Desired,omitempty" yaml:"kublrAgentExtSha256Desired,omitempty" bson:"kublrAgentExtSha256Desired,omitempty"`
// KublrAgentCfgSha256Desired is checksum of configuration of Kublr agent that should be set after update cluster
// This field can be used only for stateless groups
//+optional
KublrAgentCfgSha256Desired string `json:"kublrAgentCfgSha256Desired,omitempty" yaml:"kublrAgentCfgSha256Desired,omitempty" bson:"kublrAgentCfgSha256Desired,omitempty"`
//Nodes is nodes status in this group
Nodes []NodeState `json:"nodes,omitempty" yaml:"nodes,omitempty" bson:"nodes,omitempty"`
// KublrAgentSource specifies URL and credentials for Kublr agent binary
// This field is only used during cluster update.
KublrAgentSource *SourceDescr `json:"kublrAgentSource,omitempty" yaml:"kublrAgentSource,omitempty" bson:"kublrAgentSource,omitempty"`
// KublrAgentExtSource specifies a map of sources (URL + credentials) for Kublr agent extensions to use
// This field is only used during cluster update.
KublrAgentExtSource map[string]*SourceDescr `json:"kublrAgentExtSource,omitempty" yaml:"kublrAgentExtSource,omitempty" bson:"kublrAgentExtSource,omitempty"`
}
InstanceGroupUpdateStrategySpec describes how to update existing nodes
type InstanceGroupUpdateStrategySpec struct {
// Type of InstanceGroupUpdateStrategySpec. Currently the only supported strategy is "RollingUpdate".
// Default is RollingUpdate.
//+optional
Type InstanceGroupUpdateStrategyType `json:"type,omitempty" yaml:"type,omitempty" bson:"type,omitempty"`
// Rolling update config params.
// Present only if Type = RollingUpdate.
//+optional
RollingUpdate *InstanceGroupRollingUpdateStrategySpec `json:"rollingUpdate,omitempty" yaml:"rollingUpdate,omitempty" bson:"rollingUpdate,omitempty"`
// DrainStrategy holds the parameters to drain node
//+optional
DrainStrategy *DrainStrategySpec `json:"drainStrategy,omitempty" yaml:"drainStrategy,omitempty" bson:"drainStrategy,omitempty"`
}
InstanceGroupUpdateStrategyType is type of update strategy for nodes in instance groups.
type InstanceGroupUpdateStrategyType string
Int32OrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.
type Int32OrString struct {
Type Type
IntVal int32
StrVal string
}
KcpConfig is in the global scope
type KcpConfig struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
Data interface{} `json:"data,omitempty" yaml:"data,omitempty"`
}
KcpConfigListResult is a collection of KcpConfig
type KcpConfigListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of roleBindings
Items []KcpConfig `json:"items" yaml:"items"`
}
KubeDbFeatureSpec is a spec for kubeDb.
type KubeDbFeatureSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty" bson:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty" bson:"values,omitempty"`
// Enabled is bool value for enable feature
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty" bson:"enabled,omitempty"`
}
KubeDbFeatureState represents state of the Kubedb feature.
type KubeDbFeatureState struct {
// Condition represents status of the kubedb feature.
Condition Condition `json:"condition" yaml:"condition" bson:"condition"`
// ClusterPackageState represents package status
ClusterPackageState `json:",inline" yaml:",inline" bson:",inline"`
}
KubeconfigSpec is a Kubeconfig Secret
type KubeconfigSpec struct {
// KubeconfigYamlFile kubeconfig file content in yaml format
//+optional
KubeconfigYamlFile string `json:"kubeconfigYamlFile,omitempty" yaml:"kubeconfigYamlFile,omitempty" bson:"kubeconfigYamlFile,omitempty"`
}
KublrAgentSecretStoreAccessKeySpec specification of an access key for an agent secret store
type KublrAgentSecretStoreAccessKeySpec struct {
// AccessKeyID id of the access key
AccessKeyID *string `json:"accessKeyId,omitempty" yaml:"accessKeyId,omitempty" bson:"accessKeyId,omitempty"`
// SecretAccessKey secret of the access key
SecretAccessKey *string `json:"secretAccessKey,omitempty" yaml:"secretAccessKey,omitempty" bson:"secretAccessKey,omitempty"`
// Role associated with this access key; currently one of 'master', 'node', or 'client'
Role *string `json:"role,omitempty" yaml:"role,omitempty" bson:"role,omitempty"`
}
KublrAgentSecretStoreEndpointSpec specification for a kublr agent secret store endpoint
type KublrAgentSecretStoreEndpointSpec struct {
// Ordinal - master ordinal of the peer with this address.
// If not specified, default value of -1 is used
//+optional
Ordinal *int `json:"ordinal,omitempty" yaml:"ordinal,omitempty" bson:"ordinal,omitempty"`
// StaticAddress the static address for this endpoint
StaticAddress *string `json:"staticAddress,omitempty" yaml:"staticAddress,omitempty" bson:"staticAddress,omitempty"`
// Port to use for this endpoind;
// This value overrides the port specified in KublrAgentSecretStoreSpec structure
//+optional
Port *int `json:"port,omitempty" yaml:"port,omitempty" bson:"port,omitempty"`
// Priority group for the address.
// - If "priority" field is omitted, "default" value will be used.
// - Clients will test groups of endpoints in the lexicografical order of priority values:
// endpoints with priority starting with "a" will be tested before endpoints with priority starting with "z";
// - Usage order for endpoints with the same priority will be randomized for every call;
// - Peers will use the same approach with groups of endpoints with the same ordinal.
//+optional
Priority *string `json:"priority,omitempty" yaml:"priority,omitempty" bson:"priority,omitempty"`
}
KublrAgentSecretStoreSpec is a spec for secret store based on kublr agent self-storage This is mostly used for bare-metal and BYOI deployments
type KublrAgentSecretStoreSpec struct {
Endpoints map[string]*KublrAgentSecretStoreEndpointSpec `json:"endpoints,omitempty" yaml:"endpoints,omitempty" bson:"endpoints,omitempty"`
// Port to use for the store API endpoint
// If not specified, default value of 11251 is used
//+optional
Port *int `json:"port,omitempty" yaml:"port,omitempty" bson:"port,omitempty"`
// TLSCerts TLS/HTTPS certificates for the store API
TLSCerts *string `json:"tlsCerts,omitempty" yaml:"tlsCerts,omitempty" bson:"tlsCerts,omitempty"`
// TLSKey TLS/HTTPS key for the store API
TLSKey *string `json:"tlsKey,omitempty" yaml:"tlsKey,omitempty" bson:"tlsKey,omitempty"`
// AccessKeys contains access and secret keys that should be configured for the store.
// At least one key with 'master' role and one key with 'node' role must be defined.
// If user does not provide one of them, generator will add missing ones
// automatically.
AccessKeys []*KublrAgentSecretStoreAccessKeySpec `json:"accessKeys,omitempty" yaml:"accessKeys,omitempty" bson:"accessKeys,omitempty"`
}
KublrOperatorSpec is a spec for kublr-operator.
type KublrOperatorSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty" bson:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty" bson:"values,omitempty"`
// Enabled is bool value for enable feature
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty" bson:"enabled,omitempty"`
}
License is in global scope, not in any space
type License struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// Spec holds parsed information about this License
Spec LicenseSpec `json:"spec" yaml:"spec" bson:"spec"`
// RawLicense holds signed raw license to verify this License
RawLicense string `json:"rawLicense" yaml:"rawLicense" bson:"rawLicense"`
// Status holds information that describes a license status
Status LicenseStatus `json:"status" yaml:"status" bson:"status"`
}
LicenseListResult is a collection of Licenses
type LicenseListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of licenses
Items []License `json:"items" yaml:"items"`
}
LicenseRule holds information that describes a license rule and information about what the rule applies to or which space the rule applies to.
type LicenseRule struct {
// Resource is a resource this rule applies to. '*' represents all resources.
Resource string `json:"resource,omitempty" yaml:"resource,omitempty" bson:"resource,omitempty"`
// Space defines the name of the space
// Not all resources are required to be scoped to a space - the value of this field for
// those resources will be empty or "*".
Space string `json:"space,omitempty" yaml:"space,omitempty" bson:"space,omitempty"`
// Values represents license rule custom values
Values LicenseRuleValues `json:"values,omitempty" yaml:"values,omitempty" bson:"values,omitempty"`
// ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.
//+optional
ResourceNames []string `json:"resourceNames,omitempty" yaml:"resourceNames,omitempty" bson:"resourceNames,omitempty"`
// ViolationAction holds action that activated on forbidden action, for example "warn", "forbid"
ViolationAction string `json:"violationAction" yaml:"violationAction"`
}
LicenseRuleValues represents license rule values
type LicenseRuleValues map[string]interface{}
LicenseSpec holds information that describes a license
type LicenseSpec struct {
// LicenseID holds unique id of license for Kublr Sales, for example KUBLR.1232-1232-434F-EREG.01
LicenseID string `json:"licenseId" yaml:"licenseId" bson:"licenseId"`
// Description holds extra information about the license, f.e. kind of license, for example "Trial", "Perpetual", "Subscription:Annual"
Description string `json:"description,omitempty" yaml:"description,omitempty" bson:"description,omitempty"`
// CreatedAt holds creation date when license was generated
CreatedAt time.Time `json:"createdAt,omitempty" yaml:"createdAt,omitempty" bson:"createdAt,omitempty"`
// LicenseSchemeVersion holds version of scheme of license
LicenseSchemeVersion string `json:"licenseSchemeVersion,omitempty" yaml:"licenseSchemeVersion,omitempty" bson:"licenseSchemeVersion,omitempty"`
// KublrInstallationID holds unique id of Kublr Installation
KublrInstallationID string `json:"kublrInstallationId,omitempty" yaml:"kublrInstallationId,omitempty" bson:"kublrInstallationId,omitempty"`
// SupportedKublrVersions holds comma-separated Kublr Version where license is active, for example "1.22.*,1.23.0", "1.23.*", "1.28.0"
SupportedKublrVersions string `json:"supportedKublrVersions,omitempty" yaml:"supportedKublrVersions,omitempty" bson:"supportedKublrVersions,omitempty"`
// ExpirationDate holds date when license will be expired
ExpirationDate time.Time `json:"expirationDate,omitempty" yaml:"expirationDate,omitempty" bson:"expirationDate,omitempty"`
// ShutdownGracePeriod holds period after expiration when Kublr blocks working with the license
ShutdownGracePeriod *int `json:"shutdownGracePeriod,omitempty" yaml:"shutdownGracePeriod,omitempty" bson:"shutdownGracePeriod,omitempty"`
// ExpirationPeriodInDays holds period when license will be expired after install of Kublr
ExpirationPeriodInDays *int `json:"expirationPeriodInDays,omitempty" yaml:"expirationPeriodInDays,omitempty" bson:"expirationPeriodInDays,omitempty"`
// Rules holds all the LicenseRules for this License. What actions are possible with the license?
Rules []LicenseRule `json:"rules" yaml:"rules" bson:"rules"`
}
LicenseStatus holds information that describes a license status
type LicenseStatus struct {
// Valid is action valid?
Valid bool `json:"valid,omitempty" yaml:"valid,omitempty" bson:"valid,omitempty"`
// Reasons holds reasons why action is invalid
Reasons []string `json:"reasons,omitempty" yaml:"reasons,omitempty" bson:"reasons,omitempty"`
// Active holds flag that the License is active. Int is used for using atomic xor update in mongo. 0 - inactive, 1 - active.
Active int `json:"active" yaml:"active" bson:"active"`
// CalculatedExpirationDate holds calculated date when license will be expired
CalculatedExpirationDate time.Time `json:"calculatedExpirationDate,omitempty" yaml:"calculatedExpirationDate,omitempty" bson:"calculatedExpirationDate,omitempty"`
// CalculatedShutdownDate holds calculated date when Kublr blocks working with the license
CalculatedShutdownDate time.Time `json:"calculatedShutdownDate,omitempty" yaml:"calculatedShutdownDate,omitempty" bson:"calculatedShutdownDate,omitempty"`
}
LicenseViolationListResult is a collection of Violations of Licenses
type LicenseViolationListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of licenses
Items []error `json:"items" yaml:"items"`
}
ListResult holds result of requests returning slice of objects. This is a generic result which can be used only if result should not be processed in any other way.
type ListResult struct {
Total int `json:"total" yaml:"total"`
Items []interface{} `json:"items" yaml:"items"`
}
LoadBalancerSKU Azure load balancer SKU (‘Basic’ or ‘Standard’)
Since version 1.20
type LoadBalancerSKU string
LocalPathProvisioner is configuration for local host path provisioner
type LocalPathProvisioner struct {
// Enabled this feature
// This feature is enabled by default for baremetal and vCloud Director clusters
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty" bson:"enabled,omitempty"`
// DefaultPath is the default path to store the data on each node.
// Root directory (/) is prohibited
// Default: /var/lib/kublr/pvc
DefaultPath string `json:"defaultPath,omitempty" yaml:"defaultPath,omitempty" bson:"defaultPath,omitempty"`
}
LocationSpec is a spec for a location. Only one spec should be not-nil inside.
type LocationSpec struct {
// Name is a name of the location.
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
// Aws specifies AWS specific details.
//+optional
Aws *AWSLocationSpec `json:"aws,omitempty" yaml:"aws,omitempty"`
// Azure specifies Azure specific details.
//+optional
Azure *AzureLocationSpec `json:"azure,omitempty" yaml:"azure,omitempty"`
// Baremetal specifies bare-metal specific details.
//+optional
Baremetal *BaremetalLocationSpec `json:"baremetal,omitempty" yaml:"baremetal,omitempty"`
// Gcp specifies Google Cloud specific details
//+optional
Gcp *GCPLocationSpec `json:"gcp,omitempty" yaml:"gcp,omitempty"`
// Vcd specifiies VMware cloud director specific details,
//+optional
Vcd *VCDLocationSpec `json:"vcd,omitempty" yaml:"vcd,omitempty"`
// VSphere specifiies VMWare vSphere specific details,
//+optional
VSphere *VSphereLocationSpec `json:"vSphere,omitempty" yaml:"vSphere,omitempty" bson:"vSphere,omitempty"`
// ProcessesSpec specifies seeder and agent parameters overridable in InstanceGroupSpec, and InstanceGroupLocationSpec
ProcessesSpec `json:",inline" yaml:",inline" bson:",inline"`
}
LocationState represents state of the location.
type LocationState struct {
LocationRef *string `json:"locationRef,omitempty" yaml:"locationRef,omitempty"`
// Aws stores location state for AWS installations.
//+optional
Aws *AWSLocationState `json:"aws,omitempty" yaml:"aws,omitempty"`
// Baremetal stores location state for baremetal installations.
//+optional
// Azure stores location state for Azure installations.
//+optional
Azure *AzureLocationState `json:"azure,omitempty" yaml:"azure,omitempty"`
// Baremetal stores location state for on-prem installations.
//+optional
Baremetal *BaremetalLocationState `json:"baremetal,omitempty" yaml:"baremetal,omitempty"`
// Gcp stores location state for GCP installations.
//+optional
Gcp *GCPLocationState `json:"gcp,omitempty" yaml:"gcp,omitempty"`
// Vcd stores location state for VMware vCD installations.
//+optional
Vcd *VCDLocationState `json:"vcd,omitempty" yaml:"vcd,omitempty"`
// VSphere stores location state for VMWare vSphere installations.
//+optional
VSphere *VSphereLocationState `json:"vSphere,omitempty" yaml:"vSphere,omitempty" bson:"vSphere"`
LocationOk *Condition `json:"locationOk,omitempty" yaml:"locationOk,omitempty"`
Conditions []*Condition `json:"conditions,omitempty" yaml:"conditions,omitempty"`
CreateRequested time.Time `json:"createRequested,omitempty" yaml:"createRequested,omitempty"`
Created time.Time `json:"created,omitempty" yaml:"created,omitempty"`
UpdateRequested time.Time `json:"updateRequested,omitempty" yaml:"updateRequested,omitempty"`
Updated time.Time `json:"updated,omitempty" yaml:"updated,omitempty"`
DeleteRequested time.Time `json:"deleteRequested,omitempty" yaml:"deleteRequested,omitempty"`
Deleted time.Time `json:"deleted,omitempty" yaml:"deleted,omitempty"`
InterruptionRequested time.Time `json:"interruptionRequested,omitempty" yaml:"interruptionRequested,omitempty"`
Interrupted time.Time `json:"interrupted,omitempty" yaml:"interrupted,omitempty"`
// KubernetesAPIEndpoints API endpoints provisioned in this location
KubernetesAPIEndpoints []string `json:"kubernetesApiEndpoints,omitempty" yaml:"kubernetesApiEndpoints,omitempty"`
// KubernetesAPIEndpointURLs API endpoint URLs provisioned in this location
KubernetesAPIEndpointURLs []string `json:"kubernetesApiEndpointUrls,omitempty" yaml:"kubernetesApiEndpointUrls,omitempty"`
}
LoggingFeatureState represents state of the logging feature.
type LoggingFeatureState struct {
// KibanaEndpoint represents the endpoint address for kibana service.
KibanaEndpoint string `json:"kibanaEndpoint" yaml:"kibanaEndpoint" bson:"kibanaEndpoint"`
// RabbitmqEndpoint represents the endpoint address for rabbitmq service.
RabbitmqEndpoint string `json:"rabbitmqEndpoint" yaml:"rabbitmqEndpoint" bson:"rabbitmqEndpoint"`
// Condition represents status of the logging feature.
//+deprecated
Condition Condition `json:"condition" yaml:"condition" bson:"condition"`
// ClusterPackageState represents package status
ClusterPackageState `json:",inline" yaml:",inline" bson:",inline"`
}
MasterLBAllocationPolicyEnum -
type MasterLBAllocationPolicyEnum string
MonitoringFeatureState represents state of the app-monitoring feature.
type MonitoringFeatureState struct {
// Condition represents status of the app-monitoring feature.
Condition Condition `json:"condition" yaml:"condition" bson:"condition"`
// AlertManagerEndpoint represents the endpoint address for AlertManager service.
AlertManagerEndpoint string `json:"alertManagerEndpoint" yaml:"alertManagerEndpoint" bson:"alertManagerEndpoint"`
// AlertManagerServiceName represents AlertManager service name.
AlertManagerServiceName string `json:"alertManagerServiceName" yaml:"alertManagerServiceName" bson:"alertManagerServiceName"`
// GrafanaEndpoint represents the endpoint address for grafana service.
GrafanaEndpoint string `json:"grafanaEndpoint" yaml:"grafanaEndpoint" bson:"grafanaEndpoint"`
// GrafanaServiceName represents Grafana service name.
GrafanaServiceName string `json:"grafanaServiceName" yaml:"grafanaServiceName" bson:"grafanaServiceName"`
// GrafanaSecretName represents Grafana secret name.
GrafanaSecretName string `json:"grafanaSecretName" yaml:"grafanaSecretName" bson:"grafanaSecretName"`
// PrometheusEndpoint represents the endpoint address for Prometheus service.
PrometheusEndpoint string `json:"prometheusEndpoint" yaml:"prometheusEndpoint" bson:"prometheusEndpoint"`
// PrometheusServiceName represents Prometheus service name.
PrometheusServiceName string `json:"prometheusServiceName" yaml:"prometheusServiceName" bson:"prometheusServiceName"`
// ClusterPackageState represents package status
ClusterPackageState `json:",inline" yaml:",inline" bson:",inline"`
}
MonitoringPlatformClientSpec is a specification for Centralized Monitoring Client installation (installs on KCP managed clusters)
type MonitoringPlatformClientSpec struct {
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
Prometheus *PrometheusSpec `json:"prometheus,omitempty" yaml:"prometheus,omitempty"`
}
MonitoringPlatformSpec is a specification for Centralized Monitoring Host installation (installs on KCP cluster)
type MonitoringPlatformSpec struct {
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// AlertManager is a spec for AlertManager installation
AlertManager *AlertManagerSpec `json:"alertmanager,omitempty" yaml:"alertmanager,omitempty"`
// Prometheus is a spec for Prometheus installation
Prometheus *PrometheusSpec `json:"prometheus,omitempty" yaml:"prometheus,omitempty"`
// Grafana is a spec for Grafana installation
Grafana *GrafanaSpec `json:"grafana,omitempty" yaml:"grafana,omitempty"`
}
MonitoringSelfHostedSpec is a specification for Self-Hosted Monitoring installation
type MonitoringSelfHostedSpec struct {
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// AlertManager is a spec for AlertManager installation
AlertManager *AlertManagerSpec `json:"alertmanager,omitempty" yaml:"alertmanager,omitempty"`
// Prometheus is a spec for Prometheus installation
Prometheus *PrometheusSpec `json:"prometheus,omitempty" yaml:"prometheus,omitempty"`
// Grafana is a spec for Grafana installation
Grafana *GrafanaSpec `json:"grafana,omitempty" yaml:"grafana,omitempty"`
}
NetworkSpec is a spec of network.
type NetworkSpec struct {
Provider *string `json:"provider,omitempty" yaml:"provider,omitempty"`
ClusterCIDR *string `json:"clusterCIDR,omitempty" yaml:"clusterCIDR,omitempty"`
ServiceCIDR *string `json:"serviceCIDR,omitempty" yaml:"serviceCIDR,omitempty"`
PodCIDR *string `json:"podCIDR,omitempty" yaml:"podCIDR,omitempty"`
MasterIP *string `json:"masterIP,omitempty" yaml:"masterIP,omitempty"`
DNSIp *string `json:"dnsIP,omitempty" yaml:"dnsIP,omitempty"`
DNSDomain *string `json:"dnsDomain,omitempty" yaml:"dnsDomain,omitempty"`
APIServerSecurePort *int `json:"apiServerSecurePort,omitempty" yaml:"apiServerSecurePort,omitempty"`
UpstreamNameservers []*string `json:"upstreamNameservers,omitempty" yaml:"upstreamNameservers,omitempty"`
// LocalDnsIP is IP address for dns caching agent on cluster nodes to improve DNS performance
//+optional
LocalDNSIP *string `json:"localDnsIP,omitempty" yaml:"localDnsIP,omitempty" bson:"localDnsIP,omitempty"`
// DnsProvider can be coredns or kubedns
//+optional
DNSProvider *string `json:"dnsProvider,omitempty" yaml:"dnsProvider,omitempty" bson:"dnsProvider,omitempty"`
// EnableLocalDNS is a flag that indicates the use of a DNS caching agent on a cluster node.
EnableLocalDNS *bool `json:"enableLocalDns,omitempty" yaml:"enableLocalDns,omitempty" bson:"enableLocalDns,omitempty"`
// StubDomains define dns servers to delegate dns zone
//+optional
StubDomains []*StubDomainSpec `json:"stubDomains,omitempty" yaml:"stubDomains,omitempty" bson:"stubDomains,omitempty"`
}
NginxClusterIngressControllerSpec is a spec for NGINX Ingress Controller.
type NginxClusterIngressControllerSpec struct {
Acme *AcmeSpec `json:"acme,omitempty" yaml:"acme,omitempty" bson:"acme,omitempty"`
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty" bson:"enabled,omitempty"`
// UseHostPort enables using DaemonSet and hostPort for Pod
// That allows to use a different host port for ingress controller
UseHostPort bool `json:"useHostPort,omitempty" yaml:"useHostPort,omitempty" bson:"useHostPort,omitempty"`
// HostPortHTTP defines http host port for ingress controller
// This field is used only when UseHostPort is enabled.
// Default: 80
HostPortHTTP *int32 `json:"hostPortHttp,omitempty" yaml:"hostPortHttp,omitempty" bson:"hostPortHttp,omitempty"`
// HostPortHTTPS defines https host port for ingress controller
// This field is used only when UseHostPort is enabled.
// Default: 443
HostPortHTTPS *int32 `json:"hostPortHttps,omitempty" yaml:"hostPortHttps,omitempty" bson:"hostPortHttps,omitempty"`
// LoadBalancerAddress is the load balancing address for ingress controller
//+optional
LoadBalancerAddress *string `json:"loadBalancerAddress,omitempty" yaml:"loadBalancerAddress,omitempty" bson:"loadBalancerAddress,omitempty"`
// LoadBalancerPortHTTP defines load balancing http port for ingress controller
// Default: 80
LoadBalancerPortHTTP *int32 `json:"loadBalancerPortHttp,omitempty" yaml:"loadBalancerPortHttp,omitempty" bson:"loadBalancerPortHttp,omitempty"`
// HostPortHTTPS defines load balancing https port for ingress controller
// Default: 443
LoadBalancerPortHTTPS *int32 `json:"loadBalancerPortHttps,omitempty" yaml:"loadBalancerPortHttps,omitempty" bson:"loadBalancerPortHttps,omitempty"`
}
NodeCondition represents node condition
type NodeCondition struct {
// Type is the type of the condition.
Type NodeConditionType `json:"type,omitempty" yaml:"type,omitempty" bson:"type,omitempty"`
// Status is the status of the condition.
// Can be True, False, Unknown.
Status ConditionStatus `json:"status,omitempty" yaml:"status,omitempty" bson:"status,omitempty"`
// Last time we probed the condition.
//+optional
LastHeartbeatTime time.Time `json:"lastHeartbeatTime,omitempty" yaml:"lastHeartbeatTime,omitempty" bson:"lastHeartbeatTime,omitempty"`
// Last time the condition transitioned from one status to another.
//+optional
LastTransitionTime time.Time `json:"lastTransitionTime,omitempty" yaml:"lastTransitionTime,omitempty" bson:"lastTransitionTime,omitempty"`
// Unique, one-word, CamelCase reason for the condition's last transition.
//+optional
Reason string `json:"reason,omitempty" yaml:"reason,omitempty" bson:"reason,omitempty"`
// Human-readable message indicating details about last transition.
//+optional
Message string `json:"message,omitempty" yaml:"message,omitempty" bson:"message,omitempty"`
}
NodeConditionType represents the type of the node condition
type NodeConditionType string
NodeDeletingState represents available node’s states during deleting
type NodeDeletingState string
NodeIPAllocationPolicyEnum - enum for policy
type NodeIPAllocationPolicyEnum string
NodePhase is a label for the condition of a node at the current time.
type NodePhase string
NodeState is a state object for the node of cluster
type NodeState struct {
// Identifier of node
// +required
Identifier string `json:"identifier" yaml:"identifier" bson:"identifier"`
// Ordinal of node uses only for stateful groups
//+optional
Ordinal *int `json:"ordinal,omitempty" yaml:"ordinal,omitempty" bson:"ordinal,omitempty"`
// The name of kubernetes node
//+optional
Name string `json:"name,omitempty" yaml:"name,omitempty" bson:"name,omitempty"`
// Phase represents the current phase of machine actuation.
// The phase of a Node is a simple, high-level summary of where the Node is in its lifecycle.
// The conditions array, the reason and message fields, and the individual container status
// arrays contain more detail about the node status.
// There are five possible phase values: Pending, Running, Updating, Terminating, Failed, Unknown.
//+optional
Phase NodePhase `json:"phase,omitempty" yaml:"phase,omitempty" bson:"phase,omitempty"`
// Current service state of node.
Conditions []NodeCondition `json:"conditions,omitempty" yaml:"conditions,omitempty" bson:"conditions,omitempty"`
// KublrAgentSha256Received is checksum of binary Kublr agent received from Seeder
KublrAgentSha256Received string `json:"kublrAgentSha256Received,omitempty" yaml:"kublrAgentSha256Received,omitempty" bson:"kublrAgentSha256Received,omitempty"`
// KublrAgentExtSha256Received is checksum of extensions of Kublr agent received from Seeder
KublrAgentExtSha256Received map[string]string `json:"kublrAgentExtSha256Received,omitempty" yaml:"kublrAgentExtSha256Received,omitempty" bson:"kublrAgentExtSha256Received,omitempty"`
// KublrAgentCfgSha256Received is checksum of configuration of Kublr agent received from Seeder
KublrAgentCfgSha256Received string `json:"kublrAgentCfgSha256Received,omitempty" yaml:"kublrAgentCfgSha256Received,omitempty" bson:"kublrAgentCfgSha256Received,omitempty"`
// KublrAgentSha256 is checksum of binary Kublr agent that is set in manifest.yaml to Seeder
//+optional
KublrAgentSha256 string `json:"kublrAgentSha256,omitempty" yaml:"kublrAgentSha256,omitempty" bson:"kublrAgentSha256,omitempty"`
// KublrAgentExtSha256 is checksum of extensions of Kublr agent that is set in manifest.yaml to Seeder
KublrAgentExtSha256 map[string]string `json:"kublrAgentExtSha256,omitempty" yaml:"kublrAgentExtSha256,omitempty" bson:"kublrAgentExtSha256,omitempty"`
// KublrAgentCfgSha256 is checksum of configuration of Kublr agent that is set in manifest.yaml to Seeder
//+optional
KublrAgentCfgSha256 string `json:"kublrAgentCfgSha256,omitempty" yaml:"kublrAgentCfgSha256,omitempty" bson:"kublrAgentCfgSha256,omitempty"`
// KublrAgentCfgSha256Desired is checksum of configuration of Kublr agent that should be set after update cluster
// This field is used only in stateful and onprem instace groups
KublrAgentCfgSha256Desired string `json:"kublrAgentCfgSha256Desired,omitempty" yaml:"kublrAgentCfgSha256Desired,omitempty" bson:"kublrAgentCfgSha256Desired,omitempty"`
// KublrAgentSource specifies URL and credentials for Kublr agent binary
// This field is only used during cluster update.
KublrAgentSource *SourceDescr `json:"kublrAgentSource,omitempty" yaml:"kublrAgentSource,omitempty" bson:"kublrAgentSource,omitempty"`
// KublrAgentExtSource specifies a map of sources (URL + credentials) for Kublr agent extensions to use
KublrAgentExtSource map[string]*SourceDescr `json:"kublrAgentExtSource,omitempty" yaml:"kublrAgentExtSource,omitempty" bson:"kublrAgentExtSource,omitempty"`
}
NodeToDelete contains resources IDs needed to delete node during the execution of the Update command
type NodeToDelete struct {
VMID string `json:"vmId" yaml:"vmId"`
OsDiskID string `json:"osDiskId" yaml:"osDiskId"`
NetworkInterfaceID string `json:"networkInterfaceId" yaml:"networkInterfaceId"`
State NodeDeletingState `json:"state" yaml:"state"`
}
ObjectMeta is kublr object metadata
type ObjectMeta struct {
Name string `valid:"alphanum,required" json:"name" yaml:"name"`
CreatedTimestamp time.Time `json:"createdAt,omitempty" yaml:"createdAt,omitempty"`
UpdatedTimestamp time.Time `json:"updatedAt,omitempty" yaml:"updatedAt,omitempty"`
// Map of string keys and values that can be used to organize and categorize (scope and select) objects.
//+optional
Labels map[string]string `json:"labels,omitempty" yaml:"labels,omitempty"`
// Space defines the name of the space
// Not all objects are required to be scoped to a space - the value of this field for
// those objects will be empty.
Space string `json:"space,omitempty" yaml:"space,omitempty" bson:"space,omitempty"`
// An opaque value that represents the internal version of this object that can
// be used by clients to determine when objects have changed. May be used for optimistic
// concurrency, change detection, and the watch operation on a resource or set of resources.
// Clients must treat these values as opaque and passed unmodified back to the server.
ResourceVersion int `json:"resourceVersion,omitempty" yaml:"resourceVersion,omitempty" bson:"resourceVersion,omitempty"`
// List of objects depended by this object.
//+optional
OwnerReferences []OwnerReference `json:"ownerReferences,omitempty" yaml:"ownerReferences,omitempty" bson:"ownerReferences,omitempty"`
}
ObjectReference is a reference to the associated object.
type ObjectReference struct {
TypeMeta `json:",inline" yaml:",inline"`
Namespace string `json:"namespace" yaml:"namespace"`
Name string `json:"name" yaml:"name"`
UID string `json:"uid" yaml:"uid"`
}
Owner represents owner of the entity.
type Owner struct {
// UserID holds ID of the owner.
UserID string `json:"userId" bson:"userId,omitempty" yaml:"userId"`
}
OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same space, so there is no space field.
type OwnerReference struct {
// API version of the referent.
APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty" bson:"apiVersion,omitempty"`
// Kind of the referent.
Kind string `json:"kind" yaml:"kind" bson:"kind"`
// Name of the referent.
Name string `json:"name" yaml:"name" bson:"name"`
// ID of the referent.
ID string `json:"id" yaml:"id" bson:"id"`
}
OwnerReferenceFilter describes filter for OwnerReference
type OwnerReferenceFilter func(OwnerReference) bool
OwnerableEntity described general owner model
type OwnerableEntity interface {
IdentifiableEntity
GetOwner() *Owner
SetOwner(owner *Owner)
}
PackageStates represents the state of the cluster packages.
type PackageStates struct {
// Packages is the state of all clustered packages
Packages map[string]*ClusterPackageState `json:"packages,omitempty" yaml:"packages,omitempty" bson:"packages,omitempty"`
}
PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which space the rule applies to.
type PolicyRule struct {
// Resources is a list of resources this rule applies to. '*' represents all resources.
Resources []string `json:"resources" yaml:"resources"`
// Action constraints
// 1. allowed actions - e.g. "get", "list", "put", "post", "delete"
// 2. "*" means all actions allowed
Verbs []string `json:"verbs" yaml:"verbs"`
// ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.
//+optional
ResourceNames []string `json:"resourceNames,omitempty" yaml:"resourceNames,omitempty" bson:"resourceNames,omitempty"`
// NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path
// Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding.
// Rules can either apply to API resources (such as "clusters" or "secrets") or non-resource URL paths (such as "/metrics"), but not both.
//+optional
NonResourceURLs []string `json:"nonResourceURLs,omitempty" yaml:"nonResourceURLs,omitempty" bson:"nonResourceURLs,omitempty"`
}
ProcessDescr specification of a process (e.g. seeder or agent) configuration
type ProcessDescr struct {
Source *SourceDescr `json:"source,omitempty" yaml:"source,omitempty"`
Config AgentConfigMap `json:"config,omitempty" yaml:"config,omitempty"`
Extensions map[string]SourceDescr `json:"extensions,omitempty" yaml:"extensions,omitempty"`
}
ProcessesDescr specification of processes (seeder and agent) configuration
type ProcessesDescr struct {
Seeder *ProcessDescr `json:"seeder,omitempty" yaml:"seeder,omitempty"`
Agent *ProcessDescr `json:"agent,omitempty" yaml:"agent,omitempty"`
}
ProcessesSpec is a block of seeder and agent parameters re-used and overridable in ClusterSpec, LocationSpec, InstanceGroupSpec, and InstanceGroupLocationSpec
type ProcessesSpec struct {
// KublrSeederTgzURL specifies URL of Kublr seeder to use
//+optional
KublrSeederTgzURL *string `json:"kublrSeederTgzUrl,omitempty" yaml:"kublrSeederTgzUrl,omitempty"`
// KublrSeederRepositorySecretRef specifies reference to the secret object containing username/password to access Kublr seeder repository
//+optional
KublrSeederRepositorySecretRef *string `json:"kublrSeederRepositorySecretRef,omitempty" yaml:"kublrSeederRepositorySecretRef,omitempty"`
// KublrAgentTgzURL specifies URL of Kublr agent to use
//+optional
KublrAgentTgzURL *string `json:"kublrAgentTgzUrl,omitempty" yaml:"kublrAgentTgzUrl,omitempty"`
// KublrAgentRepositorySecretRef specifies reference to the secret object containing username/password to access Kublr agent repository
//+optional
KublrAgentRepositorySecretRef *string `json:"kublrAgentRepositorySecretRef,omitempty" yaml:"kublrAgentRepositorySecretRef,omitempty"`
// KublrSeederConfig allows to override Kublr seeder configuration
//+optional
KublrSeederConfig AgentConfigMap `json:"kublrSeederConfig,omitempty" yaml:"kublrSeederConfig,omitempty"`
// KublrAgentConfig allows to override Kublr agent configuration
//+optional
KublrAgentConfig AgentConfigMap `json:"kublrAgentConfig,omitempty" yaml:"kublrAgentConfig,omitempty"`
// KublrAgentExtensions allows to specify Kublr agent extensions
KublrAgentExtensions AgentExtensionsMap `json:"kublrAgentExtensions,omitempty" yaml:"kublrAgentExtensions,omitempty"`
}
PrometheusSpec is a spec for Prometheus installation
type PrometheusSpec struct {
// Persistent indicates if storage is enabled.
Persistent *bool `json:"persistent,omitempty" yaml:"persistent,omitempty"`
// Size defines size of the storage, string, must follow k8s resource.Quantity rules.
Size *string `json:"size,omitempty" yaml:"size,omitempty"`
}
ProxyConfigurationServerSpec is spec for proxy server configuration.
type ProxyConfigurationServerSpec struct {
// URL for proxy server
URL string `json:"url,omitempty" yaml:"url,omitempty" bson:"url,omitempty"`
// Username username for proxy server
Username string `json:"username,omitempty" yaml:"username,omitempty" bson:"username,omitempty"`
// Password password for proxy settings
Password string `json:"password,omitempty" yaml:"password,omitempty" bson:"password,omitempty"`
// UsernamePasswordSecretRef is reference to username and password secret ref
UsernamePasswordSecretRef string `json:"usernamePasswordSecretRef,omitempty" yaml:"usernamePasswordSecretRef,omitempty" bson:"usernamePasswordSecretRef,omitempty"`
}
ProxyConfigurationSpec is spec for proxy configuration
type ProxyConfigurationSpec struct {
// Proxy is map of proxy servers configuration
// Required
Proxy map[string]*ProxyConfigurationServerSpec `json:"proxy,omitempty" yaml:"proxy,omitempty" bson:"proxy,omitempty"`
// NoProxy is list of IP, hosts, cidr blocks
//+optional
NoProxy []string `json:"noProxy,omitempty" yaml:"noProxy,omitempty" bson:"noProxy,omitempty"`
}
ProxyServerSpec defines spec for proxy server
type ProxyServerSpec struct {
ProxyConfigSecretRef *string `json:"proxyConfigSecretRef,omitempty" yaml:"proxyConfigSecretRef,omitempty"`
NoProxy []string `json:"noProxy,omitempty" yaml:"noProxy,omitempty"`
}
RegisterNode entity to register or unregister from the cluster. Can be used for node or master hosts.
type RegisterNode struct {
//name from the location specification
LocationRef string `json:"locationRef" yaml:"locationRef"`
//name from the instance group specification
InstanceGroupRef string `json:"instanceGroupRef" yaml:"instanceGroupRef"`
// host IP address
Address string `json:"address" yaml:"address"`
}
RemoveCommand specifies the command to remove an existing node from the location state.
type RemoveCommand struct {
// NodeOrdinal is an ordinal within group.
NodeOrdinal int64 `json:"nodeOrdinal" yaml:"nodeOrdinal"`
// Command is a command to be executed to init a node.
Command string `json:"command" yaml:"command"`
}
RepositoryType defines repository type
type RepositoryType string
ResourceID is a Resource ID
type ResourceID string
ResourceState contains deployment resource state
type ResourceState struct {
ID ResourceID `json:"id" yaml:"id"`
Name string `json:"name" yaml:"name"`
ProvisioningState string `json:"provisioningState" yaml:"provisioningState"`
StatusCode string `json:"statusCode" yaml:"statusCode"`
}
RoleRef contains information that points to the role being used
type RoleRef struct {
// Kind of the referred role
// 1. currently "GlobalRole" and "SpaceRole" are supported
// 2. "GlobalRole" kind ref may be in a GlobalRoleBinding or in a SpaceRoleBinding
// 3. "SpaceRole" kind ref may only be in a SpaceRoleBinding
Kind string `json:"kind" yaml:"kind"`
// Name of the referred role
Name string `json:"name" yaml:"name"`
}
SSHPrivateKeySpec is a spec for SSH Private Key.
type SSHPrivateKeySpec struct {
Fingerprint string `json:"fingerprint" yaml:"fingerprint"`
SSHPrivateKey string `json:"sshPrivateKey" yaml:"sshPrivateKey"`
}
SSHPublicKeySpec is a spec for SSH Key.
type SSHPublicKeySpec struct {
Fingerprint string `json:"fingerprint" yaml:"fingerprint"`
SSHPublicKey string `json:"sshPublicKey" yaml:"sshPublicKey"`
}
ScheduleInterval - interval for scheduler
type ScheduleInterval struct {
Interval int `json:"interval" yaml:"interval" bson:"interval"`
Number int `json:"number" yaml:"number" bson:"number"`
}
Secret is a definition of Secret.
type Secret struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
Spec SecretSpec `json:"spec" yaml:"spec"`
Status SecretStatus `json:"status" yaml:"status"`
Owner *Owner `json:"-" yaml:"-"`
}
SecretListResult holds secrets.
type SecretListResult struct {
Total int `json:"total" yaml:"total"`
Items []Secret `json:"items" yaml:"items"`
}
SecretSpec is a definition of secret.
type SecretSpec struct {
// AwsAPIAccessKey is a definition of AWS Access Key and Secret.
AwsAPIAccessKey *AWSAPIAccessKeySpec `json:"awsApiAccessKey,omitempty" yaml:"awsApiAccessKey,omitempty" bson:"awsApiAccessKey,omitempty"`
// AzureAPIAccessKey is a definition of Azure credentials
AzureAPIAccessKey *AzureAPIAccessKey `json:"azureApiAccessKey,omitempty" yaml:"azureApiAccessKey,omitempty" bson:"azureApiAccessKey,omitempty"`
// GCPAPIAccessKey is a definition of GCP credentials
GCPAPIAccessKey *GCPAPIAccessKeySpec `json:"gcpApiAccessKey,omitempty" yaml:"gcpApiAccessKey,omitempty" bson:"gcpApiAccessKey,omitempty"`
// VCDAPIAccessKey is a definition of VMware vCD credentials
VCDAPIAccessKey *VCDAPIAccessKeySpec `json:"vcdApi,omitempty" yaml:"vcdApi,omitempty" bson:"vcdApi,omitempty"`
// VSphereAccessKey is a definition of vSphere credentials
VSphereAccessKey *VSphereAPISpec `json:"vSphereApi,omitempty" yaml:"vSphereApi,omitempty" bson:"vSphereApi,omitempty"`
SSHPrivateKeySpec *SSHPrivateKeySpec `json:"sshPrivateKeySpec,omitempty" yaml:"sshPrivateKeySpec,omitempty" bson:"sshPrivateKeySpec,omitempty"`
SSHPublicKeySpec *SSHPublicKeySpec `json:"sshKey,omitempty" yaml:"sshKey,omitempty" bson:"sshKey,omitempty"`
UsernamePasswordSpec *UsernamePasswordSpec `json:"usernamePassword,omitempty" yaml:"usernamePassword,omitempty" bson:"usernamePassword,omitempty"`
// SpotinstAccessToken is a spec of Spotinst access token.
//+optional
SpotinstAccessToken *SpotinstAccessTokenSpec `json:"spotinstAccessToken,omitempty" yaml:"spotinstAccessToken,omitempty" bson:"spotinstAccessToken,omitempty"`
// DockerRegistry is a definition of Docker Registry credentials
DockerRegistry *DockerRegistrySecretSpec `json:"dockerRegistry,omitempty" yaml:"dockerRegistry,omitempty" bson:"dockerRegistry,omitempty"`
// BinaryRegistry is a definition of Docker Registry credentials
BinaryRegistry *BinaryRegistrySecretSpec `json:"binaryRegistry,omitempty" yaml:"binaryRegistry,omitempty" bson:"binaryRegistry,omitempty"`
//ProxyConfiguration is configuration for proxy server
ProxyConfiguration *ProxyConfigurationSpec `json:"proxyConfiguration,omitempty" yaml:"proxyConfiguration,omitempty" bson:"proxyConfiguration,omitempty"`
// Kubeconfig is a definition of secret used to access Kubernetes API
Kubeconfig *KubeconfigSpec `json:"kubeconfig,omitempty" yaml:"kubeconfig,omitempty" bson:"kubeconfig,omitempty"`
}
SecretStatus holds status of the secret.
type SecretStatus struct {
Status string `json:"status,omitempty" yaml:"status,omitempty"`
}
SecretStoreSpec is a spec of secret storage.
type SecretStoreSpec struct {
Baremetal *BaremetalSecretStoreSpec `json:"baremetal,omitempty" yaml:"baremetal,omitempty"`
AwsS3 *AWSS3SecretStoreSpec `json:"awsS3,omitempty" yaml:"awsS3,omitempty"`
AzureAS *AzureASSecretStoreSpec `json:"azureAS,omitempty" yaml:"azureAS,omitempty"`
GoogleGCS *GoogleGCSSecretStoreSpec `json:"googleGCS,omitempty" yaml:"googleGCS,omitempty"`
// VcdCatalog configuration of a VCD as a Kublr secret store
//+deprecated use KublrAgent
VcdCatalog *VCDCatalogSecretStoreSpec `json:"vcdCatalog,omitempty" yaml:"vcdCatalog,omitempty"`
// VSphereDatastore configuration of a vSphere datastore as a Kublr secret store
//+deprecated use KublrAgent
VSphereDatastore *VSphereDatastoreSecretStoreSpec `json:"vSphereDatastore,omitempty" yaml:"vSphereDatastore,omitempty"`
KublrAgent *KublrAgentSecretStoreSpec `json:"kublrAgent,omitempty" yaml:"kublrAgent,omitempty"`
}
SelfHostedClusterLogSinkSpec is a spec for self-hosted cluster wide logging.
type SelfHostedClusterLogSinkSpec struct {
// Enabled indicates if this sink is enabled.
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
// Persistent indicates if this sink is persistent.
Persistent *bool `json:"persistent,omitempty" yaml:"persistent,omitempty"`
// Size defines size of the storage, string, must follow k8s resource.Quantity rules.
Size *string `json:"size,omitempty" yaml:"size,omitempty"`
// MasterNodes is the number of master nodes that control the cluster.
// number of master nodes is must not be 2, need to use 1 or 3 and more
MasterNodes *int `json:"masterNodes,omitempty" yaml:"masterNodes,omitempty" bson:"masterNodes"`
// DataNodes is the number of data nodes that hold data and perform data related operations such as CRUD, search, and aggregations.
DataNodes *int `json:"dataNodes,omitempty" yaml:"dataNodes,omitempty" bson:"dataNodes"`
// ClientNodes is the number of client nodes which serve client requests.
ClientNodes *int `json:"clientNodes,omitempty" yaml:"clientNodes,omitempty" bson:"clientNodes"`
// RetentionPeriodDays represents how old (in days) should be an Elasticsearch index to be deleted by Curator
RetentionPeriodDays *int `json:"retentionPeriodDays,omitempty" yaml:"retentionPeriodDays,omitempty" bson:"retentionPeriodDays,omitempty"`
}
SnapshotStatus represent status of the snapshot.
type SnapshotStatus string
SnapshotTag - type for tag
type SnapshotTag struct {
Name string `json:"name" yaml:"name" bson:"name"`
Value string `json:"value" yaml:"value" bson:"value"`
}
SourceDescr specification of a binary file source
type SourceDescr struct {
TgzURL *string `json:"tgzUrl,omitempty" yaml:"tgzUrl,omitempty"`
SecretRef *string `json:"secretRef,omitempty" yaml:"secretRef,omitempty"`
// Username and Password fields are used only if deprecated KublrAgentRepositoryUsername and
// KublrAgentRepositoryPassword fields are used in the cluster spec
Username *string `json:"username,omitempty" yaml:"username,omitempty"`
Password *string `json:"password,omitempty" yaml:"password,omitempty"`
}
Space is environment that delimits the scope of cluster.
type Space struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
}
SpaceListResult is a collection of Space
type SpaceListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of roles
Items []Space `json:"items" yaml:"items"`
}
SpaceRole is in space scope, must be in a specific space
type SpaceRole struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// Rules holds all the PolicyRules for this Role
Rules []PolicyRule `json:"rules" yaml:"rules"`
}
SpaceRoleBinding is in space role, must be in a specific space
type SpaceRoleBinding struct {
Entity `json:",inline" yaml:",inline" bson:",inline"`
// RoleRef can reference a SpaceRole in the current space or a GlobalRole in the global space.
RoleRef RoleRef `json:"roleRef" yaml:"roleRef"`
// Subjects holds references to the objects the role applies to.
Subjects []Subject `json:"subjects" yaml:"subjects"`
}
SpaceRoleBindingListResult is a collection of SpaceRoleBindings
type SpaceRoleBindingListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of roleBindings
Items []SpaceRoleBinding `json:"items" yaml:"items"`
}
SpaceRoleListResult is a collection of SpaceRoles
type SpaceRoleListResult struct {
Total int `json:"total" yaml:"total"`
// Items is a list of roles
Items []SpaceRole `json:"items" yaml:"items"`
}
SpotinstAccessTokenSpec is a spec for Spotinst Access Token.
type SpotinstAccessTokenSpec struct {
AccountID string `json:"accountId" yaml:"accountId" bson:"accountId"`
AccessToken string `json:"accessToken" yaml:"accessToken" bson:"accessToken"`
}
StringMap is a generic map with string keys
type StringMap map[string]interface{}
StubDomainSpec is a spec of stub domain to delegate dns zone
type StubDomainSpec struct {
DNS *string `json:"dns,omitempty" yaml:"dns,omitempty" bson:"dns"`
Servers []*string `json:"servers,omitempty" yaml:"servers,omitempty" bson:"servers"`
}
Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.
type Subject struct {
// Kind of object being referenced. Values defined are "User", "Group".
// If the Authorizer does not recognized the kind value, the Authorizer should report an error.
Kind string `json:"kind" yaml:"kind"`
// Name of the object being referenced.
Name string `json:"name" yaml:"name"`
}
SystemFeatureSpec is a spec for kublr-system feature.
type SystemFeatureSpec struct {
// Chart is a helm package
Chart *Chart `json:"chart,omitempty" yaml:"chart,omitempty"`
// Values is a helm chart values
Values *ChartValues `json:"values,omitempty" yaml:"values,omitempty"`
// LocalPathProvisioner is configuration for local host path provisioner
LocalPathProvisioner *LocalPathProvisioner `json:"localPathProvisioner,omitempty" yaml:"localPathProvisioner,omitempty" bson:"localPathProvisioner,omitempty"`
}
TerraformOperation represents Terraform Operation
type TerraformOperation struct {
ID string `json:"id" yaml:"id"`
Type TerraformOperationType `json:"type" yaml:"type"`
Status string `json:"status" yaml:"status"`
}
TerraformOperationType is a Terraform Operation Type
type TerraformOperationType string
TerraformState represents state of Terraform
type TerraformState struct {
ActiveTerraformOperation *TerraformOperation `json:"activeTerraformOperation,omitempty" yaml:"activeTerraformOperation,omitempty" bson:"activeTerraformOperation,omitempty"`
State string `json:"state,omitempty" yaml:"state,omitempty" bson:"state,omitempty"`
}
Type represents the stored type of Int32OrString.
type Type int
TypeMeta describes an individual object in an API response or request with strings representing the type of the object and its API schema version. Structures that are versioned or persisted should inline TypeMeta.
type TypeMeta struct {
// Kind is a string value representing the REST resource this object represents.
// Servers may infer this from the endpoint the client submits requests to.
Kind string `valid:"alphanum,required" json:"kind,omitempty" yaml:"kind,omitempty"`
// 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.
APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty"`
}
UpdateStage is an update stages enum
type UpdateStage string
User holds the information about the user. Information about the user is obtained from the request authentication token
type User struct {
ID string `json:"id,omitempty" yaml:"id,omitempty"`
// Username must be unique
Username string `json:"username,omitempty" yaml:"username,omitempty"`
// FirstName, may be empty
FirstName string `json:"firstName,omitempty" yaml:"firstName,omitempty"`
// LastName, may be empty
LastName string `json:"lastName,omitempty" yaml:"lastName,omitempty"`
// Email, may be empty
Email string `json:"email,omitempty" yaml:"email,omitempty"`
// Roles list of roles
Roles []string `json:"roles,omitempty" yaml:"roles,omitempty"`
// Groups list of groups
Groups []string `json:"groups,omitempty" yaml:"groups,omitempty"`
}
UsernamePasswordSpec is a spec for Username/Password secret type.
type UsernamePasswordSpec struct {
Username string `json:"username" yaml:"username" bson:"username"`
Password string `json:"password" yaml:"password" bson:"password"`
}
VCDAPIAccessKeySpec VMware vCloud Director (vCD) Secret
type VCDAPIAccessKeySpec struct {
// URL is the URL for the vCloud Director API endpoint. e.g. https://server.domain.com/api.
// Required
URL string `json:"url" yaml:"url" bson:"url"`
// Org is the vCloud Director Org on which to run API operations.
// Required
Org string `json:"org" yaml:"org" bson:"org"`
// Username is the username for vCloud Director API operations.
// Required
Username string `json:"username" yaml:"username" bson:"username"`
// Password is the password for vCloud Director API operations.
// Required
Password string `json:"password" yaml:"password" bson:"password"`
// Insecure can be set to true to disable SSL certificate verification. Default value is false
Insecure bool `json:"insecure" yaml:"insecure" bson:"insecure"`
}
VCDBootDiskSpec - disk spec
type VCDBootDiskSpec struct {
// SizeGb is a disk size (in Gb)
// Required
SizeGb *int `json:"sizeGb,omitempty" yaml:"sizeGb,omitempty"`
// Iops (Optional) IOPS request
Iops *int `json:"iops,omitempty" yaml:"iops,omitempty"`
// BusType (Optional) is a disk bus type. Must be one of:
// - 'ide'
// - 'parallel'
// - 'sas'
// - 'paravirtual'
// - 'sata'
// If omitted - 'paravirtual' will be used
BusType *string `json:"busType,omitempty" yaml:"busType,omitempty"`
// StorageProfile (Optional) is the storage profile name to be used for Disk storage.
// If omitted - default VDC storage profile will be used
StorageProfile *string `json:"storageProfile,omitempty" yaml:"storageProfile,omitempty"`
// BusNumber (Optional) is the number of the SCSI or IDE controller itself
// If omitted - 0 will be used
BusNumber *int `json:"busNumber,omitempty" yaml:"busNumber,omitempty"`
// UnitNumber (Optional) is the device number on the SCSI or IDE controller of the disk
// If omitted - 0 will be used
UnitNumber *int `json:"unitNumber,omitempty" yaml:"unitNumber,omitempty"`
}
VCDCatalogSecretStoreSpec is a spec for secret store in Azure Account Storage.
type VCDCatalogSecretStoreSpec struct {
// LocationRef is a reference to Location
LocationRef string `json:"locationRef" yaml:"locationRef"`
// CatalogName is a name of Catalog
CatalogName *string `json:"catalogName,omitempty" yaml:"catalogName,omitempty"`
// CatalogPath is a Catalog path
CatalogPath *string `json:"catalogPath,omitempty" yaml:"catalogPath,omitempty"`
}
VCDClusterAvailabilityEnum is enum for cluster availability
type VCDClusterAvailabilityEnum string
VCDDataDiskSpec - disk spec
type VCDDataDiskSpec struct {
// SizeGb is a disk size (in Gb)
// Required
SizeGb *int `json:"sizeGb,omitempty" yaml:"sizeGb,omitempty"`
// Iops (Optional) IOPS request
Iops *int `json:"iops,omitempty" yaml:"iops,omitempty"`
// BusType is a disk bus type. Must be one of:
// - 'IDE'
// - 'SCSI'
// - 'SATA'
// If omitted - SCSI bus will be used
//+optional
BusType *string `json:"busType,omitempty" yaml:"busType,omitempty"`
// BusSubType is a disk bus subtype. Must be one of:
// - '' IDE, requires IDE busType
// - 'buslogic' BusLogic Parallel SCSI controller, requires SCSI busType
// - 'lsilogic' LSI Logic Parallel SCSI controller, requires SCSI busType
// - 'lsilogicsas' LSI Logic SAS SCSI controller, requires SCSI busType
// - 'VirtualSCSI' Paravirtual SCSI controller, requires SCSI busType
// - 'vmware.sata.ahci' SATA controller, requires SATA busType
// If omitted - Paravirtual SCSI controller will be used
//+optional
BusSubType *string `json:"busSubType,omitempty" yaml:"busSubType,omitempty"`
// StorageProfile is the storage profile name to be used for Disk storage.
// If omitted - default VDC storage profile will be used
//+optional
StorageProfile *string `json:"storageProfile,omitempty" yaml:"storageProfile,omitempty"`
}
VCDInstanceGroupLocationSpec - instances group location
type VCDInstanceGroupLocationSpec struct {
// LoadBalancerAddress is a Load balancing address for K8S API Server.
// Only mandatory for multi-master configurations.
//+optional
LoadBalancerAddress *string `json:"loadBalancerAddress,omitempty" yaml:"loadBalancerAddress,omitempty"`
// IPAddressAllocationMode is an IP Address allocation mode (i.e. MANUAL, POOL, DHCP).
// If ommitted - POOL will be used.
//+optional
IPAddressAllocationMode *VCDSIPAddressAllocationMode `json:"ipAddressAllocationMode,omitempty" yaml:"ipAddressAllocationMode,omitempty"`
// IPAddresses is a list of IP addresses for VM's in current group location.
// Only mandatory for MANUAL ipAddressAllocationMode.
//+optional
IPAddresses []*string `json:"ipAddresses,omitempty" yaml:"ipAddresses,omitempty"`
// VM is a VM template
// Required
VM *VCDVirtualMachineTemplate `json:"vm,omitempty" yaml:"vm,omitempty"`
}
VCDLoadBalancerRuleSpec is spec that describes rules for load balancer
type VCDLoadBalancerRuleSpec struct {
// ExternalIPs is a list of external IPs from edge gateway, that will be used
//+optional
ExternalIPs []string `json:"externalIPs,omitempty" yaml:"externalIPs,omitempty"`
// Groups is location groups that will be used for load balancing
// Required
Groups []string `json:"groups,omitempty" yaml:"groups,omitempty"`
// Ports is ports on load balancer IP and external IPs that will be used
// Required
Ports []int `json:"ports,omitempty" yaml:"ports,omitempty"`
// TargetPorts is ports on host machines that will be used
// Required
TargetPorts []int `json:"targetPorts,omitempty" yaml:"targetPorts,omitempty"`
// InternalNAT is flag for creating DNAT rule for internal network
//+optional
InternalNAT *bool `json:"internalNAT,omitempty" yaml:"internalNAT,omitempty"`
}
VCDLocationOrgNetworkSpec - holds network location
type VCDLocationOrgNetworkSpec struct {
// NetworkType is type of organization network
// routed, isolated, provided
// Required
Type *VCDOrgNetworkTypeEnum `json:"type,omitempty" yaml:"type,omitempty"`
// NetworkName is name for org network
// Required
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
// CidrBlock is an IP address range for this vApp Network.
// If omitted - default will be assigned.
//+optional
CidrBlock *string `json:"cidrBlock,omitempty" yaml:"cidrBlock,omitempty"`
// Gateway is a gateway address of the vApp Network.
// If omitted - default will be assigned.
//+optional
Gateway *string `json:"gateway,omitempty" yaml:"gateway,omitempty"`
// StaticIPRanges is an IP range for static pool allocation in the network.
// If omitted - default will be assigned.
//+optional
StaticIPRanges []*IPRangeSpec `json:"staticIpRanges,omitempty" yaml:"staticIpRanges,omitempty"`
// DhcpIPRanges is an IP range for DHCP server
// If omitted - no DHCP server will be configured.
//+optional
DhcpIPRanges []*IPRangeSpec `json:"dhcpIpRanges,omitempty" yaml:"dhcpIpRanges,omitempty"`
// DNSServers is a list of DNS servers for vApp Network. At least two DNS servers must be specified.
// If omitted - 8.8.8.8, 8.8.4.4 will be used
//+optional
DNSServers []*string `json:"dnsServers,omitempty" yaml:"dnsServers,omitempty"`
// InternalDNSSuffix is org network dns suffix
//+optional
InternalDNSSuffix *string `json:"internalDnsSuffix,omitempty" yaml:"internalDnsSuffix,omitempty"`
// DisableDefaultSNAT is just for new created org network, if set - does not create SNAT rule
//+optional
DisableDefaultSNAT *bool `json:"disableDefaultSNAT,omitempty" yaml:"disableDefaultSNAT,omitempty"`
// DisableDefaultIngress is just for new created org network
//+optional
DisableDefaultIngress *bool `json:"disableDefaultIngress,omitempty" yaml:"disableDefaultIngress,omitempty"`
}
VCDLocationSpec holds location specification for VMware vCloud Director installations.
type VCDLocationSpec struct {
// VCDApiSecretRef is a reference to the VCDAPIAccessSpec secret object.
// Required
VCDApiSecretRef *string `json:"vcdApiSecretRef,omitempty" yaml:"vcdApiSecretRef,omitempty"`
// Org is a vCloud Director Organization
// If omitted, it will be populated automatically based from the corresponding secret.
// If populated, it must be the same as the org value in the corresponding secret.
Org *string `json:"org,omitempty" yaml:"org,omitempty"`
// Vdc Virtual Datacenter Name.
// Required
Vdc *string `json:"vdc,omitempty" yaml:"vdc,omitempty"`
// OrgNetwork is a org Network Name.
// If provided - cluster vApp will be directly connected to this Org Network
// If omitted - new vAppNetwork will be created.
//+optional
//+deprecated
OrgNetwork *string `json:"orgNetwork,omitempty" yaml:"orgNetwork,omitempty"`
// VOrgNetwork is a Org Network, provided or
// If omitted, and no orgNetwork is provided - default vAppNetwork will be created
//+optional
VOrgNetwork *VCDLocationOrgNetworkSpec `json:"vOrgNetwork,omitempty" yaml:"vOrgNetwork,omitempty"`
// VAppNetwork is a vApp Network.
// If omitted, and no orgNetwork is provided - default vAppNetwork will be created
//+optional
VAppNetwork *VCDLocationVAPPNetworkSpec `json:"vAppNetwork,omitempty" yaml:"vAppNetwork,omitempty"`
// EdgeGateway is IP from Edge Gateway that will be used by cluster
// TODO we can delete in future, when we can load it from vCloud in Generator
// Required to connect org network to this gateway
EdgeGateway *string `json:"edgeGateway,omitempty" yaml:"edgeGateway,omitempty"`
// EdgeGatewayNetwork is Network name from Edge Gateway that will be used by cluster
// TODO we can delete in future, when we can load it from vCloud in Generator
// Required for SNAT rules
EdgeGatewayNetwork *string `json:"edgeGatewayNetwork,omitempty" yaml:"edgeGatewayNetwork,omitempty"`
// EdgeGatewayNetworkIP is IP from Edge Gateway Network that will be used by cluster
// Required for SNAT rules
EdgeGatewayNetworkIP *string `json:"edgeGatewayNetworkIP,omitempty" yaml:"edgeGatewayNetworkIP,omitempty"`
// MastersExternalSSHStartPort is a start port for ssh to masters
//+optional
MastersExternalSSHStartPort *int `json:"mastersExternalSSHStartPort,omitempty" yaml:"mastersExternalSSHStartPort,omitempty"`
// MastersLoadBalancerExternalIPs is set of IPs from edge gateway that will be used for for k8s-api and ssh
//+optional
MastersLoadBalancerExternalIPs []string `json:"mastersLoadBalancerExternalIPs,omitempty" yaml:"mastersLoadBalancerExternalIPs,omitempty"`
// LoadBalancerIP is an IP from vOrg network that will be used as load balancer.
// It should be from static pool.
// If not defined, kublr will set it automatically.
//+optional
LoadBalancerIP *string `json:"loadBalancerIP,omitempty" yaml:"loadBalancerIP,omitempty"`
// LoadBalancerRules is rules for load balancers
//+optional
LoadBalancerRules map[string]*VCDLoadBalancerRuleSpec `json:"loadBalancerRules,omitempty" yaml:"loadBalancerRules,omitempty"`
}
VCDLocationState represents state of VMware vCD Location.
type VCDLocationState struct {
PrepareToCreateDeployment bool `json:"prepareToCreateDeployment" yaml:"prepareToCreateDeployment" bson:"prepareToCreateDeployment"`
TerraformState *TerraformState `json:"terraformState,omitempty" yaml:"terraformState,omitempty" bson:"terraformState,omitempty"`
}
VCDLocationVAPPNetworkSpec - holds network location location
type VCDLocationVAPPNetworkSpec struct {
// ParentNetwork is an Org Network to connect the vApp network to.
// Required
ParentNetwork *string `json:"parentNetwork,omitempty" yaml:"parentNetwork,omitempty"`
// CidrBlock is an IP address range for this vApp Network.
// If omitted - default will be assigned.
//+optional
CidrBlock *string `json:"cidrBlock,omitempty" yaml:"cidrBlock,omitempty"`
// Gateway is a gateway address of the vApp Network.
// If omitted - default will be assigned.
//+optional
Gateway *string `json:"gateway,omitempty" yaml:"gateway,omitempty"`
// Netmask is a netmask address of the vApp network.
// If omitted - default will be assigned.
// TODO delete
//+optional
Netmask *string `json:"network,omitempty" yaml:"network,omitempty"`
// StaticIPRange is an IP range for static pool allocation in the network.
// If omitted - default will be assigned.
//+optional
StaticIPRange *IPRangeSpec `json:"staticIpRange,omitempty" yaml:"staticIpRange,omitempty"`
// DhcpIPRange is an IP range for DHCP server
// If omitted - no DHCP server will be configured.
//+optional
DhcpIPRange *IPRangeSpec `json:"dhcpIpRange,omitempty" yaml:"dhcpIpRange,omitempty"`
// DNSServers is a list of DNS servers for vApp Network. At least two DNS servers must be specified.
// If omitted - 8.8.8.8, 8.8.4.4 will be used
//+optional
DNSServers []*string `json:"dnsServers,omitempty" yaml:"dnsServers,omitempty"`
}
VCDOrgNetworkTypeEnum is enum for org network type
type VCDOrgNetworkTypeEnum string
VCDSIPAddressAllocationMode - holds VMWare IP location mode
type VCDSIPAddressAllocationMode string
VCDVAPPTemplateSpec - template spec for VMware app.
type VCDVAPPTemplateSpec struct {
// CatalogName is the catalog name in which to find the given vApp Template.
// Required
CatalogName *string `json:"catalogName,omitempty" yaml:"catalogName,omitempty"`
// TemplateName is the name of the vApp Template to use.
// Required
TemplateName *string `json:"templateName,omitempty" yaml:"templateName,omitempty"`
}
VCDVirtualMachineTemplate - template for VMware virtual machines
type VCDVirtualMachineTemplate struct {
// Template is a vApp template
//Required
Template *VCDVAPPTemplateSpec `json:"template,omitempty" yaml:"template,omitempty"`
// Cpus is the number of virtual CPUs to allocate to the VM.
// Required
Cpus *int `json:"cpus,omitempty" yaml:"cpus,omitempty"`
// MemoryMb is the amount of RAM (in MB) to allocate to the VM.
// Required
MemoryMb *int `json:"memoryMb,omitempty" yaml:"memoryMb,omitempty"`
// StorageProfile is the storage profile name to be used for VMs storage.
// If omitted - default VDC storage profile will be used
//+optional
StorageProfile *string `json:"storageProfile,omitempty" yaml:"storageProfile,omitempty"`
// MasterDataDisk is a Master Data Disk.
// If omitted - default will be created
//+optional
MasterDataDisk *VCDDataDiskSpec `json:"masterDataDisk,omitempty" yaml:"masterDataDisk,omitempty"`
// BootDisk is a Boot Data Disk.
// If omitted - values from VM Template will be used.
//+optional
BootDisk *VCDBootDiskSpec `json:"bootDisk,omitempty" yaml:"bootDisk,omitempty"`
}
VSphereAPISpec - VSphere Api Secret
type VSphereAPISpec struct {
// URL is the URL for the vSphere API. e.g. https://server.domain.com/
// Required
URL string `json:"url" yaml:"url" bson:"url"`
// Username for vSphere API operations.
// Required
Username string `json:"username" yaml:"username" bson:"username"`
// Password for vSphere API operations.
// Required
Password string `json:"password" yaml:"password" bson:"password"`
// Insecure can be set to true to disable SSL certificate verification. Default value is false
Insecure bool `json:"insecure" yaml:"insecure" bson:"insecure"`
}
VSphereDatastoreSecretStoreSpec is a spec for secret store for VMWare vSphere installations.
type VSphereDatastoreSecretStoreSpec struct {
// LocationRef is a reference to Location
LocationRef string `json:"locationRef" yaml:"locationRef" bson:"locationRef"`
// DatastoreName is a name of datastore if type is "datastore"
DatastoreName *string `json:"datastoreName,omitempty" yaml:"datastoreName,omitempty" bson:"datastoreName,omitempty"`
// DatastorePath is a datastore folder name
DatastorePath *string `json:"datastorePath,omitempty" yaml:"datastorePath,omitempty" bson:"datastorePath,omitempty"`
}
VSphereDiskSpec represents VMWare vSphere disk specification
type VSphereDiskSpec struct {
// SizeGb is a disk size (in Gb)
//+optional
SizeGb *int `json:"sizeGb,omitempty" yaml:"sizeGb,omitempty" bson:"sizeGb,omitempty"`
// DataStoreName is data store name in the vSphere
//+optional
DataStoreName *string `json:"dataStoreName,omitempty" yaml:"dataStoreName,omitempty" bson:"dataStoreName,omitempty"`
// EagerlyScrub - If set to true, the disk space is zeroed out on VM creation.
// This will delay the creation of the disk or virtual machine. Cannot be set to true when thin_provisioned is true.
// See the section on picking a disk type.
// Default: the value from vm template will be used
EagerlyScrub *bool `json:"eagerlyScrub,omitempty" yaml:"eagerlyScrub,omitempty" bson:"eagerlyScrub,omitempty"`
// ThinProvisioned - (Optional) If true, this disk is thin provisioned, with space for the file being allocated on an as-needed basis.
// Cannot be set to true when eagerly_scrub is true. See the section on picking a disk type.
// Default: the value from vm template will be used
ThinProvisioned *bool `json:"thinProvisioned,omitempty" yaml:"thinProvisioned,omitempty" bson:"thinProvisioned,omitempty"`
// IoLimit is the upper limit of IOPS that this disk can use. The default is no limit.
//+optional
IoLimit *int `json:"ioLimit,omitempty" yaml:"ioLimit,omitempty" bson:"ioLimit,omitempty"`
// IoReservation is the I/O reservation (guarantee) that this disk has, in IOPS. The default is no reservation.
//+optional
IoReservation *int `json:"ioReservation,omitempty" yaml:"ioReservation,omitempty" bson:"ioReservation,omitempty"`
}
VSphereInstanceGroupLocationSpec - spec for instance group location
type VSphereInstanceGroupLocationSpec struct {
// InitType is the VM initialization type
// Values can be 'vm-tools', 'cloud-init' and 'ovf-cloud-init'
// Required
InitType *string `json:"initType,omitempty" yaml:"initType,omitempty" bson:"initType"`
// CloudInitExtras is a basic cloud-init config, this config will be extended to make kublr work
//+optional
//
// For example, to assign a password for default user:
//
// kind: Cluster
// ....
// spec:
// ...
// master:
// locations:
// - vSphere:
// initType: cloud-init
// cloudInitExtras:
// password: atomic
// ssh_pwauth: true
// chpasswd:
// expire: false
//
// Since version 1.20
CloudInitExtras interface{} `json:"cloudInitExtras,omitempty" yaml:"cloudInitExtras,omitempty" bson:"cloudInitExtras,omitempty"`
// LoadBalancerAddress is a Load balancing address for K8S API Server.
//+optional
LoadBalancerAddress *string `json:"loadBalancerAddress,omitempty" yaml:"loadBalancerAddress,omitempty" bson:"loadBalancerAddress,omitempty"`
// IPAddressAllocationMode is an IP Address allocation mode (i.e. MANUAL, DHCP).
// If ommitted - DHCP will be used.
//+optional
IPAddressAllocationMode *string `json:"ipAddressAllocationMode,omitempty" yaml:"ipAddressAllocationMode,omitempty" bson:"ipAddressAllocationMode,omitempty"`
// IPAddresses is a list of IP addresses for VM's in current group location.
// Only mandatory for MANUAL ipAddressAllocationMode.
//+optional
IPAddresses []*string `json:"ipAddresses,omitempty" yaml:"ipAddresses,omitempty" bson:"ipAddresses,omitempty"`
// The VM configuration
// Required
VM *VSphereVMInstanceSpec `json:"vm,omitempty" yaml:"vm,omitempty" bson:"vm,omitempty"`
// ResourcePool is a name of the resource pool used by this instance group.
//+optional
//+deprecated use ResourcePools instead
ResourcePool *string `json:"resourcePool,omitempty" yaml:"resourcePool,omitempty" bson:"resourcePool,omitempty"`
// ResourcePools is a name of the resource pools used by VM's in current group location.
//+optional
ResourcePools []*string `json:"resourcePools,omitempty" yaml:"resourcePools,omitempty" bson:"resourcePools,omitempty"`
// DataStoreName is a name of the vSphere datastore
//+optional
//+deprecated use DataStoreNames instead
DataStoreName *string `json:"dataStoreName,omitempty" yaml:"dataStoreName,omitempty" bson:"dataStoreName,omitempty"`
// DataStoreNames is a names of the vSphere datastores used by VM's in current group location.
//+optional
DataStoreNames []*string `json:"dataStoreNames,omitempty" yaml:"dataStoreNames,omitempty" bson:"dataStoreNames,omitempty"`
// DataStoreType is type of data store.
// If omitted, the default value of 'host' will be used. Values can be 'host' and 'cluster'
//+optional
//+deprecated use DataStoreTypes instead
DataStoreType *string `json:"dataStoreType,omitempty" yaml:"dataStoreType,omitempty" bson:"dataStoreType,omitempty"`
// DataStoreTypes is types of data stores used by VM's in current group location.
// If omitted, the default value of 'host' will be used. Values can be 'host' and 'cluster'
//+optional
DataStoreTypes []*string `json:"dataStoreTypes,omitempty" yaml:"dataStoreTypes,omitempty" bson:"dataStoreTypes,omitempty"`
// ClusterName is a name of the vSphere cluster. This field is necessary for the creation anti-affinity rules.
// If this field is empty, anti-affinity rules will not be created.
//+optional
//+deprecated use ClusterNames instead
ClusterName *string `json:"clusterName,omitempty" yaml:"clusterName,omitempty" bson:"clusterName,omitempty"`
// ClusterNames is a names of the vSphere clusters of the resource pools used by VM's in current group location.
// This field is necessary for the creation anti-affinity rules.
// If this field is empty, anti-affinity rules will not be created.
//+optional
ClusterNames []*string `json:"clusterNames,omitempty" yaml:"clusterNames,omitempty" bson:"clusterNames,omitempty"`
// SSHPublicSecretRef is reference to the secret object containing public SSH key for instance group
// Required if initType is “vm-tools”
SSHPublicSecretRef *string `json:"sshPublicSecretRef,omitempty" yaml:"sshPublicSecretRef,omitempty" bson:"sshPublicSecretRef,omitempty"`
// GuestCredentialsRef is reference to the secret object containing credentials of the guest VM.
//+optional
GuestCredentialsRef *string `json:"guestCredentialsRef,omitempty" yaml:"guestCredentialsRef,omitempty" bson:"guestCredentialsRef,omitempty"`
}
VSphereInstanceTemplate represents VMWare vSphere instance template
type VSphereInstanceTemplate struct {
// Source is resource source where templates are stored
// "datacenter" - templates are stored in the VSphere Data Center
// "library" - templates are stored in the VSphere Content Library
// Required
Source *string `json:"source,omitempty" yaml:"source,omitempty" bson:"source"`
// TemplateName is the VM template name
// Required
TemplateName *string `json:"templateName,omitempty" yaml:"templateName,omitempty" bson:"templateName"`
// libraryName is the name of VSphere Content Library.
// The field is required if source is "library"
//+optional
LibraryName *string `json:"libraryName,omitempty" yaml:"libraryName,omitempty" bson:"libraryName,omitempty"`
}
VSphereLocationSpec holds location specification for VMWare vSphere installations.
type VSphereLocationSpec struct {
// VCDApiSecretRef is a reference to the secret object containing vSphere secrets to access
// Required
APISecretRef *string `json:"apiSecretRef,omitempty" yaml:"apiSecretRef,omitempty" bson:"apiSecretRef"`
// Datacenter is the name of the resource pool. This can be a name or path
// Required
Datacenter *string `json:"datacenter,omitempty" yaml:"datacenter,omitempty" bson:"datacenter"`
// NetworkName is a vSphere Network name
// Required
NetworkName *string `json:"networkName,omitempty" yaml:"networkName,omitempty" bson:"networkName"`
// NetworkCidrBlock is an IP address range for this vSphere Network.
//+optional
NetworkCidrBlock *string `json:"networkCidrBlock,omitempty" yaml:"networkCidrBlock,omitempty" bson:"networkCidrBlock,omitempty"`
// ResourcePool is a name of vSphere resource pool.
//+optional
ResourcePool *string `json:"resourcePool,omitempty" yaml:"resourcePool,omitempty" bson:"resourcePool,omitempty"`
// DataStoreName is a name of the vSphere datastore
//+optional
DataStoreName *string `json:"dataStoreName,omitempty" yaml:"dataStoreName,omitempty" bson:"dataStoreName,omitempty"`
// DataStoreType is type of data store.
// If omitted, the default value of 'host' will be used. Values can be 'host' and 'cluster'
//+optional
DataStoreType *string `json:"dataStoreType,omitempty" yaml:"dataStoreType,omitempty" bson:"dataStoreType,omitempty"`
// ClusterName is a name of the vSphere cluster. This field is necessary for the creation anti-affinity rules.
// If this field is empty, anti-affinity rules will not be created.
//+optional
ClusterName *string `json:"clusterName,omitempty" yaml:"clusterName,omitempty" bson:"clusterName,omitempty"`
// Netmask address of the vSphere network.
//+optional
Netmask *string `json:"netmask,omitempty" yaml:"netmask,omitempty" bson:"netmask,omitempty"`
// NetworkGateway is Gateway address of the vSphere Network.
//+optional
NetworkGateway *string `json:"networkGateway,omitempty" yaml:"networkGateway,omitempty" bson:"networkGateway,omitempty"`
// DNSServers is list of DNS servers for vSphere Network.
//+optional
DNSServers []*string `json:"dnsServers,omitempty" yaml:"dnsServers,omitempty" bson:"dnsServers,omitempty"`
// ZoneSupportEnabled enables zone support in the vsphere cloud provider
//+optional
// Since version 1.20
ZoneSupportEnabled bool `json:"zoneSupportEnabled,omitempty" yaml:"zoneSupportEnabled,omitempty" bson:"zoneSupportEnabled,omitempty"`
// BaseVCenterFolderPath The path of folder in VCenter where the cluster will be created.
// If omitted - root of VCenter will be used.
//+optional
// Since version 1.23.2
BaseVCenterFolderPath *string `json:"baseVcenterFolderPath,omitempty" yaml:"baseVcenterFolderPath,omitempty" bson:"baseVcenterFolderPath,omitempty"`
}
VSphereLocationState represents state of VMWare vSphere Location.
type VSphereLocationState struct {
PrepareToCreateDeployment bool `json:"prepareToCreateDeployment" yaml:"prepareToCreateDeployment" bson:"prepareToCreateDeployment"`
TerraformState *TerraformState `json:"terraformState,omitempty" yaml:"terraformState,omitempty" bson:"terraformState,omitempty"`
}
VSphereVMInstanceSpec represents VMWare vSphere instance spec
type VSphereVMInstanceSpec struct {
// Template is vCenter VM Template
// Required
Template *VSphereInstanceTemplate `json:"template,omitempty" yaml:"template,omitempty" bson:"template,omitempty"`
// Cpus is the number of virtual CPUs to allocate to the VM.
// Required
Cpus *int `json:"cpus,omitempty" yaml:"cpus,omitempty" bson:"cpus,omitempty"`
// MemoryMb is the amount of RAM (in MB) to allocate to the VM.
// Required
MemoryMb *int `json:"memoryMb,omitempty" yaml:"memoryMb,omitempty" bson:"memoryMb,omitempty"`
// bootDisk is a Boot Data Disk.
// If omitted - values from VM Template will be used.
//+optional
BootDisk *VSphereDiskSpec `json:"bootDisk,omitempty" yaml:"bootDisk,omitempty" bson:"bootDisk,omitempty"`
// MasterDataDisk is a Master Data Disk.
// If omitted - default will be created
//+optional
//+deprecated use DataDisks instead
MasterDataDisk *VSphereDiskSpec `json:"masterDataDisk,omitempty" yaml:"masterDataDisk,omitempty" bson:"masterDataDisk,omitempty"`
// DataDisk is a list of Data Disks using for data requiring local or shared datastore, for example etcd or iso files.
// If omitted - default will be created
// Required for groups using StorageDRS cluster and optional for other cases.
DataDisks []*VSphereDiskSpec `json:"dataDisks,omitempty" yaml:"dataDisks,omitempty" bson:"dataDisks,omitempty"`
// NICName is a Network Interface (NIC) Name.
// Used only for cloud-init network initialization.
// If omitted - 'ens192' will be used by default.
//+optional
NICName *string `json:"nicName,omitempty" yaml:"nicName,omitempty" bson:"nicName,omitempty"`
}
Victims contains all nodes planned to delete during Update Location
type Victims map[ResourceID]*NodeToDelete
VolumeSnapshot - model for volume snapshot
type VolumeSnapshot struct {
CreatedAt time.Time `json:"createdAt,omitempty" yaml:"createdAt,omitempty" bson:"createdAt"`
// Size is the size of the volume snapshot, in GiB.
Size int64 `json:"size" yaml:"size" bson:"size"`
Tags []SnapshotTag `json:"tags" yaml:"tags" bson:"tags"`
Aws *AWSVolumeSnapshot `json:"aws,omitempty" yaml:"aws,omitempty" bson:"aws"`
LocationRef *string `json:"locationRef,omitempty" yaml:"locationRef,omitempty" bson:"locationRef"`
Status SnapshotStatus `json:"status" yaml:"status" bson:"status"`
LastCheckTime time.Time `json:"lastCheckTime,omitempty" yaml:"lastCheckTime,omitempty" bson:"lastCheckTime"`
// PVSpec stores persistence volume object
PVSpec string `json:"pvspec" yaml:"pvspec" bson:"pvspec"`
// PVCSpec stores persistence volume claim object
PVCSpec string `json:"pvcspec" yaml:"pvcspec" bson:"pvcspec"`
}