diff --git a/apis/emr/v1beta1/zz_cluster_terraformed.go b/apis/emr/v1beta1/zz_cluster_terraformed.go new file mode 100755 index 0000000000..c05bebbad8 --- /dev/null +++ b/apis/emr/v1beta1/zz_cluster_terraformed.go @@ -0,0 +1,130 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this Cluster +func (mg *Cluster) GetTerraformResourceType() string { + return "aws_emr_cluster" +} + +// GetConnectionDetailsMapping for this Cluster +func (tr *Cluster) GetConnectionDetailsMapping() map[string]string { + return map[string]string{"kerberos_attributes[*].ad_domain_join_password": "kerberosAttributes[*].adDomainJoinPasswordSecretRef", "kerberos_attributes[*].cross_realm_trust_principal_password": "kerberosAttributes[*].crossRealmTrustPrincipalPasswordSecretRef", "kerberos_attributes[*].kdc_admin_password": "kerberosAttributes[*].kdcAdminPasswordSecretRef"} +} + +// GetObservation of this Cluster +func (tr *Cluster) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this Cluster +func (tr *Cluster) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this Cluster +func (tr *Cluster) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this Cluster +func (tr *Cluster) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this Cluster +func (tr *Cluster) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this Cluster +func (tr *Cluster) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this Cluster +func (tr *Cluster) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this Cluster using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *Cluster) LateInitialize(attrs []byte) (bool, error) { + params := &ClusterParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + opts = append(opts, resource.WithNameFilter("MasterInstanceFleet")) + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *Cluster) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/emr/v1beta1/zz_cluster_types.go b/apis/emr/v1beta1/zz_cluster_types.go new file mode 100755 index 0000000000..683dfa5631 --- /dev/null +++ b/apis/emr/v1beta1/zz_cluster_types.go @@ -0,0 +1,1628 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type AutoTerminationPolicyInitParameters struct { + + // Specifies the amount of idle time in seconds after which the cluster automatically terminates. You can specify a minimum of 60 seconds and a maximum of 604800 seconds (seven days). + IdleTimeout *float64 `json:"idleTimeout,omitempty" tf:"idle_timeout,omitempty"` +} + +type AutoTerminationPolicyObservation struct { + + // Specifies the amount of idle time in seconds after which the cluster automatically terminates. You can specify a minimum of 60 seconds and a maximum of 604800 seconds (seven days). + IdleTimeout *float64 `json:"idleTimeout,omitempty" tf:"idle_timeout,omitempty"` +} + +type AutoTerminationPolicyParameters struct { + + // Specifies the amount of idle time in seconds after which the cluster automatically terminates. You can specify a minimum of 60 seconds and a maximum of 604800 seconds (seven days). + // +kubebuilder:validation:Optional + IdleTimeout *float64 `json:"idleTimeout,omitempty" tf:"idle_timeout,omitempty"` +} + +type BootstrapActionInitParameters struct { + + // List of command line arguments to pass to the bootstrap action script. + Args []*string `json:"args,omitempty" tf:"args,omitempty"` + + // Name of the bootstrap action. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Location of the script to run during a bootstrap action. Can be either a location in Amazon S3 or on a local file system. + Path *string `json:"path,omitempty" tf:"path,omitempty"` +} + +type BootstrapActionObservation struct { + + // List of command line arguments to pass to the bootstrap action script. + Args []*string `json:"args,omitempty" tf:"args,omitempty"` + + // Name of the bootstrap action. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Location of the script to run during a bootstrap action. Can be either a location in Amazon S3 or on a local file system. + Path *string `json:"path,omitempty" tf:"path,omitempty"` +} + +type BootstrapActionParameters struct { + + // List of command line arguments to pass to the bootstrap action script. + // +kubebuilder:validation:Optional + Args []*string `json:"args,omitempty" tf:"args,omitempty"` + + // Name of the bootstrap action. + // +kubebuilder:validation:Optional + Name *string `json:"name" tf:"name,omitempty"` + + // Location of the script to run during a bootstrap action. Can be either a location in Amazon S3 or on a local file system. + // +kubebuilder:validation:Optional + Path *string `json:"path" tf:"path,omitempty"` +} + +type ClusterInitParameters struct { + + // JSON string for selecting additional features such as adding proxy information. + AdditionalInfo *string `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // A case-insensitive list of applications for Amazon EMR to install and configure when launching the cluster. For a list of applications available for each Amazon EMR release version, see the Amazon EMR Release Guide. + // +listType=set + Applications []*string `json:"applications,omitempty" tf:"applications,omitempty"` + + // An auto-termination policy for an Amazon EMR cluster. An auto-termination policy defines the amount of idle time in seconds after which a cluster automatically terminates. See Auto Termination Policy Below. + AutoTerminationPolicy *AutoTerminationPolicyInitParameters `json:"autoTerminationPolicy,omitempty" tf:"auto_termination_policy,omitempty"` + + // IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group. + AutoscalingRole *string `json:"autoscalingRole,omitempty" tf:"autoscaling_role,omitempty"` + + // Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. See below. + BootstrapAction []BootstrapActionInitParameters `json:"bootstrapAction,omitempty" tf:"bootstrap_action,omitempty"` + + // List of configurations supplied for the EMR cluster you are creating. Supply a configuration object for applications to override their default configuration. See AWS Documentation for more information. + Configurations *string `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // JSON string for supplying list of configurations for the EMR cluster. + ConfigurationsJSON *string `json:"configurationsJson,omitempty" tf:"configurations_json,omitempty"` + + // Configuration block to use an Instance Fleet for the core node type. Cannot be specified if any core_instance_group configuration blocks are set. Detailed below. + CoreInstanceFleet *CoreInstanceFleetInitParameters `json:"coreInstanceFleet,omitempty" tf:"core_instance_fleet,omitempty"` + + // Configuration block to use an Instance Group for the core node type. + CoreInstanceGroup *CoreInstanceGroupInitParameters `json:"coreInstanceGroup,omitempty" tf:"core_instance_group,omitempty"` + + // Custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later. + CustomAMIID *string `json:"customAmiId,omitempty" tf:"custom_ami_id,omitempty"` + + // Size in GiB of the EBS root device volume of the Linux AMI that is used for each EC2 instance. Available in Amazon EMR version 4.x and later. + EBSRootVolumeSize *float64 `json:"ebsRootVolumeSize,omitempty" tf:"ebs_root_volume_size,omitempty"` + + // Attributes for the EC2 instances running the job flow. See below. + EC2Attributes *EC2AttributesInitParameters `json:"ec2Attributes,omitempty" tf:"ec2_attributes,omitempty"` + + // Switch on/off run cluster with no steps or when all steps are complete (default is on) + KeepJobFlowAliveWhenNoSteps *bool `json:"keepJobFlowAliveWhenNoSteps,omitempty" tf:"keep_job_flow_alive_when_no_steps,omitempty"` + + // Kerberos configuration for the cluster. See below. + KerberosAttributes *KerberosAttributesInitParameters `json:"kerberosAttributes,omitempty" tf:"kerberos_attributes,omitempty"` + + // List of step states used to filter returned steps + // +listType=set + ListStepsStates []*string `json:"listStepsStates,omitempty" tf:"list_steps_states,omitempty"` + + // AWS KMS customer master key (CMK) key ID or arn used for encrypting log files. This attribute is only available with EMR version 5.30.0 and later, excluding EMR 6.0.0. + LogEncryptionKMSKeyID *string `json:"logEncryptionKmsKeyId,omitempty" tf:"log_encryption_kms_key_id,omitempty"` + + // S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/s3/v1beta2.Bucket + LogURI *string `json:"logUri,omitempty" tf:"log_uri,omitempty"` + + // Reference to a Bucket in s3 to populate logUri. + // +kubebuilder:validation:Optional + LogURIRef *v1.Reference `json:"logUriRef,omitempty" tf:"-"` + + // Selector for a Bucket in s3 to populate logUri. + // +kubebuilder:validation:Optional + LogURISelector *v1.Selector `json:"logUriSelector,omitempty" tf:"-"` + + // Configuration block to use an Instance Group for the master node type. + MasterInstanceGroup *MasterInstanceGroupInitParameters `json:"masterInstanceGroup,omitempty" tf:"master_instance_group,omitempty"` + + // Name of the job flow. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The specified placement group configuration for an Amazon EMR cluster. + PlacementGroupConfig []PlacementGroupConfigInitParameters `json:"placementGroupConfig,omitempty" tf:"placement_group_config,omitempty"` + + // Release label for the Amazon EMR release. + ReleaseLabel *string `json:"releaseLabel,omitempty" tf:"release_label,omitempty"` + + // Way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an instance group is resized. + ScaleDownBehavior *string `json:"scaleDownBehavior,omitempty" tf:"scale_down_behavior,omitempty"` + + // Security configuration name to attach to the EMR cluster. Only valid for EMR clusters with release_label 4.8.0 or greater. + SecurityConfiguration *string `json:"securityConfiguration,omitempty" tf:"security_configuration,omitempty"` + + // IAM role that will be assumed by the Amazon EMR service to access AWS resources. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/iam/v1beta1.Role + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractParamPath("arn",true) + ServiceRole *string `json:"serviceRole,omitempty" tf:"service_role,omitempty"` + + // Reference to a Role in iam to populate serviceRole. + // +kubebuilder:validation:Optional + ServiceRoleRef *v1.Reference `json:"serviceRoleRef,omitempty" tf:"-"` + + // Selector for a Role in iam to populate serviceRole. + // +kubebuilder:validation:Optional + ServiceRoleSelector *v1.Selector `json:"serviceRoleSelector,omitempty" tf:"-"` + + // List of steps to run when creating the cluster. See below. This argument is processed in attribute-as-blocks mode. + Step []StepInitParameters `json:"step,omitempty" tf:"step,omitempty"` + + // Number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with release_label 5.28.0 or greater (default is 1). + StepConcurrencyLevel *float64 `json:"stepConcurrencyLevel,omitempty" tf:"step_concurrency_level,omitempty"` + + // Key-value map of resource tags. + // +mapType=granular + Tags map[string]*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // Switch on/off termination protection (default is false, except when using multiple master nodes). Before attempting to destroy the resource when termination protection is enabled, this configuration must be applied with its value set to false. + TerminationProtection *bool `json:"terminationProtection,omitempty" tf:"termination_protection,omitempty"` + + // Whether whether Amazon EMR should gracefully replace core nodes that have degraded within the cluster. Default value is false. + UnhealthyNodeReplacement *bool `json:"unhealthyNodeReplacement,omitempty" tf:"unhealthy_node_replacement,omitempty"` + + // Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default value is true. + VisibleToAllUsers *bool `json:"visibleToAllUsers,omitempty" tf:"visible_to_all_users,omitempty"` +} + +type ClusterObservation struct { + + // JSON string for selecting additional features such as adding proxy information. + AdditionalInfo *string `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // A case-insensitive list of applications for Amazon EMR to install and configure when launching the cluster. For a list of applications available for each Amazon EMR release version, see the Amazon EMR Release Guide. + // +listType=set + Applications []*string `json:"applications,omitempty" tf:"applications,omitempty"` + + // ARN of the cluster. + Arn *string `json:"arn,omitempty" tf:"arn,omitempty"` + + // An auto-termination policy for an Amazon EMR cluster. An auto-termination policy defines the amount of idle time in seconds after which a cluster automatically terminates. See Auto Termination Policy Below. + AutoTerminationPolicy *AutoTerminationPolicyObservation `json:"autoTerminationPolicy,omitempty" tf:"auto_termination_policy,omitempty"` + + // IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group. + AutoscalingRole *string `json:"autoscalingRole,omitempty" tf:"autoscaling_role,omitempty"` + + // Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. See below. + BootstrapAction []BootstrapActionObservation `json:"bootstrapAction,omitempty" tf:"bootstrap_action,omitempty"` + + ClusterState *string `json:"clusterState,omitempty" tf:"cluster_state,omitempty"` + + // List of configurations supplied for the EMR cluster you are creating. Supply a configuration object for applications to override their default configuration. See AWS Documentation for more information. + Configurations *string `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // JSON string for supplying list of configurations for the EMR cluster. + ConfigurationsJSON *string `json:"configurationsJson,omitempty" tf:"configurations_json,omitempty"` + + // Configuration block to use an Instance Fleet for the core node type. Cannot be specified if any core_instance_group configuration blocks are set. Detailed below. + CoreInstanceFleet *CoreInstanceFleetObservation `json:"coreInstanceFleet,omitempty" tf:"core_instance_fleet,omitempty"` + + // Configuration block to use an Instance Group for the core node type. + CoreInstanceGroup *CoreInstanceGroupObservation `json:"coreInstanceGroup,omitempty" tf:"core_instance_group,omitempty"` + + // Custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later. + CustomAMIID *string `json:"customAmiId,omitempty" tf:"custom_ami_id,omitempty"` + + // Size in GiB of the EBS root device volume of the Linux AMI that is used for each EC2 instance. Available in Amazon EMR version 4.x and later. + EBSRootVolumeSize *float64 `json:"ebsRootVolumeSize,omitempty" tf:"ebs_root_volume_size,omitempty"` + + // Attributes for the EC2 instances running the job flow. See below. + EC2Attributes *EC2AttributesObservation `json:"ec2Attributes,omitempty" tf:"ec2_attributes,omitempty"` + + // ID of the cluster. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Switch on/off run cluster with no steps or when all steps are complete (default is on) + KeepJobFlowAliveWhenNoSteps *bool `json:"keepJobFlowAliveWhenNoSteps,omitempty" tf:"keep_job_flow_alive_when_no_steps,omitempty"` + + // Kerberos configuration for the cluster. See below. + KerberosAttributes *KerberosAttributesObservation `json:"kerberosAttributes,omitempty" tf:"kerberos_attributes,omitempty"` + + // List of step states used to filter returned steps + // +listType=set + ListStepsStates []*string `json:"listStepsStates,omitempty" tf:"list_steps_states,omitempty"` + + // AWS KMS customer master key (CMK) key ID or arn used for encrypting log files. This attribute is only available with EMR version 5.30.0 and later, excluding EMR 6.0.0. + LogEncryptionKMSKeyID *string `json:"logEncryptionKmsKeyId,omitempty" tf:"log_encryption_kms_key_id,omitempty"` + + // S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created. + LogURI *string `json:"logUri,omitempty" tf:"log_uri,omitempty"` + + // Configuration block to use an Instance Fleet for the master node type. Cannot be specified if any master_instance_group configuration blocks are set. Detailed below. + MasterInstanceFleet *MasterInstanceFleetObservation `json:"masterInstanceFleet,omitempty" tf:"master_instance_fleet,omitempty"` + + // Configuration block to use an Instance Group for the master node type. + MasterInstanceGroup *MasterInstanceGroupObservation `json:"masterInstanceGroup,omitempty" tf:"master_instance_group,omitempty"` + + // The DNS name of the master node. If the cluster is on a private subnet, this is the private DNS name. On a public subnet, this is the public DNS name. + MasterPublicDNS *string `json:"masterPublicDns,omitempty" tf:"master_public_dns,omitempty"` + + // Name of the job flow. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The specified placement group configuration for an Amazon EMR cluster. + PlacementGroupConfig []PlacementGroupConfigObservation `json:"placementGroupConfig,omitempty" tf:"placement_group_config,omitempty"` + + // Release label for the Amazon EMR release. + ReleaseLabel *string `json:"releaseLabel,omitempty" tf:"release_label,omitempty"` + + // Way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an instance group is resized. + ScaleDownBehavior *string `json:"scaleDownBehavior,omitempty" tf:"scale_down_behavior,omitempty"` + + // Security configuration name to attach to the EMR cluster. Only valid for EMR clusters with release_label 4.8.0 or greater. + SecurityConfiguration *string `json:"securityConfiguration,omitempty" tf:"security_configuration,omitempty"` + + // IAM role that will be assumed by the Amazon EMR service to access AWS resources. + ServiceRole *string `json:"serviceRole,omitempty" tf:"service_role,omitempty"` + + // List of steps to run when creating the cluster. See below. This argument is processed in attribute-as-blocks mode. + Step []StepObservation `json:"step,omitempty" tf:"step,omitempty"` + + // Number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with release_label 5.28.0 or greater (default is 1). + StepConcurrencyLevel *float64 `json:"stepConcurrencyLevel,omitempty" tf:"step_concurrency_level,omitempty"` + + // Key-value map of resource tags. + // +mapType=granular + Tags map[string]*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // Map of tags assigned to the resource, including those inherited from the provider default_tags configuration block. + // +mapType=granular + TagsAll map[string]*string `json:"tagsAll,omitempty" tf:"tags_all,omitempty"` + + // Switch on/off termination protection (default is false, except when using multiple master nodes). Before attempting to destroy the resource when termination protection is enabled, this configuration must be applied with its value set to false. + TerminationProtection *bool `json:"terminationProtection,omitempty" tf:"termination_protection,omitempty"` + + // Whether whether Amazon EMR should gracefully replace core nodes that have degraded within the cluster. Default value is false. + UnhealthyNodeReplacement *bool `json:"unhealthyNodeReplacement,omitempty" tf:"unhealthy_node_replacement,omitempty"` + + // Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default value is true. + VisibleToAllUsers *bool `json:"visibleToAllUsers,omitempty" tf:"visible_to_all_users,omitempty"` +} + +type ClusterParameters struct { + + // JSON string for selecting additional features such as adding proxy information. + // +kubebuilder:validation:Optional + AdditionalInfo *string `json:"additionalInfo,omitempty" tf:"additional_info,omitempty"` + + // A case-insensitive list of applications for Amazon EMR to install and configure when launching the cluster. For a list of applications available for each Amazon EMR release version, see the Amazon EMR Release Guide. + // +kubebuilder:validation:Optional + // +listType=set + Applications []*string `json:"applications,omitempty" tf:"applications,omitempty"` + + // An auto-termination policy for an Amazon EMR cluster. An auto-termination policy defines the amount of idle time in seconds after which a cluster automatically terminates. See Auto Termination Policy Below. + // +kubebuilder:validation:Optional + AutoTerminationPolicy *AutoTerminationPolicyParameters `json:"autoTerminationPolicy,omitempty" tf:"auto_termination_policy,omitempty"` + + // IAM role for automatic scaling policies. The IAM role provides permissions that the automatic scaling feature requires to launch and terminate EC2 instances in an instance group. + // +kubebuilder:validation:Optional + AutoscalingRole *string `json:"autoscalingRole,omitempty" tf:"autoscaling_role,omitempty"` + + // Ordered list of bootstrap actions that will be run before Hadoop is started on the cluster nodes. See below. + // +kubebuilder:validation:Optional + BootstrapAction []BootstrapActionParameters `json:"bootstrapAction,omitempty" tf:"bootstrap_action,omitempty"` + + // List of configurations supplied for the EMR cluster you are creating. Supply a configuration object for applications to override their default configuration. See AWS Documentation for more information. + // +kubebuilder:validation:Optional + Configurations *string `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // JSON string for supplying list of configurations for the EMR cluster. + // +kubebuilder:validation:Optional + ConfigurationsJSON *string `json:"configurationsJson,omitempty" tf:"configurations_json,omitempty"` + + // Configuration block to use an Instance Fleet for the core node type. Cannot be specified if any core_instance_group configuration blocks are set. Detailed below. + // +kubebuilder:validation:Optional + CoreInstanceFleet *CoreInstanceFleetParameters `json:"coreInstanceFleet,omitempty" tf:"core_instance_fleet,omitempty"` + + // Configuration block to use an Instance Group for the core node type. + // +kubebuilder:validation:Optional + CoreInstanceGroup *CoreInstanceGroupParameters `json:"coreInstanceGroup,omitempty" tf:"core_instance_group,omitempty"` + + // Custom Amazon Linux AMI for the cluster (instead of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 and later. + // +kubebuilder:validation:Optional + CustomAMIID *string `json:"customAmiId,omitempty" tf:"custom_ami_id,omitempty"` + + // Size in GiB of the EBS root device volume of the Linux AMI that is used for each EC2 instance. Available in Amazon EMR version 4.x and later. + // +kubebuilder:validation:Optional + EBSRootVolumeSize *float64 `json:"ebsRootVolumeSize,omitempty" tf:"ebs_root_volume_size,omitempty"` + + // Attributes for the EC2 instances running the job flow. See below. + // +kubebuilder:validation:Optional + EC2Attributes *EC2AttributesParameters `json:"ec2Attributes,omitempty" tf:"ec2_attributes,omitempty"` + + // Switch on/off run cluster with no steps or when all steps are complete (default is on) + // +kubebuilder:validation:Optional + KeepJobFlowAliveWhenNoSteps *bool `json:"keepJobFlowAliveWhenNoSteps,omitempty" tf:"keep_job_flow_alive_when_no_steps,omitempty"` + + // Kerberos configuration for the cluster. See below. + // +kubebuilder:validation:Optional + KerberosAttributes *KerberosAttributesParameters `json:"kerberosAttributes,omitempty" tf:"kerberos_attributes,omitempty"` + + // List of step states used to filter returned steps + // +kubebuilder:validation:Optional + // +listType=set + ListStepsStates []*string `json:"listStepsStates,omitempty" tf:"list_steps_states,omitempty"` + + // AWS KMS customer master key (CMK) key ID or arn used for encrypting log files. This attribute is only available with EMR version 5.30.0 and later, excluding EMR 6.0.0. + // +kubebuilder:validation:Optional + LogEncryptionKMSKeyID *string `json:"logEncryptionKmsKeyId,omitempty" tf:"log_encryption_kms_key_id,omitempty"` + + // S3 bucket to write the log files of the job flow. If a value is not provided, logs are not created. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/s3/v1beta2.Bucket + // +kubebuilder:validation:Optional + LogURI *string `json:"logUri,omitempty" tf:"log_uri,omitempty"` + + // Reference to a Bucket in s3 to populate logUri. + // +kubebuilder:validation:Optional + LogURIRef *v1.Reference `json:"logUriRef,omitempty" tf:"-"` + + // Selector for a Bucket in s3 to populate logUri. + // +kubebuilder:validation:Optional + LogURISelector *v1.Selector `json:"logUriSelector,omitempty" tf:"-"` + + // Configuration block to use an Instance Group for the master node type. + // +kubebuilder:validation:Optional + MasterInstanceGroup *MasterInstanceGroupParameters `json:"masterInstanceGroup,omitempty" tf:"master_instance_group,omitempty"` + + // Name of the job flow. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The specified placement group configuration for an Amazon EMR cluster. + // +kubebuilder:validation:Optional + PlacementGroupConfig []PlacementGroupConfigParameters `json:"placementGroupConfig,omitempty" tf:"placement_group_config,omitempty"` + + // Region is the region you'd like your resource to be created in. + // +upjet:crd:field:TFTag=- + // +kubebuilder:validation:Required + Region *string `json:"region" tf:"-"` + + // Release label for the Amazon EMR release. + // +kubebuilder:validation:Optional + ReleaseLabel *string `json:"releaseLabel,omitempty" tf:"release_label,omitempty"` + + // Way that individual Amazon EC2 instances terminate when an automatic scale-in activity occurs or an instance group is resized. + // +kubebuilder:validation:Optional + ScaleDownBehavior *string `json:"scaleDownBehavior,omitempty" tf:"scale_down_behavior,omitempty"` + + // Security configuration name to attach to the EMR cluster. Only valid for EMR clusters with release_label 4.8.0 or greater. + // +kubebuilder:validation:Optional + SecurityConfiguration *string `json:"securityConfiguration,omitempty" tf:"security_configuration,omitempty"` + + // IAM role that will be assumed by the Amazon EMR service to access AWS resources. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/iam/v1beta1.Role + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractParamPath("arn",true) + // +kubebuilder:validation:Optional + ServiceRole *string `json:"serviceRole,omitempty" tf:"service_role,omitempty"` + + // Reference to a Role in iam to populate serviceRole. + // +kubebuilder:validation:Optional + ServiceRoleRef *v1.Reference `json:"serviceRoleRef,omitempty" tf:"-"` + + // Selector for a Role in iam to populate serviceRole. + // +kubebuilder:validation:Optional + ServiceRoleSelector *v1.Selector `json:"serviceRoleSelector,omitempty" tf:"-"` + + // List of steps to run when creating the cluster. See below. This argument is processed in attribute-as-blocks mode. + // +kubebuilder:validation:Optional + Step []StepParameters `json:"step,omitempty" tf:"step,omitempty"` + + // Number of steps that can be executed concurrently. You can specify a maximum of 256 steps. Only valid for EMR clusters with release_label 5.28.0 or greater (default is 1). + // +kubebuilder:validation:Optional + StepConcurrencyLevel *float64 `json:"stepConcurrencyLevel,omitempty" tf:"step_concurrency_level,omitempty"` + + // Key-value map of resource tags. + // +kubebuilder:validation:Optional + // +mapType=granular + Tags map[string]*string `json:"tags,omitempty" tf:"tags,omitempty"` + + // Switch on/off termination protection (default is false, except when using multiple master nodes). Before attempting to destroy the resource when termination protection is enabled, this configuration must be applied with its value set to false. + // +kubebuilder:validation:Optional + TerminationProtection *bool `json:"terminationProtection,omitempty" tf:"termination_protection,omitempty"` + + // Whether whether Amazon EMR should gracefully replace core nodes that have degraded within the cluster. Default value is false. + // +kubebuilder:validation:Optional + UnhealthyNodeReplacement *bool `json:"unhealthyNodeReplacement,omitempty" tf:"unhealthy_node_replacement,omitempty"` + + // Whether the job flow is visible to all IAM users of the AWS account associated with the job flow. Default value is true. + // +kubebuilder:validation:Optional + VisibleToAllUsers *bool `json:"visibleToAllUsers,omitempty" tf:"visible_to_all_users,omitempty"` +} + +type ConfigurationsInitParameters struct { + + // Classification within a configuration. + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type ConfigurationsObservation struct { + + // Classification within a configuration. + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type ConfigurationsParameters struct { + + // Classification within a configuration. + // +kubebuilder:validation:Optional + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +kubebuilder:validation:Optional + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type CoreInstanceFleetInitParameters struct { + + // Configuration block for instance fleet. + InstanceTypeConfigs []InstanceTypeConfigsInitParameters `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification. + LaunchSpecifications *LaunchSpecificationsInitParameters `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // Target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +type CoreInstanceFleetObservation struct { + + // Master node type Instance Group ID, if using Instance Group for this node type. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Configuration block for instance fleet. + InstanceTypeConfigs []InstanceTypeConfigsObservation `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification. + LaunchSpecifications *LaunchSpecificationsObservation `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + ProvisionedOnDemandCapacity *float64 `json:"provisionedOnDemandCapacity,omitempty" tf:"provisioned_on_demand_capacity,omitempty"` + + ProvisionedSpotCapacity *float64 `json:"provisionedSpotCapacity,omitempty" tf:"provisioned_spot_capacity,omitempty"` + + // The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // Target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +type CoreInstanceFleetParameters struct { + + // Configuration block for instance fleet. + // +kubebuilder:validation:Optional + InstanceTypeConfigs []InstanceTypeConfigsParameters `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification. + // +kubebuilder:validation:Optional + LaunchSpecifications *LaunchSpecificationsParameters `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + // +kubebuilder:validation:Optional + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // Target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + // +kubebuilder:validation:Optional + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +type CoreInstanceGroupEBSConfigInitParameters struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The throughput, in mebibyte per second (MiB/s). + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type CoreInstanceGroupEBSConfigObservation struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The throughput, in mebibyte per second (MiB/s). + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type CoreInstanceGroupEBSConfigParameters struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + // +kubebuilder:validation:Optional + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + // +kubebuilder:validation:Optional + Size *float64 `json:"size" tf:"size,omitempty"` + + // The throughput, in mebibyte per second (MiB/s). + // +kubebuilder:validation:Optional + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + // +kubebuilder:validation:Optional + Type *string `json:"type" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + // +kubebuilder:validation:Optional + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type CoreInstanceGroupInitParameters struct { + + // String containing the EMR Auto Scaling Policy JSON. + AutoscalingPolicy *string `json:"autoscalingPolicy,omitempty" tf:"autoscaling_policy,omitempty"` + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []CoreInstanceGroupEBSConfigInitParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // Target number of instances for the instance group. Must be at least 1. Defaults to 1. + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // EC2 instance type for all instances in the instance group. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Friendly name given to the instance group. + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type CoreInstanceGroupObservation struct { + + // String containing the EMR Auto Scaling Policy JSON. + AutoscalingPolicy *string `json:"autoscalingPolicy,omitempty" tf:"autoscaling_policy,omitempty"` + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []CoreInstanceGroupEBSConfigObservation `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // Master node type Instance Group ID, if using Instance Group for this node type. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Target number of instances for the instance group. Must be at least 1. Defaults to 1. + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // EC2 instance type for all instances in the instance group. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Friendly name given to the instance group. + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type CoreInstanceGroupParameters struct { + + // String containing the EMR Auto Scaling Policy JSON. + // +kubebuilder:validation:Optional + AutoscalingPolicy *string `json:"autoscalingPolicy,omitempty" tf:"autoscaling_policy,omitempty"` + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + // +kubebuilder:validation:Optional + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + // +kubebuilder:validation:Optional + EBSConfig []CoreInstanceGroupEBSConfigParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // Target number of instances for the instance group. Must be at least 1. Defaults to 1. + // +kubebuilder:validation:Optional + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // EC2 instance type for all instances in the instance group. + // +kubebuilder:validation:Optional + InstanceType *string `json:"instanceType" tf:"instance_type,omitempty"` + + // Friendly name given to the instance group. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type EBSConfigInitParameters struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type EBSConfigObservation struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type EBSConfigParameters struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + // +kubebuilder:validation:Optional + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + // +kubebuilder:validation:Optional + Size *float64 `json:"size" tf:"size,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + // +kubebuilder:validation:Optional + Type *string `json:"type" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + // +kubebuilder:validation:Optional + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type EC2AttributesInitParameters struct { + + // String containing a comma separated list of additional Amazon EC2 security group IDs for the master node. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + AdditionalMasterSecurityGroups *string `json:"additionalMasterSecurityGroups,omitempty" tf:"additional_master_security_groups,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate additionalMasterSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalMasterSecurityGroupsRef *v1.Reference `json:"additionalMasterSecurityGroupsRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate additionalMasterSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalMasterSecurityGroupsSelector *v1.Selector `json:"additionalMasterSecurityGroupsSelector,omitempty" tf:"-"` + + // String containing a comma separated list of additional Amazon EC2 security group IDs for the slave nodes as a comma separated string. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + AdditionalSlaveSecurityGroups *string `json:"additionalSlaveSecurityGroups,omitempty" tf:"additional_slave_security_groups,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate additionalSlaveSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalSlaveSecurityGroupsRef *v1.Reference `json:"additionalSlaveSecurityGroupsRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate additionalSlaveSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalSlaveSecurityGroupsSelector *v1.Selector `json:"additionalSlaveSecurityGroupsSelector,omitempty" tf:"-"` + + // Identifier of the Amazon EC2 EMR-Managed security group for the master node. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + EmrManagedMasterSecurityGroup *string `json:"emrManagedMasterSecurityGroup,omitempty" tf:"emr_managed_master_security_group,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate emrManagedMasterSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedMasterSecurityGroupRef *v1.Reference `json:"emrManagedMasterSecurityGroupRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate emrManagedMasterSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedMasterSecurityGroupSelector *v1.Selector `json:"emrManagedMasterSecurityGroupSelector,omitempty" tf:"-"` + + // Identifier of the Amazon EC2 EMR-Managed security group for the slave nodes. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + EmrManagedSlaveSecurityGroup *string `json:"emrManagedSlaveSecurityGroup,omitempty" tf:"emr_managed_slave_security_group,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate emrManagedSlaveSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedSlaveSecurityGroupRef *v1.Reference `json:"emrManagedSlaveSecurityGroupRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate emrManagedSlaveSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedSlaveSecurityGroupSelector *v1.Selector `json:"emrManagedSlaveSecurityGroupSelector,omitempty" tf:"-"` + + // Instance Profile for EC2 instances of the cluster assume this role. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/iam/v1beta1.InstanceProfile + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractParamPath("arn",true) + InstanceProfile *string `json:"instanceProfile,omitempty" tf:"instance_profile,omitempty"` + + // Reference to a InstanceProfile in iam to populate instanceProfile. + // +kubebuilder:validation:Optional + InstanceProfileRef *v1.Reference `json:"instanceProfileRef,omitempty" tf:"-"` + + // Selector for a InstanceProfile in iam to populate instanceProfile. + // +kubebuilder:validation:Optional + InstanceProfileSelector *v1.Selector `json:"instanceProfileSelector,omitempty" tf:"-"` + + // Amazon EC2 key pair that can be used to ssh to the master node as the user called hadoop. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.KeyPair + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // Reference to a KeyPair in ec2 to populate keyName. + // +kubebuilder:validation:Optional + KeyNameRef *v1.Reference `json:"keyNameRef,omitempty" tf:"-"` + + // Selector for a KeyPair in ec2 to populate keyName. + // +kubebuilder:validation:Optional + KeyNameSelector *v1.Selector `json:"keyNameSelector,omitempty" tf:"-"` + + // Identifier of the Amazon EC2 service-access security group - required when the cluster runs on a private subnet. + ServiceAccessSecurityGroup *string `json:"serviceAccessSecurityGroup,omitempty" tf:"service_access_security_group,omitempty"` + + // VPC subnet id where you want the job flow to launch. Cannot specify the cc1.4xlarge instance type for nodes of a job flow launched in an Amazon VPC. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.Subnet + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + SubnetID *string `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + // Reference to a Subnet in ec2 to populate subnetId. + // +kubebuilder:validation:Optional + SubnetIDRef *v1.Reference `json:"subnetIdRef,omitempty" tf:"-"` + + // Selector for a Subnet in ec2 to populate subnetId. + // +kubebuilder:validation:Optional + SubnetIDSelector *v1.Selector `json:"subnetIdSelector,omitempty" tf:"-"` + + // List of VPC subnet id-s where you want the job flow to launch. Amazon EMR identifies the best Availability Zone to launch instances according to your fleet specifications. + // +listType=set + SubnetIds []*string `json:"subnetIds,omitempty" tf:"subnet_ids,omitempty"` +} + +type EC2AttributesObservation struct { + + // String containing a comma separated list of additional Amazon EC2 security group IDs for the master node. + AdditionalMasterSecurityGroups *string `json:"additionalMasterSecurityGroups,omitempty" tf:"additional_master_security_groups,omitempty"` + + // String containing a comma separated list of additional Amazon EC2 security group IDs for the slave nodes as a comma separated string. + AdditionalSlaveSecurityGroups *string `json:"additionalSlaveSecurityGroups,omitempty" tf:"additional_slave_security_groups,omitempty"` + + // Identifier of the Amazon EC2 EMR-Managed security group for the master node. + EmrManagedMasterSecurityGroup *string `json:"emrManagedMasterSecurityGroup,omitempty" tf:"emr_managed_master_security_group,omitempty"` + + // Identifier of the Amazon EC2 EMR-Managed security group for the slave nodes. + EmrManagedSlaveSecurityGroup *string `json:"emrManagedSlaveSecurityGroup,omitempty" tf:"emr_managed_slave_security_group,omitempty"` + + // Instance Profile for EC2 instances of the cluster assume this role. + InstanceProfile *string `json:"instanceProfile,omitempty" tf:"instance_profile,omitempty"` + + // Amazon EC2 key pair that can be used to ssh to the master node as the user called hadoop. + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // Identifier of the Amazon EC2 service-access security group - required when the cluster runs on a private subnet. + ServiceAccessSecurityGroup *string `json:"serviceAccessSecurityGroup,omitempty" tf:"service_access_security_group,omitempty"` + + // VPC subnet id where you want the job flow to launch. Cannot specify the cc1.4xlarge instance type for nodes of a job flow launched in an Amazon VPC. + SubnetID *string `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + // List of VPC subnet id-s where you want the job flow to launch. Amazon EMR identifies the best Availability Zone to launch instances according to your fleet specifications. + // +listType=set + SubnetIds []*string `json:"subnetIds,omitempty" tf:"subnet_ids,omitempty"` +} + +type EC2AttributesParameters struct { + + // String containing a comma separated list of additional Amazon EC2 security group IDs for the master node. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + // +kubebuilder:validation:Optional + AdditionalMasterSecurityGroups *string `json:"additionalMasterSecurityGroups,omitempty" tf:"additional_master_security_groups,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate additionalMasterSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalMasterSecurityGroupsRef *v1.Reference `json:"additionalMasterSecurityGroupsRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate additionalMasterSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalMasterSecurityGroupsSelector *v1.Selector `json:"additionalMasterSecurityGroupsSelector,omitempty" tf:"-"` + + // String containing a comma separated list of additional Amazon EC2 security group IDs for the slave nodes as a comma separated string. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + // +kubebuilder:validation:Optional + AdditionalSlaveSecurityGroups *string `json:"additionalSlaveSecurityGroups,omitempty" tf:"additional_slave_security_groups,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate additionalSlaveSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalSlaveSecurityGroupsRef *v1.Reference `json:"additionalSlaveSecurityGroupsRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate additionalSlaveSecurityGroups. + // +kubebuilder:validation:Optional + AdditionalSlaveSecurityGroupsSelector *v1.Selector `json:"additionalSlaveSecurityGroupsSelector,omitempty" tf:"-"` + + // Identifier of the Amazon EC2 EMR-Managed security group for the master node. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + // +kubebuilder:validation:Optional + EmrManagedMasterSecurityGroup *string `json:"emrManagedMasterSecurityGroup,omitempty" tf:"emr_managed_master_security_group,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate emrManagedMasterSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedMasterSecurityGroupRef *v1.Reference `json:"emrManagedMasterSecurityGroupRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate emrManagedMasterSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedMasterSecurityGroupSelector *v1.Selector `json:"emrManagedMasterSecurityGroupSelector,omitempty" tf:"-"` + + // Identifier of the Amazon EC2 EMR-Managed security group for the slave nodes. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.SecurityGroup + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + // +kubebuilder:validation:Optional + EmrManagedSlaveSecurityGroup *string `json:"emrManagedSlaveSecurityGroup,omitempty" tf:"emr_managed_slave_security_group,omitempty"` + + // Reference to a SecurityGroup in ec2 to populate emrManagedSlaveSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedSlaveSecurityGroupRef *v1.Reference `json:"emrManagedSlaveSecurityGroupRef,omitempty" tf:"-"` + + // Selector for a SecurityGroup in ec2 to populate emrManagedSlaveSecurityGroup. + // +kubebuilder:validation:Optional + EmrManagedSlaveSecurityGroupSelector *v1.Selector `json:"emrManagedSlaveSecurityGroupSelector,omitempty" tf:"-"` + + // Instance Profile for EC2 instances of the cluster assume this role. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/iam/v1beta1.InstanceProfile + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractParamPath("arn",true) + // +kubebuilder:validation:Optional + InstanceProfile *string `json:"instanceProfile,omitempty" tf:"instance_profile,omitempty"` + + // Reference to a InstanceProfile in iam to populate instanceProfile. + // +kubebuilder:validation:Optional + InstanceProfileRef *v1.Reference `json:"instanceProfileRef,omitempty" tf:"-"` + + // Selector for a InstanceProfile in iam to populate instanceProfile. + // +kubebuilder:validation:Optional + InstanceProfileSelector *v1.Selector `json:"instanceProfileSelector,omitempty" tf:"-"` + + // Amazon EC2 key pair that can be used to ssh to the master node as the user called hadoop. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.KeyPair + // +kubebuilder:validation:Optional + KeyName *string `json:"keyName,omitempty" tf:"key_name,omitempty"` + + // Reference to a KeyPair in ec2 to populate keyName. + // +kubebuilder:validation:Optional + KeyNameRef *v1.Reference `json:"keyNameRef,omitempty" tf:"-"` + + // Selector for a KeyPair in ec2 to populate keyName. + // +kubebuilder:validation:Optional + KeyNameSelector *v1.Selector `json:"keyNameSelector,omitempty" tf:"-"` + + // Identifier of the Amazon EC2 service-access security group - required when the cluster runs on a private subnet. + // +kubebuilder:validation:Optional + ServiceAccessSecurityGroup *string `json:"serviceAccessSecurityGroup,omitempty" tf:"service_access_security_group,omitempty"` + + // VPC subnet id where you want the job flow to launch. Cannot specify the cc1.4xlarge instance type for nodes of a job flow launched in an Amazon VPC. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/ec2/v1beta1.Subnet + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + // +kubebuilder:validation:Optional + SubnetID *string `json:"subnetId,omitempty" tf:"subnet_id,omitempty"` + + // Reference to a Subnet in ec2 to populate subnetId. + // +kubebuilder:validation:Optional + SubnetIDRef *v1.Reference `json:"subnetIdRef,omitempty" tf:"-"` + + // Selector for a Subnet in ec2 to populate subnetId. + // +kubebuilder:validation:Optional + SubnetIDSelector *v1.Selector `json:"subnetIdSelector,omitempty" tf:"-"` + + // List of VPC subnet id-s where you want the job flow to launch. Amazon EMR identifies the best Availability Zone to launch instances according to your fleet specifications. + // +kubebuilder:validation:Optional + // +listType=set + SubnetIds []*string `json:"subnetIds,omitempty" tf:"subnet_ids,omitempty"` +} + +type HadoopJarStepInitParameters struct { + + // List of command line arguments to pass to the bootstrap action script. + Args []*string `json:"args,omitempty" tf:"args"` + + // Path to a JAR file run during the step. + Jar *string `json:"jar,omitempty" tf:"jar"` + + // Name of the main class in the specified Java file. If not specified, the JAR file should specify a Main-Class in its manifest file. + MainClass *string `json:"mainClass,omitempty" tf:"main_class"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties"` +} + +type HadoopJarStepObservation struct { + + // List of command line arguments to pass to the bootstrap action script. + Args []*string `json:"args,omitempty" tf:"args,omitempty"` + + // Path to a JAR file run during the step. + Jar *string `json:"jar,omitempty" tf:"jar,omitempty"` + + // Name of the main class in the specified Java file. If not specified, the JAR file should specify a Main-Class in its manifest file. + MainClass *string `json:"mainClass,omitempty" tf:"main_class,omitempty"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type HadoopJarStepParameters struct { + + // List of command line arguments to pass to the bootstrap action script. + // +kubebuilder:validation:Optional + Args []*string `json:"args,omitempty" tf:"args"` + + // Path to a JAR file run during the step. + // +kubebuilder:validation:Optional + Jar *string `json:"jar,omitempty" tf:"jar"` + + // Name of the main class in the specified Java file. If not specified, the JAR file should specify a Main-Class in its manifest file. + // +kubebuilder:validation:Optional + MainClass *string `json:"mainClass,omitempty" tf:"main_class"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +kubebuilder:validation:Optional + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties"` +} + +type InstanceTypeConfigsConfigurationsInitParameters struct { +} + +type InstanceTypeConfigsConfigurationsObservation struct { + + // Classification within a configuration. + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // Key-Value map of Java properties that are set when the step runs. You can use these properties to pass key value pairs to your main function. + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type InstanceTypeConfigsConfigurationsParameters struct { +} + +type InstanceTypeConfigsEBSConfigInitParameters struct { +} + +type InstanceTypeConfigsEBSConfigObservation struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceTypeConfigsEBSConfigParameters struct { +} + +type InstanceTypeConfigsInitParameters struct { + + // Bid price for each EC2 Spot instance type as defined by instance_type. Expressed in USD. If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + Configurations []ConfigurationsInitParameters `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []EBSConfigInitParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // EC2 instance type, such as m4.xlarge. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type InstanceTypeConfigsObservation struct { + + // Bid price for each EC2 Spot instance type as defined by instance_type. Expressed in USD. If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + Configurations []ConfigurationsObservation `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []EBSConfigObservation `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // EC2 instance type, such as m4.xlarge. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type InstanceTypeConfigsParameters struct { + + // Bid price for each EC2 Spot instance type as defined by instance_type. Expressed in USD. If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + // +kubebuilder:validation:Optional + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + // +kubebuilder:validation:Optional + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + // +kubebuilder:validation:Optional + Configurations []ConfigurationsParameters `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + // +kubebuilder:validation:Optional + EBSConfig []EBSConfigParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // EC2 instance type, such as m4.xlarge. + // +kubebuilder:validation:Optional + InstanceType *string `json:"instanceType" tf:"instance_type,omitempty"` + + // Number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + // +kubebuilder:validation:Optional + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type KerberosAttributesInitParameters struct { + + // Active Directory password for ad_domain_join_user. + AdDomainJoinPasswordSecretRef *v1.SecretKeySelector `json:"adDomainJoinPasswordSecretRef,omitempty" tf:"-"` + + // Required only when establishing a cross-realm trust with an Active Directory domain. A user with sufficient privileges to join resources to the domain. + AdDomainJoinUser *string `json:"adDomainJoinUser,omitempty" tf:"ad_domain_join_user,omitempty"` + + // Required only when establishing a cross-realm trust with a KDC in a different realm. The cross-realm principal password, which must be identical across realms. + CrossRealmTrustPrincipalPasswordSecretRef *v1.SecretKeySelector `json:"crossRealmTrustPrincipalPasswordSecretRef,omitempty" tf:"-"` + + // Password used within the cluster for the kadmin service on the cluster-dedicated KDC, which maintains Kerberos principals, password policies, and keytabs for the cluster. + KdcAdminPasswordSecretRef v1.SecretKeySelector `json:"kdcAdminPasswordSecretRef" tf:"-"` + + // Name of the Kerberos realm to which all nodes in a cluster belong. For example, EC2.INTERNAL + Realm *string `json:"realm,omitempty" tf:"realm,omitempty"` +} + +type KerberosAttributesObservation struct { + + // Required only when establishing a cross-realm trust with an Active Directory domain. A user with sufficient privileges to join resources to the domain. + AdDomainJoinUser *string `json:"adDomainJoinUser,omitempty" tf:"ad_domain_join_user,omitempty"` + + // Name of the Kerberos realm to which all nodes in a cluster belong. For example, EC2.INTERNAL + Realm *string `json:"realm,omitempty" tf:"realm,omitempty"` +} + +type KerberosAttributesParameters struct { + + // Active Directory password for ad_domain_join_user. + // +kubebuilder:validation:Optional + AdDomainJoinPasswordSecretRef *v1.SecretKeySelector `json:"adDomainJoinPasswordSecretRef,omitempty" tf:"-"` + + // Required only when establishing a cross-realm trust with an Active Directory domain. A user with sufficient privileges to join resources to the domain. + // +kubebuilder:validation:Optional + AdDomainJoinUser *string `json:"adDomainJoinUser,omitempty" tf:"ad_domain_join_user,omitempty"` + + // Required only when establishing a cross-realm trust with a KDC in a different realm. The cross-realm principal password, which must be identical across realms. + // +kubebuilder:validation:Optional + CrossRealmTrustPrincipalPasswordSecretRef *v1.SecretKeySelector `json:"crossRealmTrustPrincipalPasswordSecretRef,omitempty" tf:"-"` + + // Password used within the cluster for the kadmin service on the cluster-dedicated KDC, which maintains Kerberos principals, password policies, and keytabs for the cluster. + // +kubebuilder:validation:Optional + KdcAdminPasswordSecretRef v1.SecretKeySelector `json:"kdcAdminPasswordSecretRef" tf:"-"` + + // Name of the Kerberos realm to which all nodes in a cluster belong. For example, EC2.INTERNAL + // +kubebuilder:validation:Optional + Realm *string `json:"realm" tf:"realm,omitempty"` +} + +type LaunchSpecificationsInitParameters struct { + + // Configuration block for on demand instances launch specifications. + OnDemandSpecification []OnDemandSpecificationInitParameters `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications. + SpotSpecification []SpotSpecificationInitParameters `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type LaunchSpecificationsObservation struct { + + // Configuration block for on demand instances launch specifications. + OnDemandSpecification []OnDemandSpecificationObservation `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications. + SpotSpecification []SpotSpecificationObservation `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type LaunchSpecificationsOnDemandSpecificationInitParameters struct { +} + +type LaunchSpecificationsOnDemandSpecificationObservation struct { + + // Specifies the strategy to use in launching Spot instance fleets. Valid values include capacity-optimized, diversified, lowest-price, price-capacity-optimized. See the AWS documentation for details on each strategy type. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` +} + +type LaunchSpecificationsOnDemandSpecificationParameters struct { +} + +type LaunchSpecificationsParameters struct { + + // Configuration block for on demand instances launch specifications. + // +kubebuilder:validation:Optional + OnDemandSpecification []OnDemandSpecificationParameters `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications. + // +kubebuilder:validation:Optional + SpotSpecification []SpotSpecificationParameters `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type LaunchSpecificationsSpotSpecificationInitParameters struct { +} + +type LaunchSpecificationsSpotSpecificationObservation struct { + + // Specifies the strategy to use in launching Spot instance fleets. Valid values include capacity-optimized, diversified, lowest-price, price-capacity-optimized. See the AWS documentation for details on each strategy type. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` + + // Defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // Action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + TimeoutAction *string `json:"timeoutAction,omitempty" tf:"timeout_action,omitempty"` + + // Spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes,omitempty" tf:"timeout_duration_minutes,omitempty"` +} + +type LaunchSpecificationsSpotSpecificationParameters struct { +} + +type MasterInstanceFleetInitParameters struct { +} + +type MasterInstanceFleetInstanceTypeConfigsInitParameters struct { +} + +type MasterInstanceFleetInstanceTypeConfigsObservation struct { + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // Configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + Configurations []InstanceTypeConfigsConfigurationsObservation `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []InstanceTypeConfigsEBSConfigObservation `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // EC2 instance type for all instances in the instance group. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type MasterInstanceFleetInstanceTypeConfigsParameters struct { +} + +type MasterInstanceFleetLaunchSpecificationsInitParameters struct { +} + +type MasterInstanceFleetLaunchSpecificationsObservation struct { + + // Configuration block for on demand instances launch specifications. + OnDemandSpecification []LaunchSpecificationsOnDemandSpecificationObservation `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications. + SpotSpecification []LaunchSpecificationsSpotSpecificationObservation `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type MasterInstanceFleetLaunchSpecificationsParameters struct { +} + +type MasterInstanceFleetObservation struct { + + // Master node type Instance Group ID, if using Instance Group for this node type. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Configuration block for instance fleet. + InstanceTypeConfigs []MasterInstanceFleetInstanceTypeConfigsObservation `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification. + LaunchSpecifications *MasterInstanceFleetLaunchSpecificationsObservation `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + ProvisionedOnDemandCapacity *float64 `json:"provisionedOnDemandCapacity,omitempty" tf:"provisioned_on_demand_capacity,omitempty"` + + ProvisionedSpotCapacity *float64 `json:"provisionedSpotCapacity,omitempty" tf:"provisioned_spot_capacity,omitempty"` + + // Target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // Target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +type MasterInstanceFleetParameters struct { +} + +type MasterInstanceGroupEBSConfigInitParameters struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The throughput, in mebibyte per second (MiB/s). + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type MasterInstanceGroupEBSConfigObservation struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The throughput, in mebibyte per second (MiB/s). + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type MasterInstanceGroupEBSConfigParameters struct { + + // Number of I/O operations per second (IOPS) that the volume supports. + // +kubebuilder:validation:Optional + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // Volume size, in gibibytes (GiB). + // +kubebuilder:validation:Optional + Size *float64 `json:"size" tf:"size,omitempty"` + + // The throughput, in mebibyte per second (MiB/s). + // +kubebuilder:validation:Optional + Throughput *float64 `json:"throughput,omitempty" tf:"throughput,omitempty"` + + // Volume type. Valid options are gp3, gp2, io1, io2, standard, st1 and sc1. See EBS Volume Types. + // +kubebuilder:validation:Optional + Type *string `json:"type" tf:"type,omitempty"` + + // Number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1). + // +kubebuilder:validation:Optional + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type MasterInstanceGroupInitParameters struct { + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []MasterInstanceGroupEBSConfigInitParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's core_instance_group to be configured. Public (Internet accessible) instances must be created in VPC subnets that have map public IP on launch enabled. + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // EC2 instance type for all instances in the instance group. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Friendly name given to the instance group. + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type MasterInstanceGroupObservation struct { + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []MasterInstanceGroupEBSConfigObservation `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // Master node type Instance Group ID, if using Instance Group for this node type. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's core_instance_group to be configured. Public (Internet accessible) instances must be created in VPC subnets that have map public IP on launch enabled. + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // EC2 instance type for all instances in the instance group. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Friendly name given to the instance group. + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type MasterInstanceGroupParameters struct { + + // Bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + // +kubebuilder:validation:Optional + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + // +kubebuilder:validation:Optional + EBSConfig []MasterInstanceGroupEBSConfigParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // Target number of instances for the instance group. Must be 1 or 3. Defaults to 1. Launching with multiple master nodes is only supported in EMR version 5.23.0+, and requires this resource's core_instance_group to be configured. Public (Internet accessible) instances must be created in VPC subnets that have map public IP on launch enabled. + // +kubebuilder:validation:Optional + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // EC2 instance type for all instances in the instance group. + // +kubebuilder:validation:Optional + InstanceType *string `json:"instanceType" tf:"instance_type,omitempty"` + + // Friendly name given to the instance group. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type OnDemandSpecificationInitParameters struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` +} + +type OnDemandSpecificationObservation struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` +} + +type OnDemandSpecificationParameters struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + // +kubebuilder:validation:Optional + AllocationStrategy *string `json:"allocationStrategy" tf:"allocation_strategy,omitempty"` +} + +type PlacementGroupConfigInitParameters struct { + + // Role of the instance in the cluster. Valid Values: MASTER, CORE, TASK. + InstanceRole *string `json:"instanceRole,omitempty" tf:"instance_role"` + + // EC2 Placement Group strategy associated with instance role. Valid Values: SPREAD, PARTITION, CLUSTER, NONE. + PlacementStrategy *string `json:"placementStrategy,omitempty" tf:"placement_strategy"` +} + +type PlacementGroupConfigObservation struct { + + // Role of the instance in the cluster. Valid Values: MASTER, CORE, TASK. + InstanceRole *string `json:"instanceRole,omitempty" tf:"instance_role,omitempty"` + + // EC2 Placement Group strategy associated with instance role. Valid Values: SPREAD, PARTITION, CLUSTER, NONE. + PlacementStrategy *string `json:"placementStrategy,omitempty" tf:"placement_strategy,omitempty"` +} + +type PlacementGroupConfigParameters struct { + + // Role of the instance in the cluster. Valid Values: MASTER, CORE, TASK. + // +kubebuilder:validation:Optional + InstanceRole *string `json:"instanceRole,omitempty" tf:"instance_role"` + + // EC2 Placement Group strategy associated with instance role. Valid Values: SPREAD, PARTITION, CLUSTER, NONE. + // +kubebuilder:validation:Optional + PlacementStrategy *string `json:"placementStrategy,omitempty" tf:"placement_strategy"` +} + +type SpotSpecificationInitParameters struct { + + // Specifies the strategy to use in launching Spot instance fleets. Valid values include capacity-optimized, diversified, lowest-price, price-capacity-optimized. See the AWS documentation for details on each strategy type. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` + + // Defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // Action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + TimeoutAction *string `json:"timeoutAction,omitempty" tf:"timeout_action,omitempty"` + + // Spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes,omitempty" tf:"timeout_duration_minutes,omitempty"` +} + +type SpotSpecificationObservation struct { + + // Specifies the strategy to use in launching Spot instance fleets. Valid values include capacity-optimized, diversified, lowest-price, price-capacity-optimized. See the AWS documentation for details on each strategy type. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` + + // Defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // Action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + TimeoutAction *string `json:"timeoutAction,omitempty" tf:"timeout_action,omitempty"` + + // Spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes,omitempty" tf:"timeout_duration_minutes,omitempty"` +} + +type SpotSpecificationParameters struct { + + // Specifies the strategy to use in launching Spot instance fleets. Valid values include capacity-optimized, diversified, lowest-price, price-capacity-optimized. See the AWS documentation for details on each strategy type. + // +kubebuilder:validation:Optional + AllocationStrategy *string `json:"allocationStrategy" tf:"allocation_strategy,omitempty"` + + // Defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + // +kubebuilder:validation:Optional + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // Action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + // +kubebuilder:validation:Optional + TimeoutAction *string `json:"timeoutAction" tf:"timeout_action,omitempty"` + + // Spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + // +kubebuilder:validation:Optional + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes" tf:"timeout_duration_minutes,omitempty"` +} + +type StepInitParameters struct { + + // Action to take if the step fails. Valid values: TERMINATE_JOB_FLOW, TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE + ActionOnFailure *string `json:"actionOnFailure,omitempty" tf:"action_on_failure"` + + // JAR file used for the step. See below. + HadoopJarStep *HadoopJarStepInitParameters `json:"hadoopJarStep,omitempty" tf:"hadoop_jar_step"` + + // Name of the job flow. + Name *string `json:"name,omitempty" tf:"name"` +} + +type StepObservation struct { + + // Action to take if the step fails. Valid values: TERMINATE_JOB_FLOW, TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE + ActionOnFailure *string `json:"actionOnFailure,omitempty" tf:"action_on_failure,omitempty"` + + // JAR file used for the step. See below. + HadoopJarStep *HadoopJarStepObservation `json:"hadoopJarStep,omitempty" tf:"hadoop_jar_step,omitempty"` + + // Name of the job flow. + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type StepParameters struct { + + // Action to take if the step fails. Valid values: TERMINATE_JOB_FLOW, TERMINATE_CLUSTER, CANCEL_AND_WAIT, and CONTINUE + // +kubebuilder:validation:Optional + ActionOnFailure *string `json:"actionOnFailure,omitempty" tf:"action_on_failure"` + + // JAR file used for the step. See below. + // +kubebuilder:validation:Optional + HadoopJarStep *HadoopJarStepParameters `json:"hadoopJarStep,omitempty" tf:"hadoop_jar_step"` + + // Name of the job flow. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name"` +} + +// ClusterSpec defines the desired state of Cluster +type ClusterSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider ClusterParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider ClusterInitParameters `json:"initProvider,omitempty"` +} + +// ClusterStatus defines the observed state of Cluster. +type ClusterStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider ClusterObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion + +// Cluster is the Schema for the Clusters API. Provides an Elastic MapReduce Cluster +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,aws} +type Cluster struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.name) || (has(self.initProvider) && has(self.initProvider.name))",message="spec.forProvider.name is a required parameter" + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.releaseLabel) || (has(self.initProvider) && has(self.initProvider.releaseLabel))",message="spec.forProvider.releaseLabel is a required parameter" + Spec ClusterSpec `json:"spec"` + Status ClusterStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// ClusterList contains a list of Clusters +type ClusterList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []Cluster `json:"items"` +} + +// Repository type metadata. +var ( + Cluster_Kind = "Cluster" + Cluster_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: Cluster_Kind}.String() + Cluster_KindAPIVersion = Cluster_Kind + "." + CRDGroupVersion.String() + Cluster_GroupVersionKind = CRDGroupVersion.WithKind(Cluster_Kind) +) + +func init() { + SchemeBuilder.Register(&Cluster{}, &ClusterList{}) +} diff --git a/apis/emr/v1beta1/zz_generated.conversion_hubs.go b/apis/emr/v1beta1/zz_generated.conversion_hubs.go index 2517d09d10..8f0c3b4e9c 100755 --- a/apis/emr/v1beta1/zz_generated.conversion_hubs.go +++ b/apis/emr/v1beta1/zz_generated.conversion_hubs.go @@ -6,5 +6,14 @@ package v1beta1 +// Hub marks this type as a conversion hub. +func (tr *Cluster) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *InstanceFleet) Hub() {} + +// Hub marks this type as a conversion hub. +func (tr *InstanceGroup) Hub() {} + // Hub marks this type as a conversion hub. func (tr *SecurityConfiguration) Hub() {} diff --git a/apis/emr/v1beta1/zz_generated.deepcopy.go b/apis/emr/v1beta1/zz_generated.deepcopy.go index bb846c0d29..637853ea21 100644 --- a/apis/emr/v1beta1/zz_generated.deepcopy.go +++ b/apis/emr/v1beta1/zz_generated.deepcopy.go @@ -9,9 +9,4554 @@ package v1beta1 import ( + "github.com/crossplane/crossplane-runtime/apis/common/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AutoTerminationPolicyInitParameters) DeepCopyInto(out *AutoTerminationPolicyInitParameters) { + *out = *in + if in.IdleTimeout != nil { + in, out := &in.IdleTimeout, &out.IdleTimeout + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoTerminationPolicyInitParameters. +func (in *AutoTerminationPolicyInitParameters) DeepCopy() *AutoTerminationPolicyInitParameters { + if in == nil { + return nil + } + out := new(AutoTerminationPolicyInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AutoTerminationPolicyObservation) DeepCopyInto(out *AutoTerminationPolicyObservation) { + *out = *in + if in.IdleTimeout != nil { + in, out := &in.IdleTimeout, &out.IdleTimeout + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoTerminationPolicyObservation. +func (in *AutoTerminationPolicyObservation) DeepCopy() *AutoTerminationPolicyObservation { + if in == nil { + return nil + } + out := new(AutoTerminationPolicyObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *AutoTerminationPolicyParameters) DeepCopyInto(out *AutoTerminationPolicyParameters) { + *out = *in + if in.IdleTimeout != nil { + in, out := &in.IdleTimeout, &out.IdleTimeout + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutoTerminationPolicyParameters. +func (in *AutoTerminationPolicyParameters) DeepCopy() *AutoTerminationPolicyParameters { + if in == nil { + return nil + } + out := new(AutoTerminationPolicyParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BootstrapActionInitParameters) DeepCopyInto(out *BootstrapActionInitParameters) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Path != nil { + in, out := &in.Path, &out.Path + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapActionInitParameters. +func (in *BootstrapActionInitParameters) DeepCopy() *BootstrapActionInitParameters { + if in == nil { + return nil + } + out := new(BootstrapActionInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BootstrapActionObservation) DeepCopyInto(out *BootstrapActionObservation) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Path != nil { + in, out := &in.Path, &out.Path + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapActionObservation. +func (in *BootstrapActionObservation) DeepCopy() *BootstrapActionObservation { + if in == nil { + return nil + } + out := new(BootstrapActionObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *BootstrapActionParameters) DeepCopyInto(out *BootstrapActionParameters) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Path != nil { + in, out := &in.Path, &out.Path + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BootstrapActionParameters. +func (in *BootstrapActionParameters) DeepCopy() *BootstrapActionParameters { + if in == nil { + return nil + } + out := new(BootstrapActionParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Cluster) DeepCopyInto(out *Cluster) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Cluster. +func (in *Cluster) DeepCopy() *Cluster { + if in == nil { + return nil + } + out := new(Cluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Cluster) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterInitParameters) DeepCopyInto(out *ClusterInitParameters) { + *out = *in + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = new(string) + **out = **in + } + if in.Applications != nil { + in, out := &in.Applications, &out.Applications + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.AutoTerminationPolicy != nil { + in, out := &in.AutoTerminationPolicy, &out.AutoTerminationPolicy + *out = new(AutoTerminationPolicyInitParameters) + (*in).DeepCopyInto(*out) + } + if in.AutoscalingRole != nil { + in, out := &in.AutoscalingRole, &out.AutoscalingRole + *out = new(string) + **out = **in + } + if in.BootstrapAction != nil { + in, out := &in.BootstrapAction, &out.BootstrapAction + *out = make([]BootstrapActionInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = new(string) + **out = **in + } + if in.ConfigurationsJSON != nil { + in, out := &in.ConfigurationsJSON, &out.ConfigurationsJSON + *out = new(string) + **out = **in + } + if in.CoreInstanceFleet != nil { + in, out := &in.CoreInstanceFleet, &out.CoreInstanceFleet + *out = new(CoreInstanceFleetInitParameters) + (*in).DeepCopyInto(*out) + } + if in.CoreInstanceGroup != nil { + in, out := &in.CoreInstanceGroup, &out.CoreInstanceGroup + *out = new(CoreInstanceGroupInitParameters) + (*in).DeepCopyInto(*out) + } + if in.CustomAMIID != nil { + in, out := &in.CustomAMIID, &out.CustomAMIID + *out = new(string) + **out = **in + } + if in.EBSRootVolumeSize != nil { + in, out := &in.EBSRootVolumeSize, &out.EBSRootVolumeSize + *out = new(float64) + **out = **in + } + if in.EC2Attributes != nil { + in, out := &in.EC2Attributes, &out.EC2Attributes + *out = new(EC2AttributesInitParameters) + (*in).DeepCopyInto(*out) + } + if in.KeepJobFlowAliveWhenNoSteps != nil { + in, out := &in.KeepJobFlowAliveWhenNoSteps, &out.KeepJobFlowAliveWhenNoSteps + *out = new(bool) + **out = **in + } + if in.KerberosAttributes != nil { + in, out := &in.KerberosAttributes, &out.KerberosAttributes + *out = new(KerberosAttributesInitParameters) + (*in).DeepCopyInto(*out) + } + if in.ListStepsStates != nil { + in, out := &in.ListStepsStates, &out.ListStepsStates + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.LogEncryptionKMSKeyID != nil { + in, out := &in.LogEncryptionKMSKeyID, &out.LogEncryptionKMSKeyID + *out = new(string) + **out = **in + } + if in.LogURI != nil { + in, out := &in.LogURI, &out.LogURI + *out = new(string) + **out = **in + } + if in.LogURIRef != nil { + in, out := &in.LogURIRef, &out.LogURIRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.LogURISelector != nil { + in, out := &in.LogURISelector, &out.LogURISelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.MasterInstanceGroup != nil { + in, out := &in.MasterInstanceGroup, &out.MasterInstanceGroup + *out = new(MasterInstanceGroupInitParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.PlacementGroupConfig != nil { + in, out := &in.PlacementGroupConfig, &out.PlacementGroupConfig + *out = make([]PlacementGroupConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ReleaseLabel != nil { + in, out := &in.ReleaseLabel, &out.ReleaseLabel + *out = new(string) + **out = **in + } + if in.ScaleDownBehavior != nil { + in, out := &in.ScaleDownBehavior, &out.ScaleDownBehavior + *out = new(string) + **out = **in + } + if in.SecurityConfiguration != nil { + in, out := &in.SecurityConfiguration, &out.SecurityConfiguration + *out = new(string) + **out = **in + } + if in.ServiceRole != nil { + in, out := &in.ServiceRole, &out.ServiceRole + *out = new(string) + **out = **in + } + if in.ServiceRoleRef != nil { + in, out := &in.ServiceRoleRef, &out.ServiceRoleRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ServiceRoleSelector != nil { + in, out := &in.ServiceRoleSelector, &out.ServiceRoleSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.Step != nil { + in, out := &in.Step, &out.Step + *out = make([]StepInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.StepConcurrencyLevel != nil { + in, out := &in.StepConcurrencyLevel, &out.StepConcurrencyLevel + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.TerminationProtection != nil { + in, out := &in.TerminationProtection, &out.TerminationProtection + *out = new(bool) + **out = **in + } + if in.UnhealthyNodeReplacement != nil { + in, out := &in.UnhealthyNodeReplacement, &out.UnhealthyNodeReplacement + *out = new(bool) + **out = **in + } + if in.VisibleToAllUsers != nil { + in, out := &in.VisibleToAllUsers, &out.VisibleToAllUsers + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterInitParameters. +func (in *ClusterInitParameters) DeepCopy() *ClusterInitParameters { + if in == nil { + return nil + } + out := new(ClusterInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterList) DeepCopyInto(out *ClusterList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Cluster, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterList. +func (in *ClusterList) DeepCopy() *ClusterList { + if in == nil { + return nil + } + out := new(ClusterList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ClusterList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterObservation) DeepCopyInto(out *ClusterObservation) { + *out = *in + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = new(string) + **out = **in + } + if in.Applications != nil { + in, out := &in.Applications, &out.Applications + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Arn != nil { + in, out := &in.Arn, &out.Arn + *out = new(string) + **out = **in + } + if in.AutoTerminationPolicy != nil { + in, out := &in.AutoTerminationPolicy, &out.AutoTerminationPolicy + *out = new(AutoTerminationPolicyObservation) + (*in).DeepCopyInto(*out) + } + if in.AutoscalingRole != nil { + in, out := &in.AutoscalingRole, &out.AutoscalingRole + *out = new(string) + **out = **in + } + if in.BootstrapAction != nil { + in, out := &in.BootstrapAction, &out.BootstrapAction + *out = make([]BootstrapActionObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ClusterState != nil { + in, out := &in.ClusterState, &out.ClusterState + *out = new(string) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = new(string) + **out = **in + } + if in.ConfigurationsJSON != nil { + in, out := &in.ConfigurationsJSON, &out.ConfigurationsJSON + *out = new(string) + **out = **in + } + if in.CoreInstanceFleet != nil { + in, out := &in.CoreInstanceFleet, &out.CoreInstanceFleet + *out = new(CoreInstanceFleetObservation) + (*in).DeepCopyInto(*out) + } + if in.CoreInstanceGroup != nil { + in, out := &in.CoreInstanceGroup, &out.CoreInstanceGroup + *out = new(CoreInstanceGroupObservation) + (*in).DeepCopyInto(*out) + } + if in.CustomAMIID != nil { + in, out := &in.CustomAMIID, &out.CustomAMIID + *out = new(string) + **out = **in + } + if in.EBSRootVolumeSize != nil { + in, out := &in.EBSRootVolumeSize, &out.EBSRootVolumeSize + *out = new(float64) + **out = **in + } + if in.EC2Attributes != nil { + in, out := &in.EC2Attributes, &out.EC2Attributes + *out = new(EC2AttributesObservation) + (*in).DeepCopyInto(*out) + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.KeepJobFlowAliveWhenNoSteps != nil { + in, out := &in.KeepJobFlowAliveWhenNoSteps, &out.KeepJobFlowAliveWhenNoSteps + *out = new(bool) + **out = **in + } + if in.KerberosAttributes != nil { + in, out := &in.KerberosAttributes, &out.KerberosAttributes + *out = new(KerberosAttributesObservation) + (*in).DeepCopyInto(*out) + } + if in.ListStepsStates != nil { + in, out := &in.ListStepsStates, &out.ListStepsStates + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.LogEncryptionKMSKeyID != nil { + in, out := &in.LogEncryptionKMSKeyID, &out.LogEncryptionKMSKeyID + *out = new(string) + **out = **in + } + if in.LogURI != nil { + in, out := &in.LogURI, &out.LogURI + *out = new(string) + **out = **in + } + if in.MasterInstanceFleet != nil { + in, out := &in.MasterInstanceFleet, &out.MasterInstanceFleet + *out = new(MasterInstanceFleetObservation) + (*in).DeepCopyInto(*out) + } + if in.MasterInstanceGroup != nil { + in, out := &in.MasterInstanceGroup, &out.MasterInstanceGroup + *out = new(MasterInstanceGroupObservation) + (*in).DeepCopyInto(*out) + } + if in.MasterPublicDNS != nil { + in, out := &in.MasterPublicDNS, &out.MasterPublicDNS + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.PlacementGroupConfig != nil { + in, out := &in.PlacementGroupConfig, &out.PlacementGroupConfig + *out = make([]PlacementGroupConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ReleaseLabel != nil { + in, out := &in.ReleaseLabel, &out.ReleaseLabel + *out = new(string) + **out = **in + } + if in.ScaleDownBehavior != nil { + in, out := &in.ScaleDownBehavior, &out.ScaleDownBehavior + *out = new(string) + **out = **in + } + if in.SecurityConfiguration != nil { + in, out := &in.SecurityConfiguration, &out.SecurityConfiguration + *out = new(string) + **out = **in + } + if in.ServiceRole != nil { + in, out := &in.ServiceRole, &out.ServiceRole + *out = new(string) + **out = **in + } + if in.Step != nil { + in, out := &in.Step, &out.Step + *out = make([]StepObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.StepConcurrencyLevel != nil { + in, out := &in.StepConcurrencyLevel, &out.StepConcurrencyLevel + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.TagsAll != nil { + in, out := &in.TagsAll, &out.TagsAll + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.TerminationProtection != nil { + in, out := &in.TerminationProtection, &out.TerminationProtection + *out = new(bool) + **out = **in + } + if in.UnhealthyNodeReplacement != nil { + in, out := &in.UnhealthyNodeReplacement, &out.UnhealthyNodeReplacement + *out = new(bool) + **out = **in + } + if in.VisibleToAllUsers != nil { + in, out := &in.VisibleToAllUsers, &out.VisibleToAllUsers + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterObservation. +func (in *ClusterObservation) DeepCopy() *ClusterObservation { + if in == nil { + return nil + } + out := new(ClusterObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterParameters) DeepCopyInto(out *ClusterParameters) { + *out = *in + if in.AdditionalInfo != nil { + in, out := &in.AdditionalInfo, &out.AdditionalInfo + *out = new(string) + **out = **in + } + if in.Applications != nil { + in, out := &in.Applications, &out.Applications + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.AutoTerminationPolicy != nil { + in, out := &in.AutoTerminationPolicy, &out.AutoTerminationPolicy + *out = new(AutoTerminationPolicyParameters) + (*in).DeepCopyInto(*out) + } + if in.AutoscalingRole != nil { + in, out := &in.AutoscalingRole, &out.AutoscalingRole + *out = new(string) + **out = **in + } + if in.BootstrapAction != nil { + in, out := &in.BootstrapAction, &out.BootstrapAction + *out = make([]BootstrapActionParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = new(string) + **out = **in + } + if in.ConfigurationsJSON != nil { + in, out := &in.ConfigurationsJSON, &out.ConfigurationsJSON + *out = new(string) + **out = **in + } + if in.CoreInstanceFleet != nil { + in, out := &in.CoreInstanceFleet, &out.CoreInstanceFleet + *out = new(CoreInstanceFleetParameters) + (*in).DeepCopyInto(*out) + } + if in.CoreInstanceGroup != nil { + in, out := &in.CoreInstanceGroup, &out.CoreInstanceGroup + *out = new(CoreInstanceGroupParameters) + (*in).DeepCopyInto(*out) + } + if in.CustomAMIID != nil { + in, out := &in.CustomAMIID, &out.CustomAMIID + *out = new(string) + **out = **in + } + if in.EBSRootVolumeSize != nil { + in, out := &in.EBSRootVolumeSize, &out.EBSRootVolumeSize + *out = new(float64) + **out = **in + } + if in.EC2Attributes != nil { + in, out := &in.EC2Attributes, &out.EC2Attributes + *out = new(EC2AttributesParameters) + (*in).DeepCopyInto(*out) + } + if in.KeepJobFlowAliveWhenNoSteps != nil { + in, out := &in.KeepJobFlowAliveWhenNoSteps, &out.KeepJobFlowAliveWhenNoSteps + *out = new(bool) + **out = **in + } + if in.KerberosAttributes != nil { + in, out := &in.KerberosAttributes, &out.KerberosAttributes + *out = new(KerberosAttributesParameters) + (*in).DeepCopyInto(*out) + } + if in.ListStepsStates != nil { + in, out := &in.ListStepsStates, &out.ListStepsStates + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.LogEncryptionKMSKeyID != nil { + in, out := &in.LogEncryptionKMSKeyID, &out.LogEncryptionKMSKeyID + *out = new(string) + **out = **in + } + if in.LogURI != nil { + in, out := &in.LogURI, &out.LogURI + *out = new(string) + **out = **in + } + if in.LogURIRef != nil { + in, out := &in.LogURIRef, &out.LogURIRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.LogURISelector != nil { + in, out := &in.LogURISelector, &out.LogURISelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.MasterInstanceGroup != nil { + in, out := &in.MasterInstanceGroup, &out.MasterInstanceGroup + *out = new(MasterInstanceGroupParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.PlacementGroupConfig != nil { + in, out := &in.PlacementGroupConfig, &out.PlacementGroupConfig + *out = make([]PlacementGroupConfigParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.ReleaseLabel != nil { + in, out := &in.ReleaseLabel, &out.ReleaseLabel + *out = new(string) + **out = **in + } + if in.ScaleDownBehavior != nil { + in, out := &in.ScaleDownBehavior, &out.ScaleDownBehavior + *out = new(string) + **out = **in + } + if in.SecurityConfiguration != nil { + in, out := &in.SecurityConfiguration, &out.SecurityConfiguration + *out = new(string) + **out = **in + } + if in.ServiceRole != nil { + in, out := &in.ServiceRole, &out.ServiceRole + *out = new(string) + **out = **in + } + if in.ServiceRoleRef != nil { + in, out := &in.ServiceRoleRef, &out.ServiceRoleRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ServiceRoleSelector != nil { + in, out := &in.ServiceRoleSelector, &out.ServiceRoleSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.Step != nil { + in, out := &in.Step, &out.Step + *out = make([]StepParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.StepConcurrencyLevel != nil { + in, out := &in.StepConcurrencyLevel, &out.StepConcurrencyLevel + *out = new(float64) + **out = **in + } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } + if in.TerminationProtection != nil { + in, out := &in.TerminationProtection, &out.TerminationProtection + *out = new(bool) + **out = **in + } + if in.UnhealthyNodeReplacement != nil { + in, out := &in.UnhealthyNodeReplacement, &out.UnhealthyNodeReplacement + *out = new(bool) + **out = **in + } + if in.VisibleToAllUsers != nil { + in, out := &in.VisibleToAllUsers, &out.VisibleToAllUsers + *out = new(bool) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterParameters. +func (in *ClusterParameters) DeepCopy() *ClusterParameters { + if in == nil { + return nil + } + out := new(ClusterParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterSpec) DeepCopyInto(out *ClusterSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterSpec. +func (in *ClusterSpec) DeepCopy() *ClusterSpec { + if in == nil { + return nil + } + out := new(ClusterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterStatus) DeepCopyInto(out *ClusterStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterStatus. +func (in *ClusterStatus) DeepCopy() *ClusterStatus { + if in == nil { + return nil + } + out := new(ClusterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigurationsInitParameters) DeepCopyInto(out *ConfigurationsInitParameters) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigurationsInitParameters. +func (in *ConfigurationsInitParameters) DeepCopy() *ConfigurationsInitParameters { + if in == nil { + return nil + } + out := new(ConfigurationsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigurationsObservation) DeepCopyInto(out *ConfigurationsObservation) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigurationsObservation. +func (in *ConfigurationsObservation) DeepCopy() *ConfigurationsObservation { + if in == nil { + return nil + } + out := new(ConfigurationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConfigurationsParameters) DeepCopyInto(out *ConfigurationsParameters) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigurationsParameters. +func (in *ConfigurationsParameters) DeepCopy() *ConfigurationsParameters { + if in == nil { + return nil + } + out := new(ConfigurationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceFleetInitParameters) DeepCopyInto(out *CoreInstanceFleetInitParameters) { + *out = *in + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]InstanceTypeConfigsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(LaunchSpecificationsInitParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceFleetInitParameters. +func (in *CoreInstanceFleetInitParameters) DeepCopy() *CoreInstanceFleetInitParameters { + if in == nil { + return nil + } + out := new(CoreInstanceFleetInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceFleetObservation) DeepCopyInto(out *CoreInstanceFleetObservation) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]InstanceTypeConfigsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(LaunchSpecificationsObservation) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProvisionedOnDemandCapacity != nil { + in, out := &in.ProvisionedOnDemandCapacity, &out.ProvisionedOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.ProvisionedSpotCapacity != nil { + in, out := &in.ProvisionedSpotCapacity, &out.ProvisionedSpotCapacity + *out = new(float64) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceFleetObservation. +func (in *CoreInstanceFleetObservation) DeepCopy() *CoreInstanceFleetObservation { + if in == nil { + return nil + } + out := new(CoreInstanceFleetObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceFleetParameters) DeepCopyInto(out *CoreInstanceFleetParameters) { + *out = *in + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]InstanceTypeConfigsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(LaunchSpecificationsParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceFleetParameters. +func (in *CoreInstanceFleetParameters) DeepCopy() *CoreInstanceFleetParameters { + if in == nil { + return nil + } + out := new(CoreInstanceFleetParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceGroupEBSConfigInitParameters) DeepCopyInto(out *CoreInstanceGroupEBSConfigInitParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceGroupEBSConfigInitParameters. +func (in *CoreInstanceGroupEBSConfigInitParameters) DeepCopy() *CoreInstanceGroupEBSConfigInitParameters { + if in == nil { + return nil + } + out := new(CoreInstanceGroupEBSConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceGroupEBSConfigObservation) DeepCopyInto(out *CoreInstanceGroupEBSConfigObservation) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceGroupEBSConfigObservation. +func (in *CoreInstanceGroupEBSConfigObservation) DeepCopy() *CoreInstanceGroupEBSConfigObservation { + if in == nil { + return nil + } + out := new(CoreInstanceGroupEBSConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceGroupEBSConfigParameters) DeepCopyInto(out *CoreInstanceGroupEBSConfigParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceGroupEBSConfigParameters. +func (in *CoreInstanceGroupEBSConfigParameters) DeepCopy() *CoreInstanceGroupEBSConfigParameters { + if in == nil { + return nil + } + out := new(CoreInstanceGroupEBSConfigParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceGroupInitParameters) DeepCopyInto(out *CoreInstanceGroupInitParameters) { + *out = *in + if in.AutoscalingPolicy != nil { + in, out := &in.AutoscalingPolicy, &out.AutoscalingPolicy + *out = new(string) + **out = **in + } + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]CoreInstanceGroupEBSConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceGroupInitParameters. +func (in *CoreInstanceGroupInitParameters) DeepCopy() *CoreInstanceGroupInitParameters { + if in == nil { + return nil + } + out := new(CoreInstanceGroupInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceGroupObservation) DeepCopyInto(out *CoreInstanceGroupObservation) { + *out = *in + if in.AutoscalingPolicy != nil { + in, out := &in.AutoscalingPolicy, &out.AutoscalingPolicy + *out = new(string) + **out = **in + } + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]CoreInstanceGroupEBSConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceGroupObservation. +func (in *CoreInstanceGroupObservation) DeepCopy() *CoreInstanceGroupObservation { + if in == nil { + return nil + } + out := new(CoreInstanceGroupObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CoreInstanceGroupParameters) DeepCopyInto(out *CoreInstanceGroupParameters) { + *out = *in + if in.AutoscalingPolicy != nil { + in, out := &in.AutoscalingPolicy, &out.AutoscalingPolicy + *out = new(string) + **out = **in + } + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]CoreInstanceGroupEBSConfigParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CoreInstanceGroupParameters. +func (in *CoreInstanceGroupParameters) DeepCopy() *CoreInstanceGroupParameters { + if in == nil { + return nil + } + out := new(CoreInstanceGroupParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EBSConfigInitParameters) DeepCopyInto(out *EBSConfigInitParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EBSConfigInitParameters. +func (in *EBSConfigInitParameters) DeepCopy() *EBSConfigInitParameters { + if in == nil { + return nil + } + out := new(EBSConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EBSConfigObservation) DeepCopyInto(out *EBSConfigObservation) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EBSConfigObservation. +func (in *EBSConfigObservation) DeepCopy() *EBSConfigObservation { + if in == nil { + return nil + } + out := new(EBSConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EBSConfigParameters) DeepCopyInto(out *EBSConfigParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EBSConfigParameters. +func (in *EBSConfigParameters) DeepCopy() *EBSConfigParameters { + if in == nil { + return nil + } + out := new(EBSConfigParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EC2AttributesInitParameters) DeepCopyInto(out *EC2AttributesInitParameters) { + *out = *in + if in.AdditionalMasterSecurityGroups != nil { + in, out := &in.AdditionalMasterSecurityGroups, &out.AdditionalMasterSecurityGroups + *out = new(string) + **out = **in + } + if in.AdditionalMasterSecurityGroupsRef != nil { + in, out := &in.AdditionalMasterSecurityGroupsRef, &out.AdditionalMasterSecurityGroupsRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.AdditionalMasterSecurityGroupsSelector != nil { + in, out := &in.AdditionalMasterSecurityGroupsSelector, &out.AdditionalMasterSecurityGroupsSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.AdditionalSlaveSecurityGroups != nil { + in, out := &in.AdditionalSlaveSecurityGroups, &out.AdditionalSlaveSecurityGroups + *out = new(string) + **out = **in + } + if in.AdditionalSlaveSecurityGroupsRef != nil { + in, out := &in.AdditionalSlaveSecurityGroupsRef, &out.AdditionalSlaveSecurityGroupsRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.AdditionalSlaveSecurityGroupsSelector != nil { + in, out := &in.AdditionalSlaveSecurityGroupsSelector, &out.AdditionalSlaveSecurityGroupsSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedMasterSecurityGroup != nil { + in, out := &in.EmrManagedMasterSecurityGroup, &out.EmrManagedMasterSecurityGroup + *out = new(string) + **out = **in + } + if in.EmrManagedMasterSecurityGroupRef != nil { + in, out := &in.EmrManagedMasterSecurityGroupRef, &out.EmrManagedMasterSecurityGroupRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedMasterSecurityGroupSelector != nil { + in, out := &in.EmrManagedMasterSecurityGroupSelector, &out.EmrManagedMasterSecurityGroupSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedSlaveSecurityGroup != nil { + in, out := &in.EmrManagedSlaveSecurityGroup, &out.EmrManagedSlaveSecurityGroup + *out = new(string) + **out = **in + } + if in.EmrManagedSlaveSecurityGroupRef != nil { + in, out := &in.EmrManagedSlaveSecurityGroupRef, &out.EmrManagedSlaveSecurityGroupRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedSlaveSecurityGroupSelector != nil { + in, out := &in.EmrManagedSlaveSecurityGroupSelector, &out.EmrManagedSlaveSecurityGroupSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.InstanceProfile != nil { + in, out := &in.InstanceProfile, &out.InstanceProfile + *out = new(string) + **out = **in + } + if in.InstanceProfileRef != nil { + in, out := &in.InstanceProfileRef, &out.InstanceProfileRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.InstanceProfileSelector != nil { + in, out := &in.InstanceProfileSelector, &out.InstanceProfileSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.KeyNameRef != nil { + in, out := &in.KeyNameRef, &out.KeyNameRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.KeyNameSelector != nil { + in, out := &in.KeyNameSelector, &out.KeyNameSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccessSecurityGroup != nil { + in, out := &in.ServiceAccessSecurityGroup, &out.ServiceAccessSecurityGroup + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(string) + **out = **in + } + if in.SubnetIDRef != nil { + in, out := &in.SubnetIDRef, &out.SubnetIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.SubnetIDSelector != nil { + in, out := &in.SubnetIDSelector, &out.SubnetIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.SubnetIds != nil { + in, out := &in.SubnetIds, &out.SubnetIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2AttributesInitParameters. +func (in *EC2AttributesInitParameters) DeepCopy() *EC2AttributesInitParameters { + if in == nil { + return nil + } + out := new(EC2AttributesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EC2AttributesObservation) DeepCopyInto(out *EC2AttributesObservation) { + *out = *in + if in.AdditionalMasterSecurityGroups != nil { + in, out := &in.AdditionalMasterSecurityGroups, &out.AdditionalMasterSecurityGroups + *out = new(string) + **out = **in + } + if in.AdditionalSlaveSecurityGroups != nil { + in, out := &in.AdditionalSlaveSecurityGroups, &out.AdditionalSlaveSecurityGroups + *out = new(string) + **out = **in + } + if in.EmrManagedMasterSecurityGroup != nil { + in, out := &in.EmrManagedMasterSecurityGroup, &out.EmrManagedMasterSecurityGroup + *out = new(string) + **out = **in + } + if in.EmrManagedSlaveSecurityGroup != nil { + in, out := &in.EmrManagedSlaveSecurityGroup, &out.EmrManagedSlaveSecurityGroup + *out = new(string) + **out = **in + } + if in.InstanceProfile != nil { + in, out := &in.InstanceProfile, &out.InstanceProfile + *out = new(string) + **out = **in + } + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.ServiceAccessSecurityGroup != nil { + in, out := &in.ServiceAccessSecurityGroup, &out.ServiceAccessSecurityGroup + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(string) + **out = **in + } + if in.SubnetIds != nil { + in, out := &in.SubnetIds, &out.SubnetIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2AttributesObservation. +func (in *EC2AttributesObservation) DeepCopy() *EC2AttributesObservation { + if in == nil { + return nil + } + out := new(EC2AttributesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *EC2AttributesParameters) DeepCopyInto(out *EC2AttributesParameters) { + *out = *in + if in.AdditionalMasterSecurityGroups != nil { + in, out := &in.AdditionalMasterSecurityGroups, &out.AdditionalMasterSecurityGroups + *out = new(string) + **out = **in + } + if in.AdditionalMasterSecurityGroupsRef != nil { + in, out := &in.AdditionalMasterSecurityGroupsRef, &out.AdditionalMasterSecurityGroupsRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.AdditionalMasterSecurityGroupsSelector != nil { + in, out := &in.AdditionalMasterSecurityGroupsSelector, &out.AdditionalMasterSecurityGroupsSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.AdditionalSlaveSecurityGroups != nil { + in, out := &in.AdditionalSlaveSecurityGroups, &out.AdditionalSlaveSecurityGroups + *out = new(string) + **out = **in + } + if in.AdditionalSlaveSecurityGroupsRef != nil { + in, out := &in.AdditionalSlaveSecurityGroupsRef, &out.AdditionalSlaveSecurityGroupsRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.AdditionalSlaveSecurityGroupsSelector != nil { + in, out := &in.AdditionalSlaveSecurityGroupsSelector, &out.AdditionalSlaveSecurityGroupsSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedMasterSecurityGroup != nil { + in, out := &in.EmrManagedMasterSecurityGroup, &out.EmrManagedMasterSecurityGroup + *out = new(string) + **out = **in + } + if in.EmrManagedMasterSecurityGroupRef != nil { + in, out := &in.EmrManagedMasterSecurityGroupRef, &out.EmrManagedMasterSecurityGroupRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedMasterSecurityGroupSelector != nil { + in, out := &in.EmrManagedMasterSecurityGroupSelector, &out.EmrManagedMasterSecurityGroupSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedSlaveSecurityGroup != nil { + in, out := &in.EmrManagedSlaveSecurityGroup, &out.EmrManagedSlaveSecurityGroup + *out = new(string) + **out = **in + } + if in.EmrManagedSlaveSecurityGroupRef != nil { + in, out := &in.EmrManagedSlaveSecurityGroupRef, &out.EmrManagedSlaveSecurityGroupRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.EmrManagedSlaveSecurityGroupSelector != nil { + in, out := &in.EmrManagedSlaveSecurityGroupSelector, &out.EmrManagedSlaveSecurityGroupSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.InstanceProfile != nil { + in, out := &in.InstanceProfile, &out.InstanceProfile + *out = new(string) + **out = **in + } + if in.InstanceProfileRef != nil { + in, out := &in.InstanceProfileRef, &out.InstanceProfileRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.InstanceProfileSelector != nil { + in, out := &in.InstanceProfileSelector, &out.InstanceProfileSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.KeyName != nil { + in, out := &in.KeyName, &out.KeyName + *out = new(string) + **out = **in + } + if in.KeyNameRef != nil { + in, out := &in.KeyNameRef, &out.KeyNameRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.KeyNameSelector != nil { + in, out := &in.KeyNameSelector, &out.KeyNameSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ServiceAccessSecurityGroup != nil { + in, out := &in.ServiceAccessSecurityGroup, &out.ServiceAccessSecurityGroup + *out = new(string) + **out = **in + } + if in.SubnetID != nil { + in, out := &in.SubnetID, &out.SubnetID + *out = new(string) + **out = **in + } + if in.SubnetIDRef != nil { + in, out := &in.SubnetIDRef, &out.SubnetIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.SubnetIDSelector != nil { + in, out := &in.SubnetIDSelector, &out.SubnetIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.SubnetIds != nil { + in, out := &in.SubnetIds, &out.SubnetIds + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EC2AttributesParameters. +func (in *EC2AttributesParameters) DeepCopy() *EC2AttributesParameters { + if in == nil { + return nil + } + out := new(EC2AttributesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HadoopJarStepInitParameters) DeepCopyInto(out *HadoopJarStepInitParameters) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Jar != nil { + in, out := &in.Jar, &out.Jar + *out = new(string) + **out = **in + } + if in.MainClass != nil { + in, out := &in.MainClass, &out.MainClass + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HadoopJarStepInitParameters. +func (in *HadoopJarStepInitParameters) DeepCopy() *HadoopJarStepInitParameters { + if in == nil { + return nil + } + out := new(HadoopJarStepInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HadoopJarStepObservation) DeepCopyInto(out *HadoopJarStepObservation) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Jar != nil { + in, out := &in.Jar, &out.Jar + *out = new(string) + **out = **in + } + if in.MainClass != nil { + in, out := &in.MainClass, &out.MainClass + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HadoopJarStepObservation. +func (in *HadoopJarStepObservation) DeepCopy() *HadoopJarStepObservation { + if in == nil { + return nil + } + out := new(HadoopJarStepObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HadoopJarStepParameters) DeepCopyInto(out *HadoopJarStepParameters) { + *out = *in + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } + if in.Jar != nil { + in, out := &in.Jar, &out.Jar + *out = new(string) + **out = **in + } + if in.MainClass != nil { + in, out := &in.MainClass, &out.MainClass + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HadoopJarStepParameters. +func (in *HadoopJarStepParameters) DeepCopy() *HadoopJarStepParameters { + if in == nil { + return nil + } + out := new(HadoopJarStepParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleet) DeepCopyInto(out *InstanceFleet) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleet. +func (in *InstanceFleet) DeepCopy() *InstanceFleet { + if in == nil { + return nil + } + out := new(InstanceFleet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *InstanceFleet) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInitParameters) DeepCopyInto(out *InstanceFleetInitParameters) { + *out = *in + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ClusterIDRef != nil { + in, out := &in.ClusterIDRef, &out.ClusterIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ClusterIDSelector != nil { + in, out := &in.ClusterIDSelector, &out.ClusterIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]InstanceFleetInstanceTypeConfigsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(InstanceFleetLaunchSpecificationsInitParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInitParameters. +func (in *InstanceFleetInitParameters) DeepCopy() *InstanceFleetInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsConfigurationsInitParameters) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsConfigurationsInitParameters) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsConfigurationsInitParameters. +func (in *InstanceFleetInstanceTypeConfigsConfigurationsInitParameters) DeepCopy() *InstanceFleetInstanceTypeConfigsConfigurationsInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsConfigurationsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsConfigurationsObservation) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsConfigurationsObservation) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsConfigurationsObservation. +func (in *InstanceFleetInstanceTypeConfigsConfigurationsObservation) DeepCopy() *InstanceFleetInstanceTypeConfigsConfigurationsObservation { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsConfigurationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsConfigurationsParameters) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsConfigurationsParameters) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsConfigurationsParameters. +func (in *InstanceFleetInstanceTypeConfigsConfigurationsParameters) DeepCopy() *InstanceFleetInstanceTypeConfigsConfigurationsParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsConfigurationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsEBSConfigInitParameters) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsEBSConfigInitParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsEBSConfigInitParameters. +func (in *InstanceFleetInstanceTypeConfigsEBSConfigInitParameters) DeepCopy() *InstanceFleetInstanceTypeConfigsEBSConfigInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsEBSConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsEBSConfigObservation) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsEBSConfigObservation) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsEBSConfigObservation. +func (in *InstanceFleetInstanceTypeConfigsEBSConfigObservation) DeepCopy() *InstanceFleetInstanceTypeConfigsEBSConfigObservation { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsEBSConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsEBSConfigParameters) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsEBSConfigParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsEBSConfigParameters. +func (in *InstanceFleetInstanceTypeConfigsEBSConfigParameters) DeepCopy() *InstanceFleetInstanceTypeConfigsEBSConfigParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsEBSConfigParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsInitParameters) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsInitParameters) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]InstanceFleetInstanceTypeConfigsConfigurationsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceFleetInstanceTypeConfigsEBSConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsInitParameters. +func (in *InstanceFleetInstanceTypeConfigsInitParameters) DeepCopy() *InstanceFleetInstanceTypeConfigsInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsObservation) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsObservation) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]InstanceFleetInstanceTypeConfigsConfigurationsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceFleetInstanceTypeConfigsEBSConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsObservation. +func (in *InstanceFleetInstanceTypeConfigsObservation) DeepCopy() *InstanceFleetInstanceTypeConfigsObservation { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetInstanceTypeConfigsParameters) DeepCopyInto(out *InstanceFleetInstanceTypeConfigsParameters) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]InstanceFleetInstanceTypeConfigsConfigurationsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceFleetInstanceTypeConfigsEBSConfigParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetInstanceTypeConfigsParameters. +func (in *InstanceFleetInstanceTypeConfigsParameters) DeepCopy() *InstanceFleetInstanceTypeConfigsParameters { + if in == nil { + return nil + } + out := new(InstanceFleetInstanceTypeConfigsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsInitParameters) DeepCopyInto(out *InstanceFleetLaunchSpecificationsInitParameters) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsInitParameters. +func (in *InstanceFleetLaunchSpecificationsInitParameters) DeepCopy() *InstanceFleetLaunchSpecificationsInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsObservation) DeepCopyInto(out *InstanceFleetLaunchSpecificationsObservation) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]InstanceFleetLaunchSpecificationsSpotSpecificationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsObservation. +func (in *InstanceFleetLaunchSpecificationsObservation) DeepCopy() *InstanceFleetLaunchSpecificationsObservation { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters) DeepCopyInto(out *InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters. +func (in *InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters) DeepCopy() *InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation) DeepCopyInto(out *InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation. +func (in *InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation) DeepCopy() *InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters) DeepCopyInto(out *InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters. +func (in *InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters) DeepCopy() *InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsParameters) DeepCopyInto(out *InstanceFleetLaunchSpecificationsParameters) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]InstanceFleetLaunchSpecificationsSpotSpecificationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsParameters. +func (in *InstanceFleetLaunchSpecificationsParameters) DeepCopy() *InstanceFleetLaunchSpecificationsParameters { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters) DeepCopyInto(out *InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters. +func (in *InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters) DeepCopy() *InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsSpotSpecificationObservation) DeepCopyInto(out *InstanceFleetLaunchSpecificationsSpotSpecificationObservation) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsSpotSpecificationObservation. +func (in *InstanceFleetLaunchSpecificationsSpotSpecificationObservation) DeepCopy() *InstanceFleetLaunchSpecificationsSpotSpecificationObservation { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsSpotSpecificationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetLaunchSpecificationsSpotSpecificationParameters) DeepCopyInto(out *InstanceFleetLaunchSpecificationsSpotSpecificationParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetLaunchSpecificationsSpotSpecificationParameters. +func (in *InstanceFleetLaunchSpecificationsSpotSpecificationParameters) DeepCopy() *InstanceFleetLaunchSpecificationsSpotSpecificationParameters { + if in == nil { + return nil + } + out := new(InstanceFleetLaunchSpecificationsSpotSpecificationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetList) DeepCopyInto(out *InstanceFleetList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]InstanceFleet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetList. +func (in *InstanceFleetList) DeepCopy() *InstanceFleetList { + if in == nil { + return nil + } + out := new(InstanceFleetList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *InstanceFleetList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetObservation) DeepCopyInto(out *InstanceFleetObservation) { + *out = *in + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]InstanceFleetInstanceTypeConfigsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(InstanceFleetLaunchSpecificationsObservation) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProvisionedOnDemandCapacity != nil { + in, out := &in.ProvisionedOnDemandCapacity, &out.ProvisionedOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.ProvisionedSpotCapacity != nil { + in, out := &in.ProvisionedSpotCapacity, &out.ProvisionedSpotCapacity + *out = new(float64) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetObservation. +func (in *InstanceFleetObservation) DeepCopy() *InstanceFleetObservation { + if in == nil { + return nil + } + out := new(InstanceFleetObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetParameters) DeepCopyInto(out *InstanceFleetParameters) { + *out = *in + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ClusterIDRef != nil { + in, out := &in.ClusterIDRef, &out.ClusterIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ClusterIDSelector != nil { + in, out := &in.ClusterIDSelector, &out.ClusterIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]InstanceFleetInstanceTypeConfigsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(InstanceFleetLaunchSpecificationsParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetParameters. +func (in *InstanceFleetParameters) DeepCopy() *InstanceFleetParameters { + if in == nil { + return nil + } + out := new(InstanceFleetParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetSpec) DeepCopyInto(out *InstanceFleetSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetSpec. +func (in *InstanceFleetSpec) DeepCopy() *InstanceFleetSpec { + if in == nil { + return nil + } + out := new(InstanceFleetSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceFleetStatus) DeepCopyInto(out *InstanceFleetStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceFleetStatus. +func (in *InstanceFleetStatus) DeepCopy() *InstanceFleetStatus { + if in == nil { + return nil + } + out := new(InstanceFleetStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroup) DeepCopyInto(out *InstanceGroup) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroup. +func (in *InstanceGroup) DeepCopy() *InstanceGroup { + if in == nil { + return nil + } + out := new(InstanceGroup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *InstanceGroup) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupEBSConfigInitParameters) DeepCopyInto(out *InstanceGroupEBSConfigInitParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupEBSConfigInitParameters. +func (in *InstanceGroupEBSConfigInitParameters) DeepCopy() *InstanceGroupEBSConfigInitParameters { + if in == nil { + return nil + } + out := new(InstanceGroupEBSConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupEBSConfigObservation) DeepCopyInto(out *InstanceGroupEBSConfigObservation) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupEBSConfigObservation. +func (in *InstanceGroupEBSConfigObservation) DeepCopy() *InstanceGroupEBSConfigObservation { + if in == nil { + return nil + } + out := new(InstanceGroupEBSConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupEBSConfigParameters) DeepCopyInto(out *InstanceGroupEBSConfigParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupEBSConfigParameters. +func (in *InstanceGroupEBSConfigParameters) DeepCopy() *InstanceGroupEBSConfigParameters { + if in == nil { + return nil + } + out := new(InstanceGroupEBSConfigParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupInitParameters) DeepCopyInto(out *InstanceGroupInitParameters) { + *out = *in + if in.AutoscalingPolicy != nil { + in, out := &in.AutoscalingPolicy, &out.AutoscalingPolicy + *out = new(string) + **out = **in + } + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ClusterIDRef != nil { + in, out := &in.ClusterIDRef, &out.ClusterIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ClusterIDSelector != nil { + in, out := &in.ClusterIDSelector, &out.ClusterIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ConfigurationsJSON != nil { + in, out := &in.ConfigurationsJSON, &out.ConfigurationsJSON + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceGroupEBSConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSOptimized != nil { + in, out := &in.EBSOptimized, &out.EBSOptimized + *out = new(bool) + **out = **in + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupInitParameters. +func (in *InstanceGroupInitParameters) DeepCopy() *InstanceGroupInitParameters { + if in == nil { + return nil + } + out := new(InstanceGroupInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupList) DeepCopyInto(out *InstanceGroupList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]InstanceGroup, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupList. +func (in *InstanceGroupList) DeepCopy() *InstanceGroupList { + if in == nil { + return nil + } + out := new(InstanceGroupList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *InstanceGroupList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupObservation) DeepCopyInto(out *InstanceGroupObservation) { + *out = *in + if in.AutoscalingPolicy != nil { + in, out := &in.AutoscalingPolicy, &out.AutoscalingPolicy + *out = new(string) + **out = **in + } + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ConfigurationsJSON != nil { + in, out := &in.ConfigurationsJSON, &out.ConfigurationsJSON + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceGroupEBSConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSOptimized != nil { + in, out := &in.EBSOptimized, &out.EBSOptimized + *out = new(bool) + **out = **in + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.RunningInstanceCount != nil { + in, out := &in.RunningInstanceCount, &out.RunningInstanceCount + *out = new(float64) + **out = **in + } + if in.Status != nil { + in, out := &in.Status, &out.Status + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupObservation. +func (in *InstanceGroupObservation) DeepCopy() *InstanceGroupObservation { + if in == nil { + return nil + } + out := new(InstanceGroupObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupParameters) DeepCopyInto(out *InstanceGroupParameters) { + *out = *in + if in.AutoscalingPolicy != nil { + in, out := &in.AutoscalingPolicy, &out.AutoscalingPolicy + *out = new(string) + **out = **in + } + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.ClusterID != nil { + in, out := &in.ClusterID, &out.ClusterID + *out = new(string) + **out = **in + } + if in.ClusterIDRef != nil { + in, out := &in.ClusterIDRef, &out.ClusterIDRef + *out = new(v1.Reference) + (*in).DeepCopyInto(*out) + } + if in.ClusterIDSelector != nil { + in, out := &in.ClusterIDSelector, &out.ClusterIDSelector + *out = new(v1.Selector) + (*in).DeepCopyInto(*out) + } + if in.ConfigurationsJSON != nil { + in, out := &in.ConfigurationsJSON, &out.ConfigurationsJSON + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceGroupEBSConfigParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSOptimized != nil { + in, out := &in.EBSOptimized, &out.EBSOptimized + *out = new(bool) + **out = **in + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.Region != nil { + in, out := &in.Region, &out.Region + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupParameters. +func (in *InstanceGroupParameters) DeepCopy() *InstanceGroupParameters { + if in == nil { + return nil + } + out := new(InstanceGroupParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) { + *out = *in + in.ResourceSpec.DeepCopyInto(&out.ResourceSpec) + in.ForProvider.DeepCopyInto(&out.ForProvider) + in.InitProvider.DeepCopyInto(&out.InitProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupSpec. +func (in *InstanceGroupSpec) DeepCopy() *InstanceGroupSpec { + if in == nil { + return nil + } + out := new(InstanceGroupSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupStatus) DeepCopyInto(out *InstanceGroupStatus) { + *out = *in + in.ResourceStatus.DeepCopyInto(&out.ResourceStatus) + in.AtProvider.DeepCopyInto(&out.AtProvider) +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupStatus. +func (in *InstanceGroupStatus) DeepCopy() *InstanceGroupStatus { + if in == nil { + return nil + } + out := new(InstanceGroupStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsConfigurationsInitParameters) DeepCopyInto(out *InstanceTypeConfigsConfigurationsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsConfigurationsInitParameters. +func (in *InstanceTypeConfigsConfigurationsInitParameters) DeepCopy() *InstanceTypeConfigsConfigurationsInitParameters { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsConfigurationsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsConfigurationsObservation) DeepCopyInto(out *InstanceTypeConfigsConfigurationsObservation) { + *out = *in + if in.Classification != nil { + in, out := &in.Classification, &out.Classification + *out = new(string) + **out = **in + } + if in.Properties != nil { + in, out := &in.Properties, &out.Properties + *out = make(map[string]*string, len(*in)) + for key, val := range *in { + var outVal *string + if val == nil { + (*out)[key] = nil + } else { + inVal := (*in)[key] + in, out := &inVal, &outVal + *out = new(string) + **out = **in + } + (*out)[key] = outVal + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsConfigurationsObservation. +func (in *InstanceTypeConfigsConfigurationsObservation) DeepCopy() *InstanceTypeConfigsConfigurationsObservation { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsConfigurationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsConfigurationsParameters) DeepCopyInto(out *InstanceTypeConfigsConfigurationsParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsConfigurationsParameters. +func (in *InstanceTypeConfigsConfigurationsParameters) DeepCopy() *InstanceTypeConfigsConfigurationsParameters { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsConfigurationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsEBSConfigInitParameters) DeepCopyInto(out *InstanceTypeConfigsEBSConfigInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsEBSConfigInitParameters. +func (in *InstanceTypeConfigsEBSConfigInitParameters) DeepCopy() *InstanceTypeConfigsEBSConfigInitParameters { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsEBSConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsEBSConfigObservation) DeepCopyInto(out *InstanceTypeConfigsEBSConfigObservation) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsEBSConfigObservation. +func (in *InstanceTypeConfigsEBSConfigObservation) DeepCopy() *InstanceTypeConfigsEBSConfigObservation { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsEBSConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsEBSConfigParameters) DeepCopyInto(out *InstanceTypeConfigsEBSConfigParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsEBSConfigParameters. +func (in *InstanceTypeConfigsEBSConfigParameters) DeepCopy() *InstanceTypeConfigsEBSConfigParameters { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsEBSConfigParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsInitParameters) DeepCopyInto(out *InstanceTypeConfigsInitParameters) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]ConfigurationsInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]EBSConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsInitParameters. +func (in *InstanceTypeConfigsInitParameters) DeepCopy() *InstanceTypeConfigsInitParameters { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsObservation) DeepCopyInto(out *InstanceTypeConfigsObservation) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]ConfigurationsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]EBSConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsObservation. +func (in *InstanceTypeConfigsObservation) DeepCopy() *InstanceTypeConfigsObservation { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceTypeConfigsParameters) DeepCopyInto(out *InstanceTypeConfigsParameters) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]ConfigurationsParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]EBSConfigParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceTypeConfigsParameters. +func (in *InstanceTypeConfigsParameters) DeepCopy() *InstanceTypeConfigsParameters { + if in == nil { + return nil + } + out := new(InstanceTypeConfigsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KerberosAttributesInitParameters) DeepCopyInto(out *KerberosAttributesInitParameters) { + *out = *in + if in.AdDomainJoinPasswordSecretRef != nil { + in, out := &in.AdDomainJoinPasswordSecretRef, &out.AdDomainJoinPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.AdDomainJoinUser != nil { + in, out := &in.AdDomainJoinUser, &out.AdDomainJoinUser + *out = new(string) + **out = **in + } + if in.CrossRealmTrustPrincipalPasswordSecretRef != nil { + in, out := &in.CrossRealmTrustPrincipalPasswordSecretRef, &out.CrossRealmTrustPrincipalPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + out.KdcAdminPasswordSecretRef = in.KdcAdminPasswordSecretRef + if in.Realm != nil { + in, out := &in.Realm, &out.Realm + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KerberosAttributesInitParameters. +func (in *KerberosAttributesInitParameters) DeepCopy() *KerberosAttributesInitParameters { + if in == nil { + return nil + } + out := new(KerberosAttributesInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KerberosAttributesObservation) DeepCopyInto(out *KerberosAttributesObservation) { + *out = *in + if in.AdDomainJoinUser != nil { + in, out := &in.AdDomainJoinUser, &out.AdDomainJoinUser + *out = new(string) + **out = **in + } + if in.Realm != nil { + in, out := &in.Realm, &out.Realm + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KerberosAttributesObservation. +func (in *KerberosAttributesObservation) DeepCopy() *KerberosAttributesObservation { + if in == nil { + return nil + } + out := new(KerberosAttributesObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KerberosAttributesParameters) DeepCopyInto(out *KerberosAttributesParameters) { + *out = *in + if in.AdDomainJoinPasswordSecretRef != nil { + in, out := &in.AdDomainJoinPasswordSecretRef, &out.AdDomainJoinPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + if in.AdDomainJoinUser != nil { + in, out := &in.AdDomainJoinUser, &out.AdDomainJoinUser + *out = new(string) + **out = **in + } + if in.CrossRealmTrustPrincipalPasswordSecretRef != nil { + in, out := &in.CrossRealmTrustPrincipalPasswordSecretRef, &out.CrossRealmTrustPrincipalPasswordSecretRef + *out = new(v1.SecretKeySelector) + **out = **in + } + out.KdcAdminPasswordSecretRef = in.KdcAdminPasswordSecretRef + if in.Realm != nil { + in, out := &in.Realm, &out.Realm + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KerberosAttributesParameters. +func (in *KerberosAttributesParameters) DeepCopy() *KerberosAttributesParameters { + if in == nil { + return nil + } + out := new(KerberosAttributesParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsInitParameters) DeepCopyInto(out *LaunchSpecificationsInitParameters) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]OnDemandSpecificationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]SpotSpecificationInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsInitParameters. +func (in *LaunchSpecificationsInitParameters) DeepCopy() *LaunchSpecificationsInitParameters { + if in == nil { + return nil + } + out := new(LaunchSpecificationsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsObservation) DeepCopyInto(out *LaunchSpecificationsObservation) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]OnDemandSpecificationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]SpotSpecificationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsObservation. +func (in *LaunchSpecificationsObservation) DeepCopy() *LaunchSpecificationsObservation { + if in == nil { + return nil + } + out := new(LaunchSpecificationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsOnDemandSpecificationInitParameters) DeepCopyInto(out *LaunchSpecificationsOnDemandSpecificationInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsOnDemandSpecificationInitParameters. +func (in *LaunchSpecificationsOnDemandSpecificationInitParameters) DeepCopy() *LaunchSpecificationsOnDemandSpecificationInitParameters { + if in == nil { + return nil + } + out := new(LaunchSpecificationsOnDemandSpecificationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsOnDemandSpecificationObservation) DeepCopyInto(out *LaunchSpecificationsOnDemandSpecificationObservation) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsOnDemandSpecificationObservation. +func (in *LaunchSpecificationsOnDemandSpecificationObservation) DeepCopy() *LaunchSpecificationsOnDemandSpecificationObservation { + if in == nil { + return nil + } + out := new(LaunchSpecificationsOnDemandSpecificationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsOnDemandSpecificationParameters) DeepCopyInto(out *LaunchSpecificationsOnDemandSpecificationParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsOnDemandSpecificationParameters. +func (in *LaunchSpecificationsOnDemandSpecificationParameters) DeepCopy() *LaunchSpecificationsOnDemandSpecificationParameters { + if in == nil { + return nil + } + out := new(LaunchSpecificationsOnDemandSpecificationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsParameters) DeepCopyInto(out *LaunchSpecificationsParameters) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]OnDemandSpecificationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]SpotSpecificationParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsParameters. +func (in *LaunchSpecificationsParameters) DeepCopy() *LaunchSpecificationsParameters { + if in == nil { + return nil + } + out := new(LaunchSpecificationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsSpotSpecificationInitParameters) DeepCopyInto(out *LaunchSpecificationsSpotSpecificationInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsSpotSpecificationInitParameters. +func (in *LaunchSpecificationsSpotSpecificationInitParameters) DeepCopy() *LaunchSpecificationsSpotSpecificationInitParameters { + if in == nil { + return nil + } + out := new(LaunchSpecificationsSpotSpecificationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsSpotSpecificationObservation) DeepCopyInto(out *LaunchSpecificationsSpotSpecificationObservation) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsSpotSpecificationObservation. +func (in *LaunchSpecificationsSpotSpecificationObservation) DeepCopy() *LaunchSpecificationsSpotSpecificationObservation { + if in == nil { + return nil + } + out := new(LaunchSpecificationsSpotSpecificationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LaunchSpecificationsSpotSpecificationParameters) DeepCopyInto(out *LaunchSpecificationsSpotSpecificationParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LaunchSpecificationsSpotSpecificationParameters. +func (in *LaunchSpecificationsSpotSpecificationParameters) DeepCopy() *LaunchSpecificationsSpotSpecificationParameters { + if in == nil { + return nil + } + out := new(LaunchSpecificationsSpotSpecificationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetInitParameters) DeepCopyInto(out *MasterInstanceFleetInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetInitParameters. +func (in *MasterInstanceFleetInitParameters) DeepCopy() *MasterInstanceFleetInitParameters { + if in == nil { + return nil + } + out := new(MasterInstanceFleetInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetInstanceTypeConfigsInitParameters) DeepCopyInto(out *MasterInstanceFleetInstanceTypeConfigsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetInstanceTypeConfigsInitParameters. +func (in *MasterInstanceFleetInstanceTypeConfigsInitParameters) DeepCopy() *MasterInstanceFleetInstanceTypeConfigsInitParameters { + if in == nil { + return nil + } + out := new(MasterInstanceFleetInstanceTypeConfigsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetInstanceTypeConfigsObservation) DeepCopyInto(out *MasterInstanceFleetInstanceTypeConfigsObservation) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.BidPriceAsPercentageOfOnDemandPrice != nil { + in, out := &in.BidPriceAsPercentageOfOnDemandPrice, &out.BidPriceAsPercentageOfOnDemandPrice + *out = new(float64) + **out = **in + } + if in.Configurations != nil { + in, out := &in.Configurations, &out.Configurations + *out = make([]InstanceTypeConfigsConfigurationsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]InstanceTypeConfigsEBSConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.WeightedCapacity != nil { + in, out := &in.WeightedCapacity, &out.WeightedCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetInstanceTypeConfigsObservation. +func (in *MasterInstanceFleetInstanceTypeConfigsObservation) DeepCopy() *MasterInstanceFleetInstanceTypeConfigsObservation { + if in == nil { + return nil + } + out := new(MasterInstanceFleetInstanceTypeConfigsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetInstanceTypeConfigsParameters) DeepCopyInto(out *MasterInstanceFleetInstanceTypeConfigsParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetInstanceTypeConfigsParameters. +func (in *MasterInstanceFleetInstanceTypeConfigsParameters) DeepCopy() *MasterInstanceFleetInstanceTypeConfigsParameters { + if in == nil { + return nil + } + out := new(MasterInstanceFleetInstanceTypeConfigsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetLaunchSpecificationsInitParameters) DeepCopyInto(out *MasterInstanceFleetLaunchSpecificationsInitParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetLaunchSpecificationsInitParameters. +func (in *MasterInstanceFleetLaunchSpecificationsInitParameters) DeepCopy() *MasterInstanceFleetLaunchSpecificationsInitParameters { + if in == nil { + return nil + } + out := new(MasterInstanceFleetLaunchSpecificationsInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetLaunchSpecificationsObservation) DeepCopyInto(out *MasterInstanceFleetLaunchSpecificationsObservation) { + *out = *in + if in.OnDemandSpecification != nil { + in, out := &in.OnDemandSpecification, &out.OnDemandSpecification + *out = make([]LaunchSpecificationsOnDemandSpecificationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.SpotSpecification != nil { + in, out := &in.SpotSpecification, &out.SpotSpecification + *out = make([]LaunchSpecificationsSpotSpecificationObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetLaunchSpecificationsObservation. +func (in *MasterInstanceFleetLaunchSpecificationsObservation) DeepCopy() *MasterInstanceFleetLaunchSpecificationsObservation { + if in == nil { + return nil + } + out := new(MasterInstanceFleetLaunchSpecificationsObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetLaunchSpecificationsParameters) DeepCopyInto(out *MasterInstanceFleetLaunchSpecificationsParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetLaunchSpecificationsParameters. +func (in *MasterInstanceFleetLaunchSpecificationsParameters) DeepCopy() *MasterInstanceFleetLaunchSpecificationsParameters { + if in == nil { + return nil + } + out := new(MasterInstanceFleetLaunchSpecificationsParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetObservation) DeepCopyInto(out *MasterInstanceFleetObservation) { + *out = *in + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InstanceTypeConfigs != nil { + in, out := &in.InstanceTypeConfigs, &out.InstanceTypeConfigs + *out = make([]MasterInstanceFleetInstanceTypeConfigsObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.LaunchSpecifications != nil { + in, out := &in.LaunchSpecifications, &out.LaunchSpecifications + *out = new(MasterInstanceFleetLaunchSpecificationsObservation) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } + if in.ProvisionedOnDemandCapacity != nil { + in, out := &in.ProvisionedOnDemandCapacity, &out.ProvisionedOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.ProvisionedSpotCapacity != nil { + in, out := &in.ProvisionedSpotCapacity, &out.ProvisionedSpotCapacity + *out = new(float64) + **out = **in + } + if in.TargetOnDemandCapacity != nil { + in, out := &in.TargetOnDemandCapacity, &out.TargetOnDemandCapacity + *out = new(float64) + **out = **in + } + if in.TargetSpotCapacity != nil { + in, out := &in.TargetSpotCapacity, &out.TargetSpotCapacity + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetObservation. +func (in *MasterInstanceFleetObservation) DeepCopy() *MasterInstanceFleetObservation { + if in == nil { + return nil + } + out := new(MasterInstanceFleetObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceFleetParameters) DeepCopyInto(out *MasterInstanceFleetParameters) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceFleetParameters. +func (in *MasterInstanceFleetParameters) DeepCopy() *MasterInstanceFleetParameters { + if in == nil { + return nil + } + out := new(MasterInstanceFleetParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceGroupEBSConfigInitParameters) DeepCopyInto(out *MasterInstanceGroupEBSConfigInitParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceGroupEBSConfigInitParameters. +func (in *MasterInstanceGroupEBSConfigInitParameters) DeepCopy() *MasterInstanceGroupEBSConfigInitParameters { + if in == nil { + return nil + } + out := new(MasterInstanceGroupEBSConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceGroupEBSConfigObservation) DeepCopyInto(out *MasterInstanceGroupEBSConfigObservation) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceGroupEBSConfigObservation. +func (in *MasterInstanceGroupEBSConfigObservation) DeepCopy() *MasterInstanceGroupEBSConfigObservation { + if in == nil { + return nil + } + out := new(MasterInstanceGroupEBSConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceGroupEBSConfigParameters) DeepCopyInto(out *MasterInstanceGroupEBSConfigParameters) { + *out = *in + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + *out = new(float64) + **out = **in + } + if in.Size != nil { + in, out := &in.Size, &out.Size + *out = new(float64) + **out = **in + } + if in.Throughput != nil { + in, out := &in.Throughput, &out.Throughput + *out = new(float64) + **out = **in + } + if in.Type != nil { + in, out := &in.Type, &out.Type + *out = new(string) + **out = **in + } + if in.VolumesPerInstance != nil { + in, out := &in.VolumesPerInstance, &out.VolumesPerInstance + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceGroupEBSConfigParameters. +func (in *MasterInstanceGroupEBSConfigParameters) DeepCopy() *MasterInstanceGroupEBSConfigParameters { + if in == nil { + return nil + } + out := new(MasterInstanceGroupEBSConfigParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceGroupInitParameters) DeepCopyInto(out *MasterInstanceGroupInitParameters) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]MasterInstanceGroupEBSConfigInitParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceGroupInitParameters. +func (in *MasterInstanceGroupInitParameters) DeepCopy() *MasterInstanceGroupInitParameters { + if in == nil { + return nil + } + out := new(MasterInstanceGroupInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceGroupObservation) DeepCopyInto(out *MasterInstanceGroupObservation) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]MasterInstanceGroupEBSConfigObservation, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ID != nil { + in, out := &in.ID, &out.ID + *out = new(string) + **out = **in + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceGroupObservation. +func (in *MasterInstanceGroupObservation) DeepCopy() *MasterInstanceGroupObservation { + if in == nil { + return nil + } + out := new(MasterInstanceGroupObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterInstanceGroupParameters) DeepCopyInto(out *MasterInstanceGroupParameters) { + *out = *in + if in.BidPrice != nil { + in, out := &in.BidPrice, &out.BidPrice + *out = new(string) + **out = **in + } + if in.EBSConfig != nil { + in, out := &in.EBSConfig, &out.EBSConfig + *out = make([]MasterInstanceGroupEBSConfigParameters, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.InstanceCount != nil { + in, out := &in.InstanceCount, &out.InstanceCount + *out = new(float64) + **out = **in + } + if in.InstanceType != nil { + in, out := &in.InstanceType, &out.InstanceType + *out = new(string) + **out = **in + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterInstanceGroupParameters. +func (in *MasterInstanceGroupParameters) DeepCopy() *MasterInstanceGroupParameters { + if in == nil { + return nil + } + out := new(MasterInstanceGroupParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OnDemandSpecificationInitParameters) DeepCopyInto(out *OnDemandSpecificationInitParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OnDemandSpecificationInitParameters. +func (in *OnDemandSpecificationInitParameters) DeepCopy() *OnDemandSpecificationInitParameters { + if in == nil { + return nil + } + out := new(OnDemandSpecificationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OnDemandSpecificationObservation) DeepCopyInto(out *OnDemandSpecificationObservation) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OnDemandSpecificationObservation. +func (in *OnDemandSpecificationObservation) DeepCopy() *OnDemandSpecificationObservation { + if in == nil { + return nil + } + out := new(OnDemandSpecificationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OnDemandSpecificationParameters) DeepCopyInto(out *OnDemandSpecificationParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OnDemandSpecificationParameters. +func (in *OnDemandSpecificationParameters) DeepCopy() *OnDemandSpecificationParameters { + if in == nil { + return nil + } + out := new(OnDemandSpecificationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlacementGroupConfigInitParameters) DeepCopyInto(out *PlacementGroupConfigInitParameters) { + *out = *in + if in.InstanceRole != nil { + in, out := &in.InstanceRole, &out.InstanceRole + *out = new(string) + **out = **in + } + if in.PlacementStrategy != nil { + in, out := &in.PlacementStrategy, &out.PlacementStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlacementGroupConfigInitParameters. +func (in *PlacementGroupConfigInitParameters) DeepCopy() *PlacementGroupConfigInitParameters { + if in == nil { + return nil + } + out := new(PlacementGroupConfigInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlacementGroupConfigObservation) DeepCopyInto(out *PlacementGroupConfigObservation) { + *out = *in + if in.InstanceRole != nil { + in, out := &in.InstanceRole, &out.InstanceRole + *out = new(string) + **out = **in + } + if in.PlacementStrategy != nil { + in, out := &in.PlacementStrategy, &out.PlacementStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlacementGroupConfigObservation. +func (in *PlacementGroupConfigObservation) DeepCopy() *PlacementGroupConfigObservation { + if in == nil { + return nil + } + out := new(PlacementGroupConfigObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PlacementGroupConfigParameters) DeepCopyInto(out *PlacementGroupConfigParameters) { + *out = *in + if in.InstanceRole != nil { + in, out := &in.InstanceRole, &out.InstanceRole + *out = new(string) + **out = **in + } + if in.PlacementStrategy != nil { + in, out := &in.PlacementStrategy, &out.PlacementStrategy + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PlacementGroupConfigParameters. +func (in *PlacementGroupConfigParameters) DeepCopy() *PlacementGroupConfigParameters { + if in == nil { + return nil + } + out := new(PlacementGroupConfigParameters) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SecurityConfiguration) DeepCopyInto(out *SecurityConfiguration) { *out = *in @@ -180,3 +4725,198 @@ func (in *SecurityConfigurationStatus) DeepCopy() *SecurityConfigurationStatus { in.DeepCopyInto(out) return out } + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpotSpecificationInitParameters) DeepCopyInto(out *SpotSpecificationInitParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpotSpecificationInitParameters. +func (in *SpotSpecificationInitParameters) DeepCopy() *SpotSpecificationInitParameters { + if in == nil { + return nil + } + out := new(SpotSpecificationInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpotSpecificationObservation) DeepCopyInto(out *SpotSpecificationObservation) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpotSpecificationObservation. +func (in *SpotSpecificationObservation) DeepCopy() *SpotSpecificationObservation { + if in == nil { + return nil + } + out := new(SpotSpecificationObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SpotSpecificationParameters) DeepCopyInto(out *SpotSpecificationParameters) { + *out = *in + if in.AllocationStrategy != nil { + in, out := &in.AllocationStrategy, &out.AllocationStrategy + *out = new(string) + **out = **in + } + if in.BlockDurationMinutes != nil { + in, out := &in.BlockDurationMinutes, &out.BlockDurationMinutes + *out = new(float64) + **out = **in + } + if in.TimeoutAction != nil { + in, out := &in.TimeoutAction, &out.TimeoutAction + *out = new(string) + **out = **in + } + if in.TimeoutDurationMinutes != nil { + in, out := &in.TimeoutDurationMinutes, &out.TimeoutDurationMinutes + *out = new(float64) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SpotSpecificationParameters. +func (in *SpotSpecificationParameters) DeepCopy() *SpotSpecificationParameters { + if in == nil { + return nil + } + out := new(SpotSpecificationParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StepInitParameters) DeepCopyInto(out *StepInitParameters) { + *out = *in + if in.ActionOnFailure != nil { + in, out := &in.ActionOnFailure, &out.ActionOnFailure + *out = new(string) + **out = **in + } + if in.HadoopJarStep != nil { + in, out := &in.HadoopJarStep, &out.HadoopJarStep + *out = new(HadoopJarStepInitParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepInitParameters. +func (in *StepInitParameters) DeepCopy() *StepInitParameters { + if in == nil { + return nil + } + out := new(StepInitParameters) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StepObservation) DeepCopyInto(out *StepObservation) { + *out = *in + if in.ActionOnFailure != nil { + in, out := &in.ActionOnFailure, &out.ActionOnFailure + *out = new(string) + **out = **in + } + if in.HadoopJarStep != nil { + in, out := &in.HadoopJarStep, &out.HadoopJarStep + *out = new(HadoopJarStepObservation) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepObservation. +func (in *StepObservation) DeepCopy() *StepObservation { + if in == nil { + return nil + } + out := new(StepObservation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *StepParameters) DeepCopyInto(out *StepParameters) { + *out = *in + if in.ActionOnFailure != nil { + in, out := &in.ActionOnFailure, &out.ActionOnFailure + *out = new(string) + **out = **in + } + if in.HadoopJarStep != nil { + in, out := &in.HadoopJarStep, &out.HadoopJarStep + *out = new(HadoopJarStepParameters) + (*in).DeepCopyInto(*out) + } + if in.Name != nil { + in, out := &in.Name, &out.Name + *out = new(string) + **out = **in + } +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StepParameters. +func (in *StepParameters) DeepCopy() *StepParameters { + if in == nil { + return nil + } + out := new(StepParameters) + in.DeepCopyInto(out) + return out +} diff --git a/apis/emr/v1beta1/zz_generated.managed.go b/apis/emr/v1beta1/zz_generated.managed.go index 003f94774b..56f965ae7f 100644 --- a/apis/emr/v1beta1/zz_generated.managed.go +++ b/apis/emr/v1beta1/zz_generated.managed.go @@ -7,6 +7,186 @@ package v1beta1 import xpv1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +// GetCondition of this Cluster. +func (mg *Cluster) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this Cluster. +func (mg *Cluster) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this Cluster. +func (mg *Cluster) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this Cluster. +func (mg *Cluster) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this Cluster. +func (mg *Cluster) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this Cluster. +func (mg *Cluster) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this Cluster. +func (mg *Cluster) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this Cluster. +func (mg *Cluster) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this Cluster. +func (mg *Cluster) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this Cluster. +func (mg *Cluster) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this Cluster. +func (mg *Cluster) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this Cluster. +func (mg *Cluster) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this InstanceFleet. +func (mg *InstanceFleet) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this InstanceFleet. +func (mg *InstanceFleet) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this InstanceFleet. +func (mg *InstanceFleet) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this InstanceFleet. +func (mg *InstanceFleet) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this InstanceFleet. +func (mg *InstanceFleet) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this InstanceFleet. +func (mg *InstanceFleet) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this InstanceFleet. +func (mg *InstanceFleet) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this InstanceFleet. +func (mg *InstanceFleet) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this InstanceFleet. +func (mg *InstanceFleet) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this InstanceFleet. +func (mg *InstanceFleet) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this InstanceFleet. +func (mg *InstanceFleet) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this InstanceFleet. +func (mg *InstanceFleet) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + +// GetCondition of this InstanceGroup. +func (mg *InstanceGroup) GetCondition(ct xpv1.ConditionType) xpv1.Condition { + return mg.Status.GetCondition(ct) +} + +// GetDeletionPolicy of this InstanceGroup. +func (mg *InstanceGroup) GetDeletionPolicy() xpv1.DeletionPolicy { + return mg.Spec.DeletionPolicy +} + +// GetManagementPolicies of this InstanceGroup. +func (mg *InstanceGroup) GetManagementPolicies() xpv1.ManagementPolicies { + return mg.Spec.ManagementPolicies +} + +// GetProviderConfigReference of this InstanceGroup. +func (mg *InstanceGroup) GetProviderConfigReference() *xpv1.Reference { + return mg.Spec.ProviderConfigReference +} + +// GetPublishConnectionDetailsTo of this InstanceGroup. +func (mg *InstanceGroup) GetPublishConnectionDetailsTo() *xpv1.PublishConnectionDetailsTo { + return mg.Spec.PublishConnectionDetailsTo +} + +// GetWriteConnectionSecretToReference of this InstanceGroup. +func (mg *InstanceGroup) GetWriteConnectionSecretToReference() *xpv1.SecretReference { + return mg.Spec.WriteConnectionSecretToReference +} + +// SetConditions of this InstanceGroup. +func (mg *InstanceGroup) SetConditions(c ...xpv1.Condition) { + mg.Status.SetConditions(c...) +} + +// SetDeletionPolicy of this InstanceGroup. +func (mg *InstanceGroup) SetDeletionPolicy(r xpv1.DeletionPolicy) { + mg.Spec.DeletionPolicy = r +} + +// SetManagementPolicies of this InstanceGroup. +func (mg *InstanceGroup) SetManagementPolicies(r xpv1.ManagementPolicies) { + mg.Spec.ManagementPolicies = r +} + +// SetProviderConfigReference of this InstanceGroup. +func (mg *InstanceGroup) SetProviderConfigReference(r *xpv1.Reference) { + mg.Spec.ProviderConfigReference = r +} + +// SetPublishConnectionDetailsTo of this InstanceGroup. +func (mg *InstanceGroup) SetPublishConnectionDetailsTo(r *xpv1.PublishConnectionDetailsTo) { + mg.Spec.PublishConnectionDetailsTo = r +} + +// SetWriteConnectionSecretToReference of this InstanceGroup. +func (mg *InstanceGroup) SetWriteConnectionSecretToReference(r *xpv1.SecretReference) { + mg.Spec.WriteConnectionSecretToReference = r +} + // GetCondition of this SecurityConfiguration. func (mg *SecurityConfiguration) GetCondition(ct xpv1.ConditionType) xpv1.Condition { return mg.Status.GetCondition(ct) diff --git a/apis/emr/v1beta1/zz_generated.managedlist.go b/apis/emr/v1beta1/zz_generated.managedlist.go index a0034a3bc8..c5edc546fd 100644 --- a/apis/emr/v1beta1/zz_generated.managedlist.go +++ b/apis/emr/v1beta1/zz_generated.managedlist.go @@ -7,6 +7,33 @@ package v1beta1 import resource "github.com/crossplane/crossplane-runtime/pkg/resource" +// GetItems of this ClusterList. +func (l *ClusterList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this InstanceFleetList. +func (l *InstanceFleetList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + +// GetItems of this InstanceGroupList. +func (l *InstanceGroupList) GetItems() []resource.Managed { + items := make([]resource.Managed, len(l.Items)) + for i := range l.Items { + items[i] = &l.Items[i] + } + return items +} + // GetItems of this SecurityConfigurationList. func (l *SecurityConfigurationList) GetItems() []resource.Managed { items := make([]resource.Managed, len(l.Items)) diff --git a/apis/emr/v1beta1/zz_generated.resolvers.go b/apis/emr/v1beta1/zz_generated.resolvers.go new file mode 100644 index 0000000000..ef0e0673db --- /dev/null +++ b/apis/emr/v1beta1/zz_generated.resolvers.go @@ -0,0 +1,501 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 +// Code generated by angryjet. DO NOT EDIT. +// Code transformed by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + "context" + reference "github.com/crossplane/crossplane-runtime/pkg/reference" + resource "github.com/crossplane/upjet/pkg/resource" + errors "github.com/pkg/errors" + + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + client "sigs.k8s.io/controller-runtime/pkg/client" + + // ResolveReferences of this Cluster. + apisresolver "github.com/upbound/provider-aws/internal/apis" +) + +func (mg *Cluster) ResolveReferences(ctx context.Context, c client.Reader) error { + var m xpresource.Managed + var l xpresource.ManagedList + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.AdditionalMasterSecurityGroups), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.EC2Attributes.AdditionalMasterSecurityGroupsRef, + Selector: mg.Spec.ForProvider.EC2Attributes.AdditionalMasterSecurityGroupsSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.AdditionalMasterSecurityGroups") + } + mg.Spec.ForProvider.EC2Attributes.AdditionalMasterSecurityGroups = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.AdditionalMasterSecurityGroupsRef = rsp.ResolvedReference + + } + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.AdditionalSlaveSecurityGroups), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.EC2Attributes.AdditionalSlaveSecurityGroupsRef, + Selector: mg.Spec.ForProvider.EC2Attributes.AdditionalSlaveSecurityGroupsSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.AdditionalSlaveSecurityGroups") + } + mg.Spec.ForProvider.EC2Attributes.AdditionalSlaveSecurityGroups = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.AdditionalSlaveSecurityGroupsRef = rsp.ResolvedReference + + } + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.EmrManagedMasterSecurityGroup), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.ForProvider.EC2Attributes.EmrManagedMasterSecurityGroupRef, + Selector: mg.Spec.ForProvider.EC2Attributes.EmrManagedMasterSecurityGroupSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.EmrManagedMasterSecurityGroup") + } + mg.Spec.ForProvider.EC2Attributes.EmrManagedMasterSecurityGroup = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.EmrManagedMasterSecurityGroupRef = rsp.ResolvedReference + + } + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.EmrManagedSlaveSecurityGroup), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.ForProvider.EC2Attributes.EmrManagedSlaveSecurityGroupRef, + Selector: mg.Spec.ForProvider.EC2Attributes.EmrManagedSlaveSecurityGroupSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.EmrManagedSlaveSecurityGroup") + } + mg.Spec.ForProvider.EC2Attributes.EmrManagedSlaveSecurityGroup = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.EmrManagedSlaveSecurityGroupRef = rsp.ResolvedReference + + } + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("iam.aws.upbound.io", "v1beta1", "InstanceProfile", "InstanceProfileList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.InstanceProfile), + Extract: resource.ExtractParamPath("arn", true), + Reference: mg.Spec.ForProvider.EC2Attributes.InstanceProfileRef, + Selector: mg.Spec.ForProvider.EC2Attributes.InstanceProfileSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.InstanceProfile") + } + mg.Spec.ForProvider.EC2Attributes.InstanceProfile = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.InstanceProfileRef = rsp.ResolvedReference + + } + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "KeyPair", "KeyPairList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.KeyName), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.EC2Attributes.KeyNameRef, + Selector: mg.Spec.ForProvider.EC2Attributes.KeyNameSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.KeyName") + } + mg.Spec.ForProvider.EC2Attributes.KeyName = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.KeyNameRef = rsp.ResolvedReference + + } + if mg.Spec.ForProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "Subnet", "SubnetList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.EC2Attributes.SubnetID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.ForProvider.EC2Attributes.SubnetIDRef, + Selector: mg.Spec.ForProvider.EC2Attributes.SubnetIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.EC2Attributes.SubnetID") + } + mg.Spec.ForProvider.EC2Attributes.SubnetID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.EC2Attributes.SubnetIDRef = rsp.ResolvedReference + + } + { + m, l, err = apisresolver.GetManagedResource("s3.aws.upbound.io", "v1beta2", "Bucket", "BucketList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.LogURI), + Extract: reference.ExternalName(), + Reference: mg.Spec.ForProvider.LogURIRef, + Selector: mg.Spec.ForProvider.LogURISelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.LogURI") + } + mg.Spec.ForProvider.LogURI = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.LogURIRef = rsp.ResolvedReference + { + m, l, err = apisresolver.GetManagedResource("iam.aws.upbound.io", "v1beta1", "Role", "RoleList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ServiceRole), + Extract: resource.ExtractParamPath("arn", true), + Reference: mg.Spec.ForProvider.ServiceRoleRef, + Selector: mg.Spec.ForProvider.ServiceRoleSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ServiceRole") + } + mg.Spec.ForProvider.ServiceRole = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ServiceRoleRef = rsp.ResolvedReference + + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.AdditionalMasterSecurityGroups), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.EC2Attributes.AdditionalMasterSecurityGroupsRef, + Selector: mg.Spec.InitProvider.EC2Attributes.AdditionalMasterSecurityGroupsSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.AdditionalMasterSecurityGroups") + } + mg.Spec.InitProvider.EC2Attributes.AdditionalMasterSecurityGroups = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.AdditionalMasterSecurityGroupsRef = rsp.ResolvedReference + + } + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.AdditionalSlaveSecurityGroups), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.EC2Attributes.AdditionalSlaveSecurityGroupsRef, + Selector: mg.Spec.InitProvider.EC2Attributes.AdditionalSlaveSecurityGroupsSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.AdditionalSlaveSecurityGroups") + } + mg.Spec.InitProvider.EC2Attributes.AdditionalSlaveSecurityGroups = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.AdditionalSlaveSecurityGroupsRef = rsp.ResolvedReference + + } + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.EmrManagedMasterSecurityGroup), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.InitProvider.EC2Attributes.EmrManagedMasterSecurityGroupRef, + Selector: mg.Spec.InitProvider.EC2Attributes.EmrManagedMasterSecurityGroupSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.EmrManagedMasterSecurityGroup") + } + mg.Spec.InitProvider.EC2Attributes.EmrManagedMasterSecurityGroup = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.EmrManagedMasterSecurityGroupRef = rsp.ResolvedReference + + } + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "SecurityGroup", "SecurityGroupList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.EmrManagedSlaveSecurityGroup), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.InitProvider.EC2Attributes.EmrManagedSlaveSecurityGroupRef, + Selector: mg.Spec.InitProvider.EC2Attributes.EmrManagedSlaveSecurityGroupSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.EmrManagedSlaveSecurityGroup") + } + mg.Spec.InitProvider.EC2Attributes.EmrManagedSlaveSecurityGroup = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.EmrManagedSlaveSecurityGroupRef = rsp.ResolvedReference + + } + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("iam.aws.upbound.io", "v1beta1", "InstanceProfile", "InstanceProfileList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.InstanceProfile), + Extract: resource.ExtractParamPath("arn", true), + Reference: mg.Spec.InitProvider.EC2Attributes.InstanceProfileRef, + Selector: mg.Spec.InitProvider.EC2Attributes.InstanceProfileSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.InstanceProfile") + } + mg.Spec.InitProvider.EC2Attributes.InstanceProfile = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.InstanceProfileRef = rsp.ResolvedReference + + } + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "KeyPair", "KeyPairList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.KeyName), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.EC2Attributes.KeyNameRef, + Selector: mg.Spec.InitProvider.EC2Attributes.KeyNameSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.KeyName") + } + mg.Spec.InitProvider.EC2Attributes.KeyName = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.KeyNameRef = rsp.ResolvedReference + + } + if mg.Spec.InitProvider.EC2Attributes != nil { + { + m, l, err = apisresolver.GetManagedResource("ec2.aws.upbound.io", "v1beta1", "Subnet", "SubnetList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.EC2Attributes.SubnetID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.InitProvider.EC2Attributes.SubnetIDRef, + Selector: mg.Spec.InitProvider.EC2Attributes.SubnetIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.EC2Attributes.SubnetID") + } + mg.Spec.InitProvider.EC2Attributes.SubnetID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.EC2Attributes.SubnetIDRef = rsp.ResolvedReference + + } + { + m, l, err = apisresolver.GetManagedResource("s3.aws.upbound.io", "v1beta2", "Bucket", "BucketList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.LogURI), + Extract: reference.ExternalName(), + Reference: mg.Spec.InitProvider.LogURIRef, + Selector: mg.Spec.InitProvider.LogURISelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.LogURI") + } + mg.Spec.InitProvider.LogURI = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.LogURIRef = rsp.ResolvedReference + { + m, l, err = apisresolver.GetManagedResource("iam.aws.upbound.io", "v1beta1", "Role", "RoleList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ServiceRole), + Extract: resource.ExtractParamPath("arn", true), + Reference: mg.Spec.InitProvider.ServiceRoleRef, + Selector: mg.Spec.InitProvider.ServiceRoleSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ServiceRole") + } + mg.Spec.InitProvider.ServiceRole = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ServiceRoleRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this InstanceFleet. +func (mg *InstanceFleet) ResolveReferences(ctx context.Context, c client.Reader) error { + var m xpresource.Managed + var l xpresource.ManagedList + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + { + m, l, err = apisresolver.GetManagedResource("emr.aws.upbound.io", "v1beta1", "Cluster", "ClusterList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ClusterID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.ForProvider.ClusterIDRef, + Selector: mg.Spec.ForProvider.ClusterIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ClusterID") + } + mg.Spec.ForProvider.ClusterID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ClusterIDRef = rsp.ResolvedReference + { + m, l, err = apisresolver.GetManagedResource("emr.aws.upbound.io", "v1beta1", "Cluster", "ClusterList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ClusterID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.InitProvider.ClusterIDRef, + Selector: mg.Spec.InitProvider.ClusterIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ClusterID") + } + mg.Spec.InitProvider.ClusterID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ClusterIDRef = rsp.ResolvedReference + + return nil +} + +// ResolveReferences of this InstanceGroup. +func (mg *InstanceGroup) ResolveReferences(ctx context.Context, c client.Reader) error { + var m xpresource.Managed + var l xpresource.ManagedList + r := reference.NewAPIResolver(c, mg) + + var rsp reference.ResolutionResponse + var err error + { + m, l, err = apisresolver.GetManagedResource("emr.aws.upbound.io", "v1beta1", "Cluster", "ClusterList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.ForProvider.ClusterID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.ForProvider.ClusterIDRef, + Selector: mg.Spec.ForProvider.ClusterIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.ForProvider.ClusterID") + } + mg.Spec.ForProvider.ClusterID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.ForProvider.ClusterIDRef = rsp.ResolvedReference + { + m, l, err = apisresolver.GetManagedResource("emr.aws.upbound.io", "v1beta1", "Cluster", "ClusterList") + if err != nil { + return errors.Wrap(err, "failed to get the reference target managed resource and its list for reference resolution") + } + + rsp, err = r.Resolve(ctx, reference.ResolutionRequest{ + CurrentValue: reference.FromPtrValue(mg.Spec.InitProvider.ClusterID), + Extract: resource.ExtractResourceID(), + Reference: mg.Spec.InitProvider.ClusterIDRef, + Selector: mg.Spec.InitProvider.ClusterIDSelector, + To: reference.To{List: l, Managed: m}, + }) + } + if err != nil { + return errors.Wrap(err, "mg.Spec.InitProvider.ClusterID") + } + mg.Spec.InitProvider.ClusterID = reference.ToPtrValue(rsp.ResolvedValue) + mg.Spec.InitProvider.ClusterIDRef = rsp.ResolvedReference + + return nil +} diff --git a/apis/emr/v1beta1/zz_instancefleet_terraformed.go b/apis/emr/v1beta1/zz_instancefleet_terraformed.go new file mode 100755 index 0000000000..bcd181e2ac --- /dev/null +++ b/apis/emr/v1beta1/zz_instancefleet_terraformed.go @@ -0,0 +1,129 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this InstanceFleet +func (mg *InstanceFleet) GetTerraformResourceType() string { + return "aws_emr_instance_fleet" +} + +// GetConnectionDetailsMapping for this InstanceFleet +func (tr *InstanceFleet) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this InstanceFleet +func (tr *InstanceFleet) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this InstanceFleet +func (tr *InstanceFleet) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this InstanceFleet +func (tr *InstanceFleet) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this InstanceFleet +func (tr *InstanceFleet) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this InstanceFleet +func (tr *InstanceFleet) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this InstanceFleet +func (tr *InstanceFleet) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this InstanceFleet +func (tr *InstanceFleet) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this InstanceFleet using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *InstanceFleet) LateInitialize(attrs []byte) (bool, error) { + params := &InstanceFleetParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *InstanceFleet) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/emr/v1beta1/zz_instancefleet_types.go b/apis/emr/v1beta1/zz_instancefleet_types.go new file mode 100755 index 0000000000..7856885c75 --- /dev/null +++ b/apis/emr/v1beta1/zz_instancefleet_types.go @@ -0,0 +1,427 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type InstanceFleetInitParameters struct { + + // ID of the EMR Cluster to attach to. Changing this forces a new resource to be created. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/emr/v1beta1.Cluster + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Reference to a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDRef *v1.Reference `json:"clusterIdRef,omitempty" tf:"-"` + + // Selector for a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDSelector *v1.Selector `json:"clusterIdSelector,omitempty" tf:"-"` + + // Configuration block for instance fleet + InstanceTypeConfigs []InstanceFleetInstanceTypeConfigsInitParameters `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification + LaunchSpecifications *InstanceFleetLaunchSpecificationsInitParameters `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // The target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsConfigurationsInitParameters struct { + + // The classification within a configuration. + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // A map of properties specified within a configuration classification + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsConfigurationsObservation struct { + + // The classification within a configuration. + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // A map of properties specified within a configuration classification + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsConfigurationsParameters struct { + + // The classification within a configuration. + // +kubebuilder:validation:Optional + Classification *string `json:"classification,omitempty" tf:"classification,omitempty"` + + // A map of properties specified within a configuration classification + // +kubebuilder:validation:Optional + // +mapType=granular + Properties map[string]*string `json:"properties,omitempty" tf:"properties,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsEBSConfigInitParameters struct { + + // The number of I/O operations per second (IOPS) that the volume supports + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // The volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The volume type. Valid options are gp2, io1, standard and st1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1) + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsEBSConfigObservation struct { + + // The number of I/O operations per second (IOPS) that the volume supports + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // The volume size, in gibibytes (GiB). + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The volume type. Valid options are gp2, io1, standard and st1. See EBS Volume Types. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1) + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsEBSConfigParameters struct { + + // The number of I/O operations per second (IOPS) that the volume supports + // +kubebuilder:validation:Optional + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // The volume size, in gibibytes (GiB). + // +kubebuilder:validation:Optional + Size *float64 `json:"size" tf:"size,omitempty"` + + // The volume type. Valid options are gp2, io1, standard and st1. See EBS Volume Types. + // +kubebuilder:validation:Optional + Type *string `json:"type" tf:"type,omitempty"` + + // The number of EBS volumes with this configuration to attach to each EC2 instance in the instance group (default is 1) + // +kubebuilder:validation:Optional + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsInitParameters struct { + + // The bid price for each EC2 Spot instance type as defined by instance_type. Expressed in USD. If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // The bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + Configurations []InstanceFleetInstanceTypeConfigsConfigurationsInitParameters `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []InstanceFleetInstanceTypeConfigsEBSConfigInitParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // An EC2 instance type, such as m4.xlarge. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // The number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsObservation struct { + + // The bid price for each EC2 Spot instance type as defined by instance_type. Expressed in USD. If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // The bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + Configurations []InstanceFleetInstanceTypeConfigsConfigurationsObservation `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + EBSConfig []InstanceFleetInstanceTypeConfigsEBSConfigObservation `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // An EC2 instance type, such as m4.xlarge. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // The number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type InstanceFleetInstanceTypeConfigsParameters struct { + + // The bid price for each EC2 Spot instance type as defined by instance_type. Expressed in USD. If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + // +kubebuilder:validation:Optional + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // The bid price, as a percentage of On-Demand price, for each EC2 Spot instance as defined by instance_type. Expressed as a number (for example, 20 specifies 20%). If neither bid_price nor bid_price_as_percentage_of_on_demand_price is provided, bid_price_as_percentage_of_on_demand_price defaults to 100%. + // +kubebuilder:validation:Optional + BidPriceAsPercentageOfOnDemandPrice *float64 `json:"bidPriceAsPercentageOfOnDemandPrice,omitempty" tf:"bid_price_as_percentage_of_on_demand_price,omitempty"` + + // A configuration classification that applies when provisioning cluster instances, which can include configurations for applications and software that run on the cluster. List of configuration blocks. + // +kubebuilder:validation:Optional + Configurations []InstanceFleetInstanceTypeConfigsConfigurationsParameters `json:"configurations,omitempty" tf:"configurations,omitempty"` + + // Configuration block(s) for EBS volumes attached to each instance in the instance group. Detailed below. + // +kubebuilder:validation:Optional + EBSConfig []InstanceFleetInstanceTypeConfigsEBSConfigParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // An EC2 instance type, such as m4.xlarge. + // +kubebuilder:validation:Optional + InstanceType *string `json:"instanceType" tf:"instance_type,omitempty"` + + // The number of units that a provisioned instance of this type provides toward fulfilling the target capacities defined in aws_emr_instance_fleet. + // +kubebuilder:validation:Optional + WeightedCapacity *float64 `json:"weightedCapacity,omitempty" tf:"weighted_capacity,omitempty"` +} + +type InstanceFleetLaunchSpecificationsInitParameters struct { + + // Configuration block for on demand instances launch specifications + OnDemandSpecification []InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications + SpotSpecification []InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type InstanceFleetLaunchSpecificationsObservation struct { + + // Configuration block for on demand instances launch specifications + OnDemandSpecification []InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications + SpotSpecification []InstanceFleetLaunchSpecificationsSpotSpecificationObservation `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type InstanceFleetLaunchSpecificationsOnDemandSpecificationInitParameters struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` +} + +type InstanceFleetLaunchSpecificationsOnDemandSpecificationObservation struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` +} + +type InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + // +kubebuilder:validation:Optional + AllocationStrategy *string `json:"allocationStrategy" tf:"allocation_strategy,omitempty"` +} + +type InstanceFleetLaunchSpecificationsParameters struct { + + // Configuration block for on demand instances launch specifications + // +kubebuilder:validation:Optional + OnDemandSpecification []InstanceFleetLaunchSpecificationsOnDemandSpecificationParameters `json:"onDemandSpecification,omitempty" tf:"on_demand_specification,omitempty"` + + // Configuration block for spot instances launch specifications + // +kubebuilder:validation:Optional + SpotSpecification []InstanceFleetLaunchSpecificationsSpotSpecificationParameters `json:"spotSpecification,omitempty" tf:"spot_specification,omitempty"` +} + +type InstanceFleetLaunchSpecificationsSpotSpecificationInitParameters struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` + + // The defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // The action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + TimeoutAction *string `json:"timeoutAction,omitempty" tf:"timeout_action,omitempty"` + + // The spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes,omitempty" tf:"timeout_duration_minutes,omitempty"` +} + +type InstanceFleetLaunchSpecificationsSpotSpecificationObservation struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + AllocationStrategy *string `json:"allocationStrategy,omitempty" tf:"allocation_strategy,omitempty"` + + // The defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // The action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + TimeoutAction *string `json:"timeoutAction,omitempty" tf:"timeout_action,omitempty"` + + // The spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes,omitempty" tf:"timeout_duration_minutes,omitempty"` +} + +type InstanceFleetLaunchSpecificationsSpotSpecificationParameters struct { + + // Specifies the strategy to use in launching On-Demand instance fleets. Currently, the only option is lowest-price (the default), which launches the lowest price first. + // +kubebuilder:validation:Optional + AllocationStrategy *string `json:"allocationStrategy" tf:"allocation_strategy,omitempty"` + + // The defined duration for Spot instances (also known as Spot blocks) in minutes. When specified, the Spot instance does not terminate before the defined duration expires, and defined duration pricing for Spot instances applies. Valid values are 60, 120, 180, 240, 300, or 360. The duration period starts as soon as a Spot instance receives its instance ID. At the end of the duration, Amazon EC2 marks the Spot instance for termination and provides a Spot instance termination notice, which gives the instance a two-minute warning before it terminates. + // +kubebuilder:validation:Optional + BlockDurationMinutes *float64 `json:"blockDurationMinutes,omitempty" tf:"block_duration_minutes,omitempty"` + + // The action to take when TargetSpotCapacity has not been fulfilled when the TimeoutDurationMinutes has expired; that is, when all Spot instances could not be provisioned within the Spot provisioning timeout. Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies that if no Spot instances are available, On-Demand Instances should be provisioned to fulfill any remaining Spot capacity. + // +kubebuilder:validation:Optional + TimeoutAction *string `json:"timeoutAction" tf:"timeout_action,omitempty"` + + // The spot provisioning timeout period in minutes. If Spot instances are not provisioned within this time period, the TimeOutAction is taken. Minimum value is 5 and maximum value is 1440. The timeout applies only during initial provisioning, when the cluster is first created. + // +kubebuilder:validation:Optional + TimeoutDurationMinutes *float64 `json:"timeoutDurationMinutes" tf:"timeout_duration_minutes,omitempty"` +} + +type InstanceFleetObservation struct { + + // ID of the EMR Cluster to attach to. Changing this forces a new resource to be created. + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // The unique identifier of the instance fleet. + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // Configuration block for instance fleet + InstanceTypeConfigs []InstanceFleetInstanceTypeConfigsObservation `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification + LaunchSpecifications *InstanceFleetLaunchSpecificationsObservation `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Demand units that have been provisioned for the instance + // fleet to fulfill TargetOnDemandCapacity. This provisioned capacity might be less than or greater than TargetOnDemandCapacity. + ProvisionedOnDemandCapacity *float64 `json:"provisionedOnDemandCapacity,omitempty" tf:"provisioned_on_demand_capacity,omitempty"` + + // The number of Spot units that have been provisioned for this instance fleet + // to fulfill TargetSpotCapacity. This provisioned capacity might be less than or greater than TargetSpotCapacity. + ProvisionedSpotCapacity *float64 `json:"provisionedSpotCapacity,omitempty" tf:"provisioned_spot_capacity,omitempty"` + + // The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // The target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +type InstanceFleetParameters struct { + + // ID of the EMR Cluster to attach to. Changing this forces a new resource to be created. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/emr/v1beta1.Cluster + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + // +kubebuilder:validation:Optional + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Reference to a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDRef *v1.Reference `json:"clusterIdRef,omitempty" tf:"-"` + + // Selector for a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDSelector *v1.Selector `json:"clusterIdSelector,omitempty" tf:"-"` + + // Configuration block for instance fleet + // +kubebuilder:validation:Optional + InstanceTypeConfigs []InstanceFleetInstanceTypeConfigsParameters `json:"instanceTypeConfigs,omitempty" tf:"instance_type_configs,omitempty"` + + // Configuration block for launch specification + // +kubebuilder:validation:Optional + LaunchSpecifications *InstanceFleetLaunchSpecificationsParameters `json:"launchSpecifications,omitempty" tf:"launch_specifications,omitempty"` + + // Friendly name given to the instance fleet. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Region is the region you'd like your resource to be created in. + // +upjet:crd:field:TFTag=- + // +kubebuilder:validation:Required + Region *string `json:"region" tf:"-"` + + // The target capacity of On-Demand units for the instance fleet, which determines how many On-Demand instances to provision. + // +kubebuilder:validation:Optional + TargetOnDemandCapacity *float64 `json:"targetOnDemandCapacity,omitempty" tf:"target_on_demand_capacity,omitempty"` + + // The target capacity of Spot units for the instance fleet, which determines how many Spot instances to provision. + // +kubebuilder:validation:Optional + TargetSpotCapacity *float64 `json:"targetSpotCapacity,omitempty" tf:"target_spot_capacity,omitempty"` +} + +// InstanceFleetSpec defines the desired state of InstanceFleet +type InstanceFleetSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider InstanceFleetParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider InstanceFleetInitParameters `json:"initProvider,omitempty"` +} + +// InstanceFleetStatus defines the observed state of InstanceFleet. +type InstanceFleetStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider InstanceFleetObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion + +// InstanceFleet is the Schema for the InstanceFleets API. Provides an Elastic MapReduce Cluster Instance Fleet +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,aws} +type InstanceFleet struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec InstanceFleetSpec `json:"spec"` + Status InstanceFleetStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// InstanceFleetList contains a list of InstanceFleets +type InstanceFleetList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []InstanceFleet `json:"items"` +} + +// Repository type metadata. +var ( + InstanceFleet_Kind = "InstanceFleet" + InstanceFleet_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: InstanceFleet_Kind}.String() + InstanceFleet_KindAPIVersion = InstanceFleet_Kind + "." + CRDGroupVersion.String() + InstanceFleet_GroupVersionKind = CRDGroupVersion.WithKind(InstanceFleet_Kind) +) + +func init() { + SchemeBuilder.Register(&InstanceFleet{}, &InstanceFleetList{}) +} diff --git a/apis/emr/v1beta1/zz_instancegroup_terraformed.go b/apis/emr/v1beta1/zz_instancegroup_terraformed.go new file mode 100755 index 0000000000..a8242725ed --- /dev/null +++ b/apis/emr/v1beta1/zz_instancegroup_terraformed.go @@ -0,0 +1,129 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + "dario.cat/mergo" + "github.com/pkg/errors" + + "github.com/crossplane/upjet/pkg/resource" + "github.com/crossplane/upjet/pkg/resource/json" +) + +// GetTerraformResourceType returns Terraform resource type for this InstanceGroup +func (mg *InstanceGroup) GetTerraformResourceType() string { + return "aws_emr_instance_group" +} + +// GetConnectionDetailsMapping for this InstanceGroup +func (tr *InstanceGroup) GetConnectionDetailsMapping() map[string]string { + return nil +} + +// GetObservation of this InstanceGroup +func (tr *InstanceGroup) GetObservation() (map[string]any, error) { + o, err := json.TFParser.Marshal(tr.Status.AtProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(o, &base) +} + +// SetObservation for this InstanceGroup +func (tr *InstanceGroup) SetObservation(obs map[string]any) error { + p, err := json.TFParser.Marshal(obs) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Status.AtProvider) +} + +// GetID returns ID of underlying Terraform resource of this InstanceGroup +func (tr *InstanceGroup) GetID() string { + if tr.Status.AtProvider.ID == nil { + return "" + } + return *tr.Status.AtProvider.ID +} + +// GetParameters of this InstanceGroup +func (tr *InstanceGroup) GetParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.ForProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// SetParameters for this InstanceGroup +func (tr *InstanceGroup) SetParameters(params map[string]any) error { + p, err := json.TFParser.Marshal(params) + if err != nil { + return err + } + return json.TFParser.Unmarshal(p, &tr.Spec.ForProvider) +} + +// GetInitParameters of this InstanceGroup +func (tr *InstanceGroup) GetInitParameters() (map[string]any, error) { + p, err := json.TFParser.Marshal(tr.Spec.InitProvider) + if err != nil { + return nil, err + } + base := map[string]any{} + return base, json.TFParser.Unmarshal(p, &base) +} + +// GetInitParameters of this InstanceGroup +func (tr *InstanceGroup) GetMergedParameters(shouldMergeInitProvider bool) (map[string]any, error) { + params, err := tr.GetParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get parameters for resource '%q'", tr.GetName()) + } + if !shouldMergeInitProvider { + return params, nil + } + + initParams, err := tr.GetInitParameters() + if err != nil { + return nil, errors.Wrapf(err, "cannot get init parameters for resource '%q'", tr.GetName()) + } + + // Note(lsviben): mergo.WithSliceDeepCopy is needed to merge the + // slices from the initProvider to forProvider. As it also sets + // overwrite to true, we need to set it back to false, we don't + // want to overwrite the forProvider fields with the initProvider + // fields. + err = mergo.Merge(¶ms, initParams, mergo.WithSliceDeepCopy, func(c *mergo.Config) { + c.Overwrite = false + }) + if err != nil { + return nil, errors.Wrapf(err, "cannot merge spec.initProvider and spec.forProvider parameters for resource '%q'", tr.GetName()) + } + + return params, nil +} + +// LateInitialize this InstanceGroup using its observed tfState. +// returns True if there are any spec changes for the resource. +func (tr *InstanceGroup) LateInitialize(attrs []byte) (bool, error) { + params := &InstanceGroupParameters{} + if err := json.TFParser.Unmarshal(attrs, params); err != nil { + return false, errors.Wrap(err, "failed to unmarshal Terraform state parameters for late-initialization") + } + opts := []resource.GenericLateInitializerOption{resource.WithZeroValueJSONOmitEmptyFilter(resource.CNameWildcard)} + + li := resource.NewGenericLateInitializer(opts...) + return li.LateInitialize(&tr.Spec.ForProvider, params) +} + +// GetTerraformSchemaVersion returns the associated Terraform schema version +func (tr *InstanceGroup) GetTerraformSchemaVersion() int { + return 0 +} diff --git a/apis/emr/v1beta1/zz_instancegroup_types.go b/apis/emr/v1beta1/zz_instancegroup_types.go new file mode 100755 index 0000000000..035766c648 --- /dev/null +++ b/apis/emr/v1beta1/zz_instancegroup_types.go @@ -0,0 +1,258 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package v1beta1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + + v1 "github.com/crossplane/crossplane-runtime/apis/common/v1" +) + +type InstanceGroupEBSConfigInitParameters struct { + + // The number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // The volume size, in gibibytes (GiB). This can be a number from 1 - 1024. If the volume type is EBS-optimized, the minimum value is 10. + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The volume type. Valid options are 'gp2', 'io1' and 'standard'. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // The number of EBS Volumes to attach per instance. + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceGroupEBSConfigObservation struct { + + // The number of I/O operations per second (IOPS) that the volume supports. + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // The volume size, in gibibytes (GiB). This can be a number from 1 - 1024. If the volume type is EBS-optimized, the minimum value is 10. + Size *float64 `json:"size,omitempty" tf:"size,omitempty"` + + // The volume type. Valid options are 'gp2', 'io1' and 'standard'. + Type *string `json:"type,omitempty" tf:"type,omitempty"` + + // The number of EBS Volumes to attach per instance. + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceGroupEBSConfigParameters struct { + + // The number of I/O operations per second (IOPS) that the volume supports. + // +kubebuilder:validation:Optional + Iops *float64 `json:"iops,omitempty" tf:"iops,omitempty"` + + // The volume size, in gibibytes (GiB). This can be a number from 1 - 1024. If the volume type is EBS-optimized, the minimum value is 10. + // +kubebuilder:validation:Optional + Size *float64 `json:"size" tf:"size,omitempty"` + + // The volume type. Valid options are 'gp2', 'io1' and 'standard'. + // +kubebuilder:validation:Optional + Type *string `json:"type" tf:"type,omitempty"` + + // The number of EBS Volumes to attach per instance. + // +kubebuilder:validation:Optional + VolumesPerInstance *float64 `json:"volumesPerInstance,omitempty" tf:"volumes_per_instance,omitempty"` +} + +type InstanceGroupInitParameters struct { + + // The autoscaling policy document. This is a JSON formatted string. See EMR Auto Scaling + AutoscalingPolicy *string `json:"autoscalingPolicy,omitempty" tf:"autoscaling_policy,omitempty"` + + // If set, the bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // ID of the EMR Cluster to attach to. Changing this forces a new resource to be created. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/emr/v1beta1.Cluster + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Reference to a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDRef *v1.Reference `json:"clusterIdRef,omitempty" tf:"-"` + + // Selector for a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDSelector *v1.Selector `json:"clusterIdSelector,omitempty" tf:"-"` + + // A JSON string for supplying list of configurations specific to the EMR instance group. Note that this can only be changed when using EMR release 5.21 or later. + ConfigurationsJSON *string `json:"configurationsJson,omitempty" tf:"configurations_json,omitempty"` + + // One or more ebs_config blocks as defined below. Changing this forces a new resource to be created. + EBSConfig []InstanceGroupEBSConfigInitParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // optimized. Changing this forces a new resource to be created. + EBSOptimized *bool `json:"ebsOptimized,omitempty" tf:"ebs_optimized,omitempty"` + + // target number of instances for the instance group. defaults to 0. + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // The EC2 instance type for all instances in the instance group. Changing this forces a new resource to be created. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Human friendly name given to the instance group. Changing this forces a new resource to be created. + Name *string `json:"name,omitempty" tf:"name,omitempty"` +} + +type InstanceGroupObservation struct { + + // The autoscaling policy document. This is a JSON formatted string. See EMR Auto Scaling + AutoscalingPolicy *string `json:"autoscalingPolicy,omitempty" tf:"autoscaling_policy,omitempty"` + + // If set, the bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // ID of the EMR Cluster to attach to. Changing this forces a new resource to be created. + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // A JSON string for supplying list of configurations specific to the EMR instance group. Note that this can only be changed when using EMR release 5.21 or later. + ConfigurationsJSON *string `json:"configurationsJson,omitempty" tf:"configurations_json,omitempty"` + + // One or more ebs_config blocks as defined below. Changing this forces a new resource to be created. + EBSConfig []InstanceGroupEBSConfigObservation `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // optimized. Changing this forces a new resource to be created. + EBSOptimized *bool `json:"ebsOptimized,omitempty" tf:"ebs_optimized,omitempty"` + + // The EMR Instance ID + ID *string `json:"id,omitempty" tf:"id,omitempty"` + + // target number of instances for the instance group. defaults to 0. + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // The EC2 instance type for all instances in the instance group. Changing this forces a new resource to be created. + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Human friendly name given to the instance group. Changing this forces a new resource to be created. + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // The number of instances currently running in this instance group. + RunningInstanceCount *float64 `json:"runningInstanceCount,omitempty" tf:"running_instance_count,omitempty"` + + // The current status of the instance group. + Status *string `json:"status,omitempty" tf:"status,omitempty"` +} + +type InstanceGroupParameters struct { + + // The autoscaling policy document. This is a JSON formatted string. See EMR Auto Scaling + // +kubebuilder:validation:Optional + AutoscalingPolicy *string `json:"autoscalingPolicy,omitempty" tf:"autoscaling_policy,omitempty"` + + // If set, the bid price for each EC2 instance in the instance group, expressed in USD. By setting this attribute, the instance group is being declared as a Spot Instance, and will implicitly create a Spot request. Leave this blank to use On-Demand Instances. + // +kubebuilder:validation:Optional + BidPrice *string `json:"bidPrice,omitempty" tf:"bid_price,omitempty"` + + // ID of the EMR Cluster to attach to. Changing this forces a new resource to be created. + // +crossplane:generate:reference:type=github.com/upbound/provider-aws/apis/emr/v1beta1.Cluster + // +crossplane:generate:reference:extractor=github.com/crossplane/upjet/pkg/resource.ExtractResourceID() + // +kubebuilder:validation:Optional + ClusterID *string `json:"clusterId,omitempty" tf:"cluster_id,omitempty"` + + // Reference to a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDRef *v1.Reference `json:"clusterIdRef,omitempty" tf:"-"` + + // Selector for a Cluster in emr to populate clusterId. + // +kubebuilder:validation:Optional + ClusterIDSelector *v1.Selector `json:"clusterIdSelector,omitempty" tf:"-"` + + // A JSON string for supplying list of configurations specific to the EMR instance group. Note that this can only be changed when using EMR release 5.21 or later. + // +kubebuilder:validation:Optional + ConfigurationsJSON *string `json:"configurationsJson,omitempty" tf:"configurations_json,omitempty"` + + // One or more ebs_config blocks as defined below. Changing this forces a new resource to be created. + // +kubebuilder:validation:Optional + EBSConfig []InstanceGroupEBSConfigParameters `json:"ebsConfig,omitempty" tf:"ebs_config,omitempty"` + + // optimized. Changing this forces a new resource to be created. + // +kubebuilder:validation:Optional + EBSOptimized *bool `json:"ebsOptimized,omitempty" tf:"ebs_optimized,omitempty"` + + // target number of instances for the instance group. defaults to 0. + // +kubebuilder:validation:Optional + InstanceCount *float64 `json:"instanceCount,omitempty" tf:"instance_count,omitempty"` + + // The EC2 instance type for all instances in the instance group. Changing this forces a new resource to be created. + // +kubebuilder:validation:Optional + InstanceType *string `json:"instanceType,omitempty" tf:"instance_type,omitempty"` + + // Human friendly name given to the instance group. Changing this forces a new resource to be created. + // +kubebuilder:validation:Optional + Name *string `json:"name,omitempty" tf:"name,omitempty"` + + // Region is the region you'd like your resource to be created in. + // +upjet:crd:field:TFTag=- + // +kubebuilder:validation:Required + Region *string `json:"region" tf:"-"` +} + +// InstanceGroupSpec defines the desired state of InstanceGroup +type InstanceGroupSpec struct { + v1.ResourceSpec `json:",inline"` + ForProvider InstanceGroupParameters `json:"forProvider"` + // THIS IS A BETA FIELD. It will be honored + // unless the Management Policies feature flag is disabled. + // InitProvider holds the same fields as ForProvider, with the exception + // of Identifier and other resource reference fields. The fields that are + // in InitProvider are merged into ForProvider when the resource is created. + // The same fields are also added to the terraform ignore_changes hook, to + // avoid updating them after creation. This is useful for fields that are + // required on creation, but we do not desire to update them after creation, + // for example because of an external controller is managing them, like an + // autoscaler. + InitProvider InstanceGroupInitParameters `json:"initProvider,omitempty"` +} + +// InstanceGroupStatus defines the observed state of InstanceGroup. +type InstanceGroupStatus struct { + v1.ResourceStatus `json:",inline"` + AtProvider InstanceGroupObservation `json:"atProvider,omitempty"` +} + +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +kubebuilder:storageversion + +// InstanceGroup is the Schema for the InstanceGroups API. Provides an Elastic MapReduce Cluster Instance Group +// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status" +// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status" +// +kubebuilder:printcolumn:name="EXTERNAL-NAME",type="string",JSONPath=".metadata.annotations.crossplane\\.io/external-name" +// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp" +// +kubebuilder:resource:scope=Cluster,categories={crossplane,managed,aws} +type InstanceGroup struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +kubebuilder:validation:XValidation:rule="!('*' in self.managementPolicies || 'Create' in self.managementPolicies || 'Update' in self.managementPolicies) || has(self.forProvider.instanceType) || (has(self.initProvider) && has(self.initProvider.instanceType))",message="spec.forProvider.instanceType is a required parameter" + Spec InstanceGroupSpec `json:"spec"` + Status InstanceGroupStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// InstanceGroupList contains a list of InstanceGroups +type InstanceGroupList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []InstanceGroup `json:"items"` +} + +// Repository type metadata. +var ( + InstanceGroup_Kind = "InstanceGroup" + InstanceGroup_GroupKind = schema.GroupKind{Group: CRDGroup, Kind: InstanceGroup_Kind}.String() + InstanceGroup_KindAPIVersion = InstanceGroup_Kind + "." + CRDGroupVersion.String() + InstanceGroup_GroupVersionKind = CRDGroupVersion.WithKind(InstanceGroup_Kind) +) + +func init() { + SchemeBuilder.Register(&InstanceGroup{}, &InstanceGroupList{}) +} diff --git a/build b/build index d3155548bf..231258db28 160000 --- a/build +++ b/build @@ -1 +1 @@ -Subproject commit d3155548bfab68fc8bea64c5526642b7b565ae33 +Subproject commit 231258db281237379d8ec0c6e4af9d7c1ae5cc4a diff --git a/config/emr/config.go b/config/emr/config.go new file mode 100644 index 0000000000..088853785c --- /dev/null +++ b/config/emr/config.go @@ -0,0 +1,27 @@ +package emr + +import "github.com/crossplane/upjet/pkg/config" + +func Configure(p *config.Provider) { + p.AddResourceConfigurator("aws_emr_cluster", func(r *config.Resource) { + r.References["ec2_attributes.additional_master_security_groups"] = config.Reference{ + TerraformName: "aws_security_group", + } + r.References["ec2_attributes.additional_slave_security_groups"] = config.Reference{ + TerraformName: "aws_security_group", + } + r.References["ec2_attributes.key_name"] = config.Reference{ + TerraformName: "aws_key_pair", + } + r.References["log_uri"] = config.Reference{ + TerraformName: "aws_s3_bucket", + } + r.LateInitializer = config.LateInitializer{ + IgnoredFields: []string{ + "master_instance_fleet", // Cannot be specified with master_instance_group + }, + } + config.MoveToStatus(r.TerraformResource, "master_instance_fleet") + + }) +} diff --git a/config/externalname.go b/config/externalname.go index d01dada3f2..47c104cdc4 100644 --- a/config/externalname.go +++ b/config/externalname.go @@ -1246,6 +1246,15 @@ var TerraformPluginSDKExternalNameConfigs = map[string]config.ExternalName{ // // EMR Security Configurations can be imported using the name "aws_emr_security_configuration": config.NameAsIdentifier, + // + // EMR Cluster can be imported using the id + "aws_emr_cluster": config.IdentifierFromProvider, + // EMR Instance Fleet can be imported with the EMR Cluster identifier and Instance Fleet identifier separated by a forward slash (/) + // j-123456ABCDEF/if-15EK4O09RZLNR + "aws_emr_instance_fleet": config.IdentifierFromProvider, + // EMR task instance group can be imported using their EMR Cluster id and Instance Group id separated by a forward-slash / + // j-123456ABCDEF/ig-15EK4O09RZLNR + "aws_emr_instance_group": config.IdentifierFromProvider, // emrserverless // diff --git a/config/externalnamenottested.go b/config/externalnamenottested.go index 64c58fafdf..0bec30bcbe 100644 --- a/config/externalnamenottested.go +++ b/config/externalnamenottested.go @@ -259,14 +259,6 @@ var ExternalNameNotTestedConfigs = map[string]config.ExternalName{ // emr // - // EMR clusters can be imported using the id - "aws_emr_cluster": config.IdentifierFromProvider, - // EMR Instance Fleet can be imported with the EMR Cluster identifier and Instance Fleet identifier separated by a forward slash (/) - // j-123456ABCDEF/if-15EK4O09RZLNR - "aws_emr_instance_fleet": config.IdentifierFromProvider, - // EMR task instance group can be imported using their EMR Cluster id and Instance Group id separated by a forward-slash / - // j-123456ABCDEF/ig-15EK4O09RZLNR - "aws_emr_instance_group": config.IdentifierFromProvider, // EMR Managed Scaling Policies can be imported via the EMR Cluster identifier "aws_emr_managed_scaling_policy": FormattedIdentifierFromProvider("", "cluster_id"), // EMR studios can be imported using the id diff --git a/config/generated.lst b/config/generated.lst index 08e9a9e0c0..4e9a307e40 100644 --- a/config/generated.lst +++ b/config/generated.lst @@ -395,6 +395,9 @@ "aws_elastictranscoder_preset", "aws_elb", "aws_elb_attachment", +"aws_emr_cluster", +"aws_emr_instance_fleet", +"aws_emr_instance_group", "aws_emr_security_configuration", "aws_emrserverless_application", "aws_evidently_feature", diff --git a/config/provider.go b/config/provider.go index 99d5720331..26cf7dd0d7 100644 --- a/config/provider.go +++ b/config/provider.go @@ -45,6 +45,7 @@ import ( "github.com/upbound/provider-aws/config/elasticache" "github.com/upbound/provider-aws/config/elb" "github.com/upbound/provider-aws/config/elbv2" + "github.com/upbound/provider-aws/config/emr" "github.com/upbound/provider-aws/config/firehose" "github.com/upbound/provider-aws/config/fsx" "github.com/upbound/provider-aws/config/gamelift" @@ -132,6 +133,7 @@ func init() { ProviderConfiguration.AddConfig(elasticache.Configure) ProviderConfiguration.AddConfig(elb.Configure) ProviderConfiguration.AddConfig(elbv2.Configure) + ProviderConfiguration.AddConfig(emr.Configure) ProviderConfiguration.AddConfig(firehose.Configure) ProviderConfiguration.AddConfig(gamelift.Configure) ProviderConfiguration.AddConfig(globalaccelerator.Configure) diff --git a/examples-generated/emr/v1beta1/cluster.yaml b/examples-generated/emr/v1beta1/cluster.yaml new file mode 100644 index 0000000000..94d76b4c0e --- /dev/null +++ b/examples-generated/emr/v1beta1/cluster.yaml @@ -0,0 +1,119 @@ +apiVersion: emr.aws.upbound.io/v1beta1 +kind: Cluster +metadata: + annotations: + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: cluster + name: cluster +spec: + forProvider: + additionalInfo: | + { + "instanceAwsClientConfiguration": { + "proxyPort": 8099, + "proxyHost": "myproxy.example.com" + } + } + applications: + - Spark + bootstrapAction: + - args: + - instance.isMaster=true + - echo running on master node + name: runif + path: s3://elasticmapreduce/bootstrap-actions/run-if + configurationsJson: |2 + [ + { + "Classification": "hadoop-env", + "Configurations": [ + { + "Classification": "export", + "Properties": { + "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" + } + } + ], + "Properties": {} + }, + { + "Classification": "spark-env", + "Configurations": [ + { + "Classification": "export", + "Properties": { + "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" + } + } + ], + "Properties": {} + } + ] + coreInstanceGroup: + - autoscalingPolicy: | + { + "Constraints": { + "MinCapacity": 1, + "MaxCapacity": 2 + }, + "Rules": [ + { + "Name": "ScaleOutMemoryPercentage", + "Description": "Scale out if YARNMemoryAvailablePercentage is less than 15", + "Action": { + "SimpleScalingPolicyConfiguration": { + "AdjustmentType": "CHANGE_IN_CAPACITY", + "ScalingAdjustment": 1, + "CoolDown": 300 + } + }, + "Trigger": { + "CloudWatchAlarmDefinition": { + "ComparisonOperator": "LESS_THAN", + "EvaluationPeriods": 1, + "MetricName": "YARNMemoryAvailablePercentage", + "Namespace": "AWS/ElasticMapReduce", + "Period": 300, + "Statistic": "AVERAGE", + "Threshold": 15.0, + "Unit": "PERCENT" + } + } + } + ] + } + bidPrice: "0.30" + ebsConfig: + - size: "40" + type: gp2 + volumesPerInstance: 1 + instanceCount: 1 + instanceType: c4.large + ebsRootVolumeSize: 100 + ec2Attributes: + - emrManagedMasterSecurityGroupSelector: + matchLabels: + testing.upbound.io/example-name: sg + emrManagedSlaveSecurityGroupSelector: + matchLabels: + testing.upbound.io/example-name: sg + instanceProfileSelector: + matchLabels: + testing.upbound.io/example-name: emr_profile + subnetIdSelector: + matchLabels: + testing.upbound.io/example-name: main + keepJobFlowAliveWhenNoSteps: true + masterInstanceGroup: + - instanceType: m4.large + name: emr-test-arn + region: us-west-1 + releaseLabel: emr-4.6.0 + serviceRoleSelector: + matchLabels: + testing.upbound.io/example-name: iam_emr_service_role + tags: + env: env + role: rolename + terminationProtection: false diff --git a/examples-generated/emr/v1beta1/instancefleet.yaml b/examples-generated/emr/v1beta1/instancefleet.yaml new file mode 100644 index 0000000000..b291b9dfab --- /dev/null +++ b/examples-generated/emr/v1beta1/instancefleet.yaml @@ -0,0 +1,38 @@ +apiVersion: emr.aws.upbound.io/v1beta1 +kind: InstanceFleet +metadata: + annotations: + meta.upbound.io/example-id: emr/v1beta1/instancefleet + labels: + testing.upbound.io/example-name: task + name: task +spec: + forProvider: + clusterIdSelector: + matchLabels: + testing.upbound.io/example-name: cluster + instanceTypeConfigs: + - bidPriceAsPercentageOfOnDemandPrice: 100 + ebsConfig: + - size: 100 + type: gp2 + volumesPerInstance: 1 + instanceType: m4.xlarge + weightedCapacity: 1 + - bidPriceAsPercentageOfOnDemandPrice: 100 + ebsConfig: + - size: 100 + type: gp2 + volumesPerInstance: 1 + instanceType: m4.2xlarge + weightedCapacity: 2 + launchSpecifications: + - spotSpecification: + - allocationStrategy: capacity-optimized + blockDurationMinutes: 0 + timeoutAction: TERMINATE_CLUSTER + timeoutDurationMinutes: 10 + name: task fleet + region: us-west-1 + targetOnDemandCapacity: 1 + targetSpotCapacity: 1 diff --git a/examples-generated/emr/v1beta1/instancegroup.yaml b/examples-generated/emr/v1beta1/instancegroup.yaml new file mode 100644 index 0000000000..b13c13b534 --- /dev/null +++ b/examples-generated/emr/v1beta1/instancegroup.yaml @@ -0,0 +1,17 @@ +apiVersion: emr.aws.upbound.io/v1beta1 +kind: InstanceGroup +metadata: + annotations: + meta.upbound.io/example-id: emr/v1beta1/instancegroup + labels: + testing.upbound.io/example-name: task + name: task +spec: + forProvider: + clusterIdSelector: + matchLabels: + testing.upbound.io/example-name: tf-test-cluster + instanceCount: 1 + instanceType: m5.xlarge + name: my little instance group + region: us-west-1 diff --git a/examples/emr/v1beta1/cluster.yaml b/examples/emr/v1beta1/cluster.yaml new file mode 100644 index 0000000000..9a0823dcb5 --- /dev/null +++ b/examples/emr/v1beta1/cluster.yaml @@ -0,0 +1,407 @@ +apiVersion: emr.aws.upbound.io/v1beta1 +kind: Cluster +metadata: + annotations: + meta.upbound.io/example-id: emr/v1beta1/cluster + uptest.upbound.io/timeout: "3600" + labels: + testing.upbound.io/example-name: emr_cluster_example + name: emr-cluster-example +spec: + forProvider: + name: emr-cluster-example + releaseLabel: emr-4.6.0 + applications: + - Spark + ec2Attributes: + subnetIdSelector: + matchLabels: + testing.upbound.io/example-name: example_subnet + emrManagedMasterSecurityGroupSelector: + matchLabels: + testing.upbound.io/example-name: example_security_group + emrManagedSlaveSecurityGroupSelector: + matchLabels: + testing.upbound.io/example-name: example_security_group + instanceProfileSelector: + matchLabels: + testing.upbound.io/example-name: instance_profile_example + masterInstanceGroup: + instanceType: m1.medium + coreInstanceGroup: + instanceCount: 1 + instanceType: m1.medium + terminationProtection: false + configurationsJson: | + [ + { + "Classification": "hadoop-env", + "Configurations": [ + { + "Classification": "export", + "Properties": { + "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" + } + } + ], + "Properties": {} + }, + { + "Classification": "spark-env", + "Configurations": [ + { + "Classification": "export", + "Properties": { + "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" + } + } + ], + "Properties": {} + } + ] + serviceRoleSelector: + matchLabels: + testing.upbound.io/example-name: example_service_role + tags: + for-use-with-amazon-emr-managed-policies: "true" + region: us-west-1 +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: SecurityGroup +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_security_group + name: emr-security-group +spec: + forProvider: + description: Allow inbound traffic + vpcIdSelector: + matchLabels: + testing.upbound.io/example-name: example_vpc + tags: + for-use-with-amazon-emr-managed-policies: "true" + region: us-west-1 + revokeRulesOnDelete: true +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: SecurityGroupIngressRule +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_ingress_rule + name: example-ingress-rule +spec: + forProvider: + cidrIpv4: 10.0.0.0/16 + ipProtocol: "-1" + region: us-west-1 + securityGroupIdSelector: + matchLabels: + testing.upbound.io/example-name: example_security_group +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: SecurityGroupEgressRule +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_egress_rule + name: example-egress-rule +spec: + forProvider: + cidrIpv4: 0.0.0.0/0 + ipProtocol: "-1" + region: us-west-1 + securityGroupIdSelector: + matchLabels: + testing.upbound.io/example-name: example_security_group +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: VPC +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_vpc + name: vpc-emr-example +spec: + forProvider: + region: us-west-1 + cidrBlock: 10.0.0.0/16 + enableDnsHostnames: true +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: Subnet +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_subnet + name: example-subnet +spec: + forProvider: + region: us-west-1 + availabilityZone: us-west-1b + vpcIdRef: + name: vpc-emr-example + cidrBlock: 10.0.0.0/20 +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: InternetGateway +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_internet_gateway + name: example-internet-gateway +spec: + forProvider: + vpcIdSelector: + matchLabels: + testing.upbound.io/example-name: example_vpc + region: us-west-1 +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: Route +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example + name: route +spec: + forProvider: + region: us-west-1 + destinationCidrBlock: 0.0.0.0/0 + gatewayIdSelector: + matchLabels: + testing.upbound.io/example-name: example_internet_gateway + routeTableIdSelector: + matchLabels: + testing.upbound.io/example-name: example_rtb +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: RouteTable +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_rtb + name: example-rtb +spec: + forProvider: + region: us-west-1 + vpcIdSelector: + matchLabels: + testing.upbound.io/example-name: example_vpc +--- +apiVersion: ec2.aws.upbound.io/v1beta1 +kind: RouteTableAssociation +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_rta + name: example-rta +spec: + forProvider: + region: us-west-1 + routeTableIdSelector: + matchLabels: + testing.upbound.io/example-name: example_rtb + subnetIdSelector: + matchLabels: + testing.upbound.io/example-name: example_subnet +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: Role +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_service_role + name: example-service-role +spec: + forProvider: + assumeRolePolicy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "elasticmapreduce.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + } +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: RolePolicyAttachment +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_policy_attachment + name: example-policy-attachment +spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/service-role/AmazonEMRServicePolicy_v2 + roleSelector: + matchLabels: + testing.upbound.io/example-name: example_service_role +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: RolePolicyAttachment +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_policy_attachment + name: example-policy-attachment2 +spec: + forProvider: + policyArnSelector: + matchLabels: + testing.upbound.io/example-name: example_service_policy + roleSelector: + matchLabels: + testing.upbound.io/example-name: example_service_role +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: Policy +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_service_policy + name: example-service-policy-custom +spec: + forProvider: + policy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "CreateInNetwork", + "Effect": "Allow", + "Action": [ + "ec2:CreateNetworkInterface", + "ec2:RunInstances", + "ec2:CreateFleet", + "ec2:CreateLaunchTemplate", + "ec2:CreateLaunchTemplateVersion", + "ec2:DeleteLaunchTemplate", + "ec2:DescribeLaunchTemplates" + ], + "Resource": "*" + }, + { + "Sid": "ManageSecurityGroups", + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupEgress", + "ec2:AuthorizeSecurityGroupIngress", + "ec2:RevokeSecurityGroupEgress", + "ec2:RevokeSecurityGroupIngress" + ], + "Resource": [ + "arn:aws:ec2:*:*:security-group/*" + ] + }, + { + "Sid": "CreateDefaultSecurityGroupInVPC", + "Effect": "Allow", + "Action": [ + "ec2:CreateSecurityGroup" + ], + "Resource": [ + "arn:aws:ec2:*:*:vpc/*" + ] + }, + { + "Sid": "PassRoleForEC2", + "Effect": "Allow", + "Action": "iam:PassRole", + "Resource": "*", + "Condition": { + "StringLike": { + "iam:PassedToService": "ec2.amazonaws.com" + } + } + } + ] + } +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: InstanceProfile +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: instance_profile_example + name: instance-profile-role +spec: + forProvider: + roleSelector: + matchLabels: + testing.upbound.io/example-name: instance_profile_role +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: Role +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: instance_profile_role + name: instance-profile-role +spec: + forProvider: + assumeRolePolicy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "ec2.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + } +--- +apiVersion: iam.aws.upbound.io/v1beta1 +kind: RolePolicyAttachment +metadata: + annotations: + uptest.upbound.io/disable-import: "true" + meta.upbound.io/example-id: emr/v1beta1/cluster + labels: + testing.upbound.io/example-name: example_policy_attachment2 + name: example-policy-attachment3 +spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEMRFullAccessPolicy_v2 + roleSelector: + matchLabels: + testing.upbound.io/example-name: instance_profile_role diff --git a/examples/emr/v1beta1/instancefleet.yaml b/examples/emr/v1beta1/instancefleet.yaml new file mode 100644 index 0000000000..341d5593b1 --- /dev/null +++ b/examples/emr/v1beta1/instancefleet.yaml @@ -0,0 +1,37 @@ +apiVersion: emr.aws.upbound.io/v1beta1 +kind: InstanceFleet +metadata: + annotations: + upjet.upbound.io/manual-intervention: "Instancefleet for EMR needs a bootable EMR cluster" + meta.upbound.io/example-id: emr/v1beta1/instancefleet + labels: + testing.upbound.io/example-name: task + name: task-fleet +spec: + forProvider: + clusterIdSelector: emr_cluster_example + instanceTypeConfigs: + - bidPriceAsPercentageOfOnDemandPrice: 100 + ebsConfig: + - size: 100 + type: gp2 + volumesPerInstance: 1 + instanceType: m4.xlarge + weightedCapacity: 1 + - bidPriceAsPercentageOfOnDemandPrice: 100 + ebsConfig: + - size: 100 + type: gp2 + volumesPerInstance: 1 + instanceType: m4.2xlarge + weightedCapacity: 2 + launchSpecifications: + spotSpecification: + - allocationStrategy: capacity-optimized + blockDurationMinutes: 0 + timeoutAction: TERMINATE_CLUSTER + timeoutDurationMinutes: 10 + name: task-fleet + region: us-east-1 + targetOnDemandCapacity: 1 + targetSpotCapacity: 1 diff --git a/examples/emr/v1beta1/instancegroup.yaml b/examples/emr/v1beta1/instancegroup.yaml new file mode 100644 index 0000000000..1926b8e995 --- /dev/null +++ b/examples/emr/v1beta1/instancegroup.yaml @@ -0,0 +1,17 @@ +apiVersion: emr.aws.upbound.io/v1beta1 +kind: InstanceGroup +metadata: + annotations: + upjet.upbound.io/manual-intervention: "InstanceGroup for EMR needs a bootable EMR cluster" + meta.upbound.io/example-id: emr/v1beta1/instancegroup + labels: + testing.upbound.io/example-name: task + name: task +spec: + forProvider: + clusterIdSelector: + matchLabels: emr_cluster_example + instanceCount: 1 + instanceType: m5.xlarge + name: my little instance group + region: us-west-1 diff --git a/internal/controller/emr/cluster/zz_controller.go b/internal/controller/emr/cluster/zz_controller.go new file mode 100755 index 0000000000..7bbac55063 --- /dev/null +++ b/internal/controller/emr/cluster/zz_controller.go @@ -0,0 +1,94 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package cluster + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/metrics" + "github.com/pkg/errors" + ctrl "sigs.k8s.io/controller-runtime" + + v1beta1 "github.com/upbound/provider-aws/apis/emr/v1beta1" + features "github.com/upbound/provider-aws/internal/features" +) + +// Setup adds a controller that reconciles Cluster managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1beta1.Cluster_GroupVersionKind.String()) + var initializers managed.InitializerChain + for _, i := range o.Provider.Resources["aws_emr_cluster"].InitializerFns { + initializers = append(initializers, i(mgr.GetClient())) + } + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1beta1.Cluster_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1beta1.Cluster_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter( + tjcontroller.NewTerraformPluginSDKAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["aws_emr_cluster"], + tjcontroller.WithTerraformPluginSDKAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginSDKAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginSDKAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginSDKAsyncMetricRecorder(metrics.NewMetricRecorder(v1beta1.Cluster_GroupVersionKind, mgr, o.PollInterval)), + tjcontroller.WithTerraformPluginSDKAsyncManagementPolicies(o.Features.Enabled(features.EnableBetaManagementPolicies)))), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1beta1.Cluster + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1beta1.Cluster{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1beta1.Cluster") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1beta1.ClusterList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1beta1.ClusterList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1beta1.Cluster_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1beta1.Cluster{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/emr/instancefleet/zz_controller.go b/internal/controller/emr/instancefleet/zz_controller.go new file mode 100755 index 0000000000..ffdd80e853 --- /dev/null +++ b/internal/controller/emr/instancefleet/zz_controller.go @@ -0,0 +1,91 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package instancefleet + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/metrics" + "github.com/pkg/errors" + ctrl "sigs.k8s.io/controller-runtime" + + v1beta1 "github.com/upbound/provider-aws/apis/emr/v1beta1" + features "github.com/upbound/provider-aws/internal/features" +) + +// Setup adds a controller that reconciles InstanceFleet managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1beta1.InstanceFleet_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1beta1.InstanceFleet_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1beta1.InstanceFleet_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter( + tjcontroller.NewTerraformPluginSDKAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["aws_emr_instance_fleet"], + tjcontroller.WithTerraformPluginSDKAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginSDKAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginSDKAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginSDKAsyncMetricRecorder(metrics.NewMetricRecorder(v1beta1.InstanceFleet_GroupVersionKind, mgr, o.PollInterval)), + tjcontroller.WithTerraformPluginSDKAsyncManagementPolicies(o.Features.Enabled(features.EnableBetaManagementPolicies)))), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1beta1.InstanceFleet + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1beta1.InstanceFleet{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1beta1.InstanceFleet") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1beta1.InstanceFleetList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1beta1.InstanceFleetList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1beta1.InstanceFleet_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1beta1.InstanceFleet{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/emr/instancegroup/zz_controller.go b/internal/controller/emr/instancegroup/zz_controller.go new file mode 100755 index 0000000000..cdd30e1314 --- /dev/null +++ b/internal/controller/emr/instancegroup/zz_controller.go @@ -0,0 +1,91 @@ +// SPDX-FileCopyrightText: 2024 The Crossplane Authors +// +// SPDX-License-Identifier: Apache-2.0 + +// Code generated by upjet. DO NOT EDIT. + +package instancegroup + +import ( + "time" + + "github.com/crossplane/crossplane-runtime/pkg/connection" + "github.com/crossplane/crossplane-runtime/pkg/event" + "github.com/crossplane/crossplane-runtime/pkg/ratelimiter" + "github.com/crossplane/crossplane-runtime/pkg/reconciler/managed" + xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" + "github.com/crossplane/crossplane-runtime/pkg/statemetrics" + tjcontroller "github.com/crossplane/upjet/pkg/controller" + "github.com/crossplane/upjet/pkg/controller/handler" + "github.com/crossplane/upjet/pkg/metrics" + "github.com/pkg/errors" + ctrl "sigs.k8s.io/controller-runtime" + + v1beta1 "github.com/upbound/provider-aws/apis/emr/v1beta1" + features "github.com/upbound/provider-aws/internal/features" +) + +// Setup adds a controller that reconciles InstanceGroup managed resources. +func Setup(mgr ctrl.Manager, o tjcontroller.Options) error { + name := managed.ControllerName(v1beta1.InstanceGroup_GroupVersionKind.String()) + var initializers managed.InitializerChain + cps := []managed.ConnectionPublisher{managed.NewAPISecretPublisher(mgr.GetClient(), mgr.GetScheme())} + if o.SecretStoreConfigGVK != nil { + cps = append(cps, connection.NewDetailsManager(mgr.GetClient(), *o.SecretStoreConfigGVK, connection.WithTLSConfig(o.ESSOptions.TLSConfig))) + } + eventHandler := handler.NewEventHandler(handler.WithLogger(o.Logger.WithValues("gvk", v1beta1.InstanceGroup_GroupVersionKind))) + ac := tjcontroller.NewAPICallbacks(mgr, xpresource.ManagedKind(v1beta1.InstanceGroup_GroupVersionKind), tjcontroller.WithEventHandler(eventHandler), tjcontroller.WithStatusUpdates(false)) + opts := []managed.ReconcilerOption{ + managed.WithExternalConnecter( + tjcontroller.NewTerraformPluginSDKAsyncConnector(mgr.GetClient(), o.OperationTrackerStore, o.SetupFn, o.Provider.Resources["aws_emr_instance_group"], + tjcontroller.WithTerraformPluginSDKAsyncLogger(o.Logger), + tjcontroller.WithTerraformPluginSDKAsyncConnectorEventHandler(eventHandler), + tjcontroller.WithTerraformPluginSDKAsyncCallbackProvider(ac), + tjcontroller.WithTerraformPluginSDKAsyncMetricRecorder(metrics.NewMetricRecorder(v1beta1.InstanceGroup_GroupVersionKind, mgr, o.PollInterval)), + tjcontroller.WithTerraformPluginSDKAsyncManagementPolicies(o.Features.Enabled(features.EnableBetaManagementPolicies)))), + managed.WithLogger(o.Logger.WithValues("controller", name)), + managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))), + managed.WithFinalizer(tjcontroller.NewOperationTrackerFinalizer(o.OperationTrackerStore, xpresource.NewAPIFinalizer(mgr.GetClient(), managed.FinalizerName))), + managed.WithTimeout(3 * time.Minute), + managed.WithInitializers(initializers), + managed.WithConnectionPublishers(cps...), + managed.WithPollInterval(o.PollInterval), + } + if o.PollJitter != 0 { + opts = append(opts, managed.WithPollJitterHook(o.PollJitter)) + } + if o.Features.Enabled(features.EnableBetaManagementPolicies) { + opts = append(opts, managed.WithManagementPolicies()) + } + if o.MetricOptions != nil { + opts = append(opts, managed.WithMetricRecorder(o.MetricOptions.MRMetrics)) + } + + // register webhooks for the kind v1beta1.InstanceGroup + // if they're enabled. + if o.StartWebhooks { + if err := ctrl.NewWebhookManagedBy(mgr). + For(&v1beta1.InstanceGroup{}). + Complete(); err != nil { + return errors.Wrap(err, "cannot register webhook for the kind v1beta1.InstanceGroup") + } + } + + if o.MetricOptions != nil && o.MetricOptions.MRStateMetrics != nil { + stateMetricsRecorder := statemetrics.NewMRStateRecorder( + mgr.GetClient(), o.Logger, o.MetricOptions.MRStateMetrics, &v1beta1.InstanceGroupList{}, o.MetricOptions.PollStateMetricInterval, + ) + if err := mgr.Add(stateMetricsRecorder); err != nil { + return errors.Wrap(err, "cannot register MR state metrics recorder for kind v1beta1.InstanceGroupList") + } + } + + r := managed.NewReconciler(mgr, xpresource.ManagedKind(v1beta1.InstanceGroup_GroupVersionKind), opts...) + + return ctrl.NewControllerManagedBy(mgr). + Named(name). + WithOptions(o.ForControllerRuntime()). + WithEventFilter(xpresource.DesiredStateChanged()). + Watches(&v1beta1.InstanceGroup{}, eventHandler). + Complete(ratelimiter.NewReconciler(name, r, o.GlobalRateLimiter)) +} diff --git a/internal/controller/zz_emr_setup.go b/internal/controller/zz_emr_setup.go index 27191700a3..5e76a29934 100755 --- a/internal/controller/zz_emr_setup.go +++ b/internal/controller/zz_emr_setup.go @@ -9,6 +9,9 @@ import ( "github.com/crossplane/upjet/pkg/controller" + cluster "github.com/upbound/provider-aws/internal/controller/emr/cluster" + instancefleet "github.com/upbound/provider-aws/internal/controller/emr/instancefleet" + instancegroup "github.com/upbound/provider-aws/internal/controller/emr/instancegroup" securityconfiguration "github.com/upbound/provider-aws/internal/controller/emr/securityconfiguration" ) @@ -16,6 +19,9 @@ import ( // the supplied manager. func Setup_emr(mgr ctrl.Manager, o controller.Options) error { for _, setup := range []func(ctrl.Manager, controller.Options) error{ + cluster.Setup, + instancefleet.Setup, + instancegroup.Setup, securityconfiguration.Setup, } { if err := setup(mgr, o); err != nil { diff --git a/internal/controller/zz_monolith_setup.go b/internal/controller/zz_monolith_setup.go index c3b38d105b..74f817bac8 100755 --- a/internal/controller/zz_monolith_setup.go +++ b/internal/controller/zz_monolith_setup.go @@ -459,6 +459,9 @@ import ( lbtargetgroup "github.com/upbound/provider-aws/internal/controller/elbv2/lbtargetgroup" lbtargetgroupattachment "github.com/upbound/provider-aws/internal/controller/elbv2/lbtargetgroupattachment" lbtruststore "github.com/upbound/provider-aws/internal/controller/elbv2/lbtruststore" + clusteremr "github.com/upbound/provider-aws/internal/controller/emr/cluster" + instancefleet "github.com/upbound/provider-aws/internal/controller/emr/instancefleet" + instancegroup "github.com/upbound/provider-aws/internal/controller/emr/instancegroup" securityconfiguration "github.com/upbound/provider-aws/internal/controller/emr/securityconfiguration" applicationemrserverless "github.com/upbound/provider-aws/internal/controller/emrserverless/application" feature "github.com/upbound/provider-aws/internal/controller/evidently/feature" @@ -1425,6 +1428,9 @@ func Setup_monolith(mgr ctrl.Manager, o controller.Options) error { lbtargetgroup.Setup, lbtargetgroupattachment.Setup, lbtruststore.Setup, + clusteremr.Setup, + instancefleet.Setup, + instancegroup.Setup, securityconfiguration.Setup, applicationemrserverless.Setup, feature.Setup, diff --git a/package/crds/emr.aws.upbound.io_clusters.yaml b/package/crds/emr.aws.upbound.io_clusters.yaml new file mode 100644 index 0000000000..d59023da78 --- /dev/null +++ b/package/crds/emr.aws.upbound.io_clusters.yaml @@ -0,0 +1,3569 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: clusters.emr.aws.upbound.io +spec: + group: emr.aws.upbound.io + names: + categories: + - crossplane + - managed + - aws + kind: Cluster + listKind: ClusterList + plural: clusters + singular: cluster + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: Cluster is the Schema for the Clusters API. Provides an Elastic + MapReduce Cluster + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ClusterSpec defines the desired state of Cluster + properties: + deletionPolicy: + default: Delete + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + additionalInfo: + description: JSON string for selecting additional features such + as adding proxy information. + type: string + applications: + description: A case-insensitive list of applications for Amazon + EMR to install and configure when launching the cluster. For + a list of applications available for each Amazon EMR release + version, see the Amazon EMR Release Guide. + items: + type: string + type: array + x-kubernetes-list-type: set + autoTerminationPolicy: + description: An auto-termination policy for an Amazon EMR cluster. + An auto-termination policy defines the amount of idle time in + seconds after which a cluster automatically terminates. See + Auto Termination Policy Below. + properties: + idleTimeout: + description: Specifies the amount of idle time in seconds + after which the cluster automatically terminates. You can + specify a minimum of 60 seconds and a maximum of 604800 + seconds (seven days). + type: number + type: object + autoscalingRole: + description: IAM role for automatic scaling policies. The IAM + role provides permissions that the automatic scaling feature + requires to launch and terminate EC2 instances in an instance + group. + type: string + bootstrapAction: + description: Ordered list of bootstrap actions that will be run + before Hadoop is started on the cluster nodes. See below. + items: + properties: + args: + description: List of command line arguments to pass to the + bootstrap action script. + items: + type: string + type: array + name: + description: Name of the bootstrap action. + type: string + path: + description: Location of the script to run during a bootstrap + action. Can be either a location in Amazon S3 or on a + local file system. + type: string + type: object + type: array + configurations: + description: List of configurations supplied for the EMR cluster + you are creating. Supply a configuration object for applications + to override their default configuration. See AWS Documentation + for more information. + type: string + configurationsJson: + description: JSON string for supplying list of configurations + for the EMR cluster. + type: string + coreInstanceFleet: + description: Configuration block to use an Instance Fleet for + the core node type. Cannot be specified if any core_instance_group + configuration blocks are set. Detailed below. + properties: + instanceTypeConfigs: + description: Configuration block for instance fleet. + items: + properties: + bidPrice: + description: Bid price for each EC2 Spot instance type + as defined by instance_type. Expressed in USD. If + neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: Bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: Configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that + run on the cluster. List of configuration blocks. + items: + properties: + classification: + description: Classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties + that are set when the step runs. You can use + these properties to pass key value pairs to + your main function. + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes + attached to each instance in the instance group. Detailed + below. + items: + properties: + iops: + description: Number of I/O operations per second + (IOPS) that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + type: + description: Volume type. Valid options are gp3, + gp2, io1, io2, standard, st1 and sc1. See EBS + Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance + group (default is 1). + type: number + type: object + type: array + instanceType: + description: EC2 instance type, such as m4.xlarge. + type: string + weightedCapacity: + description: Number of units that a provisioned instance + of this type provides toward fulfilling the target + capacities defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification. + properties: + onDemandSpecification: + description: Configuration block for on demand instances + launch specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only + option is lowest-price (the default), which launches + the lowest price first. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + Spot instance fleets. Valid values include capacity-optimized, + diversified, lowest-price, price-capacity-optimized. + See the AWS documentation for details on each + strategy type. + type: string + blockDurationMinutes: + description: Defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the + defined duration expires, and defined duration + pricing for Spot instances applies. Valid values + are 60, 120, 180, 240, 300, or 360. The duration + period starts as soon as a Spot instance receives + its instance ID. At the end of the duration, Amazon + EC2 marks the Spot instance for termination and + provides a Spot instance termination notice, which + gives the instance a two-minute warning before + it terminates. + type: number + timeoutAction: + description: Action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances + could not be provisioned within the Spot provisioning + timeout. Valid values are TERMINATE_CLUSTER and + SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies + that if no Spot instances are available, On-Demand + Instances should be provisioned to fulfill any + remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: Spot provisioning timeout period in + minutes. If Spot instances are not provisioned + within this time period, the TimeOutAction is + taken. Minimum value is 5 and maximum value is + 1440. The timeout applies only during initial + provisioning, when the cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + targetOnDemandCapacity: + description: The target capacity of On-Demand units for the + instance fleet, which determines how many On-Demand instances + to provision. + type: number + targetSpotCapacity: + description: Target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + type: object + coreInstanceGroup: + description: Configuration block to use an Instance Group for + the core node type. + properties: + autoscalingPolicy: + description: String containing the EMR Auto Scaling Policy + JSON. + type: string + bidPrice: + description: Bid price for each EC2 instance in the instance + group, expressed in USD. By setting this attribute, the + instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank + to use On-Demand Instances. + type: string + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: Number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + throughput: + description: The throughput, in mebibyte per second + (MiB/s). + type: number + type: + description: Volume type. Valid options are gp3, gp2, + io1, io2, standard, st1 and sc1. See EBS Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1). + type: number + type: object + type: array + instanceCount: + description: Target number of instances for the instance group. + Must be at least 1. Defaults to 1. + type: number + instanceType: + description: EC2 instance type for all instances in the instance + group. + type: string + name: + description: Friendly name given to the instance group. + type: string + type: object + customAmiId: + description: Custom Amazon Linux AMI for the cluster (instead + of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 + and later. + type: string + ebsRootVolumeSize: + description: Size in GiB of the EBS root device volume of the + Linux AMI that is used for each EC2 instance. Available in Amazon + EMR version 4.x and later. + type: number + ec2Attributes: + description: Attributes for the EC2 instances running the job + flow. See below. + properties: + additionalMasterSecurityGroups: + description: String containing a comma separated list of additional + Amazon EC2 security group IDs for the master node. + type: string + additionalMasterSecurityGroupsRef: + description: Reference to a SecurityGroup in ec2 to populate + additionalMasterSecurityGroups. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + additionalMasterSecurityGroupsSelector: + description: Selector for a SecurityGroup in ec2 to populate + additionalMasterSecurityGroups. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + additionalSlaveSecurityGroups: + description: String containing a comma separated list of additional + Amazon EC2 security group IDs for the slave nodes as a comma + separated string. + type: string + additionalSlaveSecurityGroupsRef: + description: Reference to a SecurityGroup in ec2 to populate + additionalSlaveSecurityGroups. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + additionalSlaveSecurityGroupsSelector: + description: Selector for a SecurityGroup in ec2 to populate + additionalSlaveSecurityGroups. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + emrManagedMasterSecurityGroup: + description: Identifier of the Amazon EC2 EMR-Managed security + group for the master node. + type: string + emrManagedMasterSecurityGroupRef: + description: Reference to a SecurityGroup in ec2 to populate + emrManagedMasterSecurityGroup. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + emrManagedMasterSecurityGroupSelector: + description: Selector for a SecurityGroup in ec2 to populate + emrManagedMasterSecurityGroup. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + emrManagedSlaveSecurityGroup: + description: Identifier of the Amazon EC2 EMR-Managed security + group for the slave nodes. + type: string + emrManagedSlaveSecurityGroupRef: + description: Reference to a SecurityGroup in ec2 to populate + emrManagedSlaveSecurityGroup. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + emrManagedSlaveSecurityGroupSelector: + description: Selector for a SecurityGroup in ec2 to populate + emrManagedSlaveSecurityGroup. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + instanceProfile: + description: Instance Profile for EC2 instances of the cluster + assume this role. + type: string + instanceProfileRef: + description: Reference to a InstanceProfile in iam to populate + instanceProfile. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + instanceProfileSelector: + description: Selector for a InstanceProfile in iam to populate + instanceProfile. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + keyName: + description: Amazon EC2 key pair that can be used to ssh to + the master node as the user called hadoop. + type: string + keyNameRef: + description: Reference to a KeyPair in ec2 to populate keyName. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + keyNameSelector: + description: Selector for a KeyPair in ec2 to populate keyName. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + serviceAccessSecurityGroup: + description: Identifier of the Amazon EC2 service-access security + group - required when the cluster runs on a private subnet. + type: string + subnetId: + description: VPC subnet id where you want the job flow to + launch. Cannot specify the cc1.4xlarge instance type for + nodes of a job flow launched in an Amazon VPC. + type: string + subnetIdRef: + description: Reference to a Subnet in ec2 to populate subnetId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + subnetIdSelector: + description: Selector for a Subnet in ec2 to populate subnetId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + subnetIds: + description: List of VPC subnet id-s where you want the job + flow to launch. Amazon EMR identifies the best Availability + Zone to launch instances according to your fleet specifications. + items: + type: string + type: array + x-kubernetes-list-type: set + type: object + keepJobFlowAliveWhenNoSteps: + description: Switch on/off run cluster with no steps or when all + steps are complete (default is on) + type: boolean + kerberosAttributes: + description: Kerberos configuration for the cluster. See below. + properties: + adDomainJoinPasswordSecretRef: + description: Active Directory password for ad_domain_join_user. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + adDomainJoinUser: + description: Required only when establishing a cross-realm + trust with an Active Directory domain. A user with sufficient + privileges to join resources to the domain. + type: string + crossRealmTrustPrincipalPasswordSecretRef: + description: Required only when establishing a cross-realm + trust with a KDC in a different realm. The cross-realm principal + password, which must be identical across realms. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + kdcAdminPasswordSecretRef: + description: Password used within the cluster for the kadmin + service on the cluster-dedicated KDC, which maintains Kerberos + principals, password policies, and keytabs for the cluster. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + realm: + description: Name of the Kerberos realm to which all nodes + in a cluster belong. For example, EC2.INTERNAL + type: string + type: object + listStepsStates: + description: List of step states used to filter returned steps + items: + type: string + type: array + x-kubernetes-list-type: set + logEncryptionKmsKeyId: + description: AWS KMS customer master key (CMK) key ID or arn used + for encrypting log files. This attribute is only available with + EMR version 5.30.0 and later, excluding EMR 6.0.0. + type: string + logUri: + description: S3 bucket to write the log files of the job flow. + If a value is not provided, logs are not created. + type: string + logUriRef: + description: Reference to a Bucket in s3 to populate logUri. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + logUriSelector: + description: Selector for a Bucket in s3 to populate logUri. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + masterInstanceGroup: + description: Configuration block to use an Instance Group for + the master node type. + properties: + bidPrice: + description: Bid price for each EC2 instance in the instance + group, expressed in USD. By setting this attribute, the + instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank + to use On-Demand Instances. + type: string + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: Number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + throughput: + description: The throughput, in mebibyte per second + (MiB/s). + type: number + type: + description: Volume type. Valid options are gp3, gp2, + io1, io2, standard, st1 and sc1. See EBS Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1). + type: number + type: object + type: array + instanceCount: + description: Target number of instances for the instance group. + Must be 1 or 3. Defaults to 1. Launching with multiple master + nodes is only supported in EMR version 5.23.0+, and requires + this resource's core_instance_group to be configured. Public + (Internet accessible) instances must be created in VPC subnets + that have map public IP on launch enabled. + type: number + instanceType: + description: EC2 instance type for all instances in the instance + group. + type: string + name: + description: Friendly name given to the instance group. + type: string + type: object + name: + description: Name of the job flow. + type: string + placementGroupConfig: + description: The specified placement group configuration for an + Amazon EMR cluster. + items: + properties: + instanceRole: + description: 'Role of the instance in the cluster. Valid + Values: MASTER, CORE, TASK.' + type: string + placementStrategy: + description: 'EC2 Placement Group strategy associated with + instance role. Valid Values: SPREAD, PARTITION, CLUSTER, + NONE.' + type: string + type: object + type: array + region: + description: Region is the region you'd like your resource to + be created in. + type: string + releaseLabel: + description: Release label for the Amazon EMR release. + type: string + scaleDownBehavior: + description: Way that individual Amazon EC2 instances terminate + when an automatic scale-in activity occurs or an instance group + is resized. + type: string + securityConfiguration: + description: Security configuration name to attach to the EMR + cluster. Only valid for EMR clusters with release_label 4.8.0 + or greater. + type: string + serviceRole: + description: IAM role that will be assumed by the Amazon EMR service + to access AWS resources. + type: string + serviceRoleRef: + description: Reference to a Role in iam to populate serviceRole. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + serviceRoleSelector: + description: Selector for a Role in iam to populate serviceRole. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + step: + description: List of steps to run when creating the cluster. See + below. This argument is processed in attribute-as-blocks mode. + items: + properties: + actionOnFailure: + description: 'Action to take if the step fails. Valid values: + TERMINATE_JOB_FLOW, TERMINATE_CLUSTER, CANCEL_AND_WAIT, + and CONTINUE' + type: string + hadoopJarStep: + description: JAR file used for the step. See below. + properties: + args: + description: List of command line arguments to pass + to the bootstrap action script. + items: + type: string + type: array + jar: + description: Path to a JAR file run during the step. + type: string + mainClass: + description: Name of the main class in the specified + Java file. If not specified, the JAR file should specify + a Main-Class in its manifest file. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties that are + set when the step runs. You can use these properties + to pass key value pairs to your main function. + type: object + x-kubernetes-map-type: granular + type: object + name: + description: Name of the job flow. + type: string + type: object + type: array + stepConcurrencyLevel: + description: Number of steps that can be executed concurrently. + You can specify a maximum of 256 steps. Only valid for EMR clusters + with release_label 5.28.0 or greater (default is 1). + type: number + tags: + additionalProperties: + type: string + description: Key-value map of resource tags. + type: object + x-kubernetes-map-type: granular + terminationProtection: + description: Switch on/off termination protection (default is + false, except when using multiple master nodes). Before attempting + to destroy the resource when termination protection is enabled, + this configuration must be applied with its value set to false. + type: boolean + unhealthyNodeReplacement: + description: Whether whether Amazon EMR should gracefully replace + core nodes that have degraded within the cluster. Default value + is false. + type: boolean + visibleToAllUsers: + description: Whether the job flow is visible to all IAM users + of the AWS account associated with the job flow. Default value + is true. + type: boolean + required: + - region + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + additionalInfo: + description: JSON string for selecting additional features such + as adding proxy information. + type: string + applications: + description: A case-insensitive list of applications for Amazon + EMR to install and configure when launching the cluster. For + a list of applications available for each Amazon EMR release + version, see the Amazon EMR Release Guide. + items: + type: string + type: array + x-kubernetes-list-type: set + autoTerminationPolicy: + description: An auto-termination policy for an Amazon EMR cluster. + An auto-termination policy defines the amount of idle time in + seconds after which a cluster automatically terminates. See + Auto Termination Policy Below. + properties: + idleTimeout: + description: Specifies the amount of idle time in seconds + after which the cluster automatically terminates. You can + specify a minimum of 60 seconds and a maximum of 604800 + seconds (seven days). + type: number + type: object + autoscalingRole: + description: IAM role for automatic scaling policies. The IAM + role provides permissions that the automatic scaling feature + requires to launch and terminate EC2 instances in an instance + group. + type: string + bootstrapAction: + description: Ordered list of bootstrap actions that will be run + before Hadoop is started on the cluster nodes. See below. + items: + properties: + args: + description: List of command line arguments to pass to the + bootstrap action script. + items: + type: string + type: array + name: + description: Name of the bootstrap action. + type: string + path: + description: Location of the script to run during a bootstrap + action. Can be either a location in Amazon S3 or on a + local file system. + type: string + type: object + type: array + configurations: + description: List of configurations supplied for the EMR cluster + you are creating. Supply a configuration object for applications + to override their default configuration. See AWS Documentation + for more information. + type: string + configurationsJson: + description: JSON string for supplying list of configurations + for the EMR cluster. + type: string + coreInstanceFleet: + description: Configuration block to use an Instance Fleet for + the core node type. Cannot be specified if any core_instance_group + configuration blocks are set. Detailed below. + properties: + instanceTypeConfigs: + description: Configuration block for instance fleet. + items: + properties: + bidPrice: + description: Bid price for each EC2 Spot instance type + as defined by instance_type. Expressed in USD. If + neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: Bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: Configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that + run on the cluster. List of configuration blocks. + items: + properties: + classification: + description: Classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties + that are set when the step runs. You can use + these properties to pass key value pairs to + your main function. + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes + attached to each instance in the instance group. Detailed + below. + items: + properties: + iops: + description: Number of I/O operations per second + (IOPS) that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + type: + description: Volume type. Valid options are gp3, + gp2, io1, io2, standard, st1 and sc1. See EBS + Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance + group (default is 1). + type: number + type: object + type: array + instanceType: + description: EC2 instance type, such as m4.xlarge. + type: string + weightedCapacity: + description: Number of units that a provisioned instance + of this type provides toward fulfilling the target + capacities defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification. + properties: + onDemandSpecification: + description: Configuration block for on demand instances + launch specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only + option is lowest-price (the default), which launches + the lowest price first. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + Spot instance fleets. Valid values include capacity-optimized, + diversified, lowest-price, price-capacity-optimized. + See the AWS documentation for details on each + strategy type. + type: string + blockDurationMinutes: + description: Defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the + defined duration expires, and defined duration + pricing for Spot instances applies. Valid values + are 60, 120, 180, 240, 300, or 360. The duration + period starts as soon as a Spot instance receives + its instance ID. At the end of the duration, Amazon + EC2 marks the Spot instance for termination and + provides a Spot instance termination notice, which + gives the instance a two-minute warning before + it terminates. + type: number + timeoutAction: + description: Action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances + could not be provisioned within the Spot provisioning + timeout. Valid values are TERMINATE_CLUSTER and + SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies + that if no Spot instances are available, On-Demand + Instances should be provisioned to fulfill any + remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: Spot provisioning timeout period in + minutes. If Spot instances are not provisioned + within this time period, the TimeOutAction is + taken. Minimum value is 5 and maximum value is + 1440. The timeout applies only during initial + provisioning, when the cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + targetOnDemandCapacity: + description: The target capacity of On-Demand units for the + instance fleet, which determines how many On-Demand instances + to provision. + type: number + targetSpotCapacity: + description: Target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + type: object + coreInstanceGroup: + description: Configuration block to use an Instance Group for + the core node type. + properties: + autoscalingPolicy: + description: String containing the EMR Auto Scaling Policy + JSON. + type: string + bidPrice: + description: Bid price for each EC2 instance in the instance + group, expressed in USD. By setting this attribute, the + instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank + to use On-Demand Instances. + type: string + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: Number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + throughput: + description: The throughput, in mebibyte per second + (MiB/s). + type: number + type: + description: Volume type. Valid options are gp3, gp2, + io1, io2, standard, st1 and sc1. See EBS Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1). + type: number + type: object + type: array + instanceCount: + description: Target number of instances for the instance group. + Must be at least 1. Defaults to 1. + type: number + instanceType: + description: EC2 instance type for all instances in the instance + group. + type: string + name: + description: Friendly name given to the instance group. + type: string + type: object + customAmiId: + description: Custom Amazon Linux AMI for the cluster (instead + of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 + and later. + type: string + ebsRootVolumeSize: + description: Size in GiB of the EBS root device volume of the + Linux AMI that is used for each EC2 instance. Available in Amazon + EMR version 4.x and later. + type: number + ec2Attributes: + description: Attributes for the EC2 instances running the job + flow. See below. + properties: + additionalMasterSecurityGroups: + description: String containing a comma separated list of additional + Amazon EC2 security group IDs for the master node. + type: string + additionalMasterSecurityGroupsRef: + description: Reference to a SecurityGroup in ec2 to populate + additionalMasterSecurityGroups. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + additionalMasterSecurityGroupsSelector: + description: Selector for a SecurityGroup in ec2 to populate + additionalMasterSecurityGroups. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + additionalSlaveSecurityGroups: + description: String containing a comma separated list of additional + Amazon EC2 security group IDs for the slave nodes as a comma + separated string. + type: string + additionalSlaveSecurityGroupsRef: + description: Reference to a SecurityGroup in ec2 to populate + additionalSlaveSecurityGroups. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + additionalSlaveSecurityGroupsSelector: + description: Selector for a SecurityGroup in ec2 to populate + additionalSlaveSecurityGroups. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + emrManagedMasterSecurityGroup: + description: Identifier of the Amazon EC2 EMR-Managed security + group for the master node. + type: string + emrManagedMasterSecurityGroupRef: + description: Reference to a SecurityGroup in ec2 to populate + emrManagedMasterSecurityGroup. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + emrManagedMasterSecurityGroupSelector: + description: Selector for a SecurityGroup in ec2 to populate + emrManagedMasterSecurityGroup. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + emrManagedSlaveSecurityGroup: + description: Identifier of the Amazon EC2 EMR-Managed security + group for the slave nodes. + type: string + emrManagedSlaveSecurityGroupRef: + description: Reference to a SecurityGroup in ec2 to populate + emrManagedSlaveSecurityGroup. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + emrManagedSlaveSecurityGroupSelector: + description: Selector for a SecurityGroup in ec2 to populate + emrManagedSlaveSecurityGroup. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + instanceProfile: + description: Instance Profile for EC2 instances of the cluster + assume this role. + type: string + instanceProfileRef: + description: Reference to a InstanceProfile in iam to populate + instanceProfile. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + instanceProfileSelector: + description: Selector for a InstanceProfile in iam to populate + instanceProfile. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + keyName: + description: Amazon EC2 key pair that can be used to ssh to + the master node as the user called hadoop. + type: string + keyNameRef: + description: Reference to a KeyPair in ec2 to populate keyName. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + keyNameSelector: + description: Selector for a KeyPair in ec2 to populate keyName. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + serviceAccessSecurityGroup: + description: Identifier of the Amazon EC2 service-access security + group - required when the cluster runs on a private subnet. + type: string + subnetId: + description: VPC subnet id where you want the job flow to + launch. Cannot specify the cc1.4xlarge instance type for + nodes of a job flow launched in an Amazon VPC. + type: string + subnetIdRef: + description: Reference to a Subnet in ec2 to populate subnetId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + subnetIdSelector: + description: Selector for a Subnet in ec2 to populate subnetId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching + labels is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + subnetIds: + description: List of VPC subnet id-s where you want the job + flow to launch. Amazon EMR identifies the best Availability + Zone to launch instances according to your fleet specifications. + items: + type: string + type: array + x-kubernetes-list-type: set + type: object + keepJobFlowAliveWhenNoSteps: + description: Switch on/off run cluster with no steps or when all + steps are complete (default is on) + type: boolean + kerberosAttributes: + description: Kerberos configuration for the cluster. See below. + properties: + adDomainJoinPasswordSecretRef: + description: Active Directory password for ad_domain_join_user. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + adDomainJoinUser: + description: Required only when establishing a cross-realm + trust with an Active Directory domain. A user with sufficient + privileges to join resources to the domain. + type: string + crossRealmTrustPrincipalPasswordSecretRef: + description: Required only when establishing a cross-realm + trust with a KDC in a different realm. The cross-realm principal + password, which must be identical across realms. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + kdcAdminPasswordSecretRef: + description: Password used within the cluster for the kadmin + service on the cluster-dedicated KDC, which maintains Kerberos + principals, password policies, and keytabs for the cluster. + properties: + key: + description: The key to select. + type: string + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - key + - name + - namespace + type: object + realm: + description: Name of the Kerberos realm to which all nodes + in a cluster belong. For example, EC2.INTERNAL + type: string + required: + - kdcAdminPasswordSecretRef + type: object + listStepsStates: + description: List of step states used to filter returned steps + items: + type: string + type: array + x-kubernetes-list-type: set + logEncryptionKmsKeyId: + description: AWS KMS customer master key (CMK) key ID or arn used + for encrypting log files. This attribute is only available with + EMR version 5.30.0 and later, excluding EMR 6.0.0. + type: string + logUri: + description: S3 bucket to write the log files of the job flow. + If a value is not provided, logs are not created. + type: string + logUriRef: + description: Reference to a Bucket in s3 to populate logUri. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + logUriSelector: + description: Selector for a Bucket in s3 to populate logUri. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + masterInstanceGroup: + description: Configuration block to use an Instance Group for + the master node type. + properties: + bidPrice: + description: Bid price for each EC2 instance in the instance + group, expressed in USD. By setting this attribute, the + instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank + to use On-Demand Instances. + type: string + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: Number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + throughput: + description: The throughput, in mebibyte per second + (MiB/s). + type: number + type: + description: Volume type. Valid options are gp3, gp2, + io1, io2, standard, st1 and sc1. See EBS Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1). + type: number + type: object + type: array + instanceCount: + description: Target number of instances for the instance group. + Must be 1 or 3. Defaults to 1. Launching with multiple master + nodes is only supported in EMR version 5.23.0+, and requires + this resource's core_instance_group to be configured. Public + (Internet accessible) instances must be created in VPC subnets + that have map public IP on launch enabled. + type: number + instanceType: + description: EC2 instance type for all instances in the instance + group. + type: string + name: + description: Friendly name given to the instance group. + type: string + type: object + name: + description: Name of the job flow. + type: string + placementGroupConfig: + description: The specified placement group configuration for an + Amazon EMR cluster. + items: + properties: + instanceRole: + description: 'Role of the instance in the cluster. Valid + Values: MASTER, CORE, TASK.' + type: string + placementStrategy: + description: 'EC2 Placement Group strategy associated with + instance role. Valid Values: SPREAD, PARTITION, CLUSTER, + NONE.' + type: string + type: object + type: array + releaseLabel: + description: Release label for the Amazon EMR release. + type: string + scaleDownBehavior: + description: Way that individual Amazon EC2 instances terminate + when an automatic scale-in activity occurs or an instance group + is resized. + type: string + securityConfiguration: + description: Security configuration name to attach to the EMR + cluster. Only valid for EMR clusters with release_label 4.8.0 + or greater. + type: string + serviceRole: + description: IAM role that will be assumed by the Amazon EMR service + to access AWS resources. + type: string + serviceRoleRef: + description: Reference to a Role in iam to populate serviceRole. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + serviceRoleSelector: + description: Selector for a Role in iam to populate serviceRole. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + step: + description: List of steps to run when creating the cluster. See + below. This argument is processed in attribute-as-blocks mode. + items: + properties: + actionOnFailure: + description: 'Action to take if the step fails. Valid values: + TERMINATE_JOB_FLOW, TERMINATE_CLUSTER, CANCEL_AND_WAIT, + and CONTINUE' + type: string + hadoopJarStep: + description: JAR file used for the step. See below. + properties: + args: + description: List of command line arguments to pass + to the bootstrap action script. + items: + type: string + type: array + jar: + description: Path to a JAR file run during the step. + type: string + mainClass: + description: Name of the main class in the specified + Java file. If not specified, the JAR file should specify + a Main-Class in its manifest file. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties that are + set when the step runs. You can use these properties + to pass key value pairs to your main function. + type: object + x-kubernetes-map-type: granular + type: object + name: + description: Name of the job flow. + type: string + type: object + type: array + stepConcurrencyLevel: + description: Number of steps that can be executed concurrently. + You can specify a maximum of 256 steps. Only valid for EMR clusters + with release_label 5.28.0 or greater (default is 1). + type: number + tags: + additionalProperties: + type: string + description: Key-value map of resource tags. + type: object + x-kubernetes-map-type: granular + terminationProtection: + description: Switch on/off termination protection (default is + false, except when using multiple master nodes). Before attempting + to destroy the resource when termination protection is enabled, + this configuration must be applied with its value set to false. + type: boolean + unhealthyNodeReplacement: + description: Whether whether Amazon EMR should gracefully replace + core nodes that have degraded within the cluster. Default value + is false. + type: boolean + visibleToAllUsers: + description: Whether the job flow is visible to all IAM users + of the AWS account associated with the job flow. Default value + is true. + type: boolean + type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: |- + PublishConnectionDetailsTo specifies the connection secret config which + contains a name, metadata and a reference to secret store config to + which any connection details for this managed resource should be written. + Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations are the annotations to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.annotations". + - It is up to Secret Store implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: |- + Labels are the labels/tags to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store types. + type: object + type: + description: |- + Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: |- + WriteConnectionSecretToReference specifies the namespace and name of a + Secret to which any connection details for this managed resource should + be written. Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + This field is planned to be replaced in a future release in favor of + PublishConnectionDetailsTo. Currently, both could be set independently + and connection details would be published to both without affecting + each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.name is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.name) + || (has(self.initProvider) && has(self.initProvider.name))' + - message: spec.forProvider.releaseLabel is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.releaseLabel) + || (has(self.initProvider) && has(self.initProvider.releaseLabel))' + status: + description: ClusterStatus defines the observed state of Cluster. + properties: + atProvider: + properties: + additionalInfo: + description: JSON string for selecting additional features such + as adding proxy information. + type: string + applications: + description: A case-insensitive list of applications for Amazon + EMR to install and configure when launching the cluster. For + a list of applications available for each Amazon EMR release + version, see the Amazon EMR Release Guide. + items: + type: string + type: array + x-kubernetes-list-type: set + arn: + description: ARN of the cluster. + type: string + autoTerminationPolicy: + description: An auto-termination policy for an Amazon EMR cluster. + An auto-termination policy defines the amount of idle time in + seconds after which a cluster automatically terminates. See + Auto Termination Policy Below. + properties: + idleTimeout: + description: Specifies the amount of idle time in seconds + after which the cluster automatically terminates. You can + specify a minimum of 60 seconds and a maximum of 604800 + seconds (seven days). + type: number + type: object + autoscalingRole: + description: IAM role for automatic scaling policies. The IAM + role provides permissions that the automatic scaling feature + requires to launch and terminate EC2 instances in an instance + group. + type: string + bootstrapAction: + description: Ordered list of bootstrap actions that will be run + before Hadoop is started on the cluster nodes. See below. + items: + properties: + args: + description: List of command line arguments to pass to the + bootstrap action script. + items: + type: string + type: array + name: + description: Name of the bootstrap action. + type: string + path: + description: Location of the script to run during a bootstrap + action. Can be either a location in Amazon S3 or on a + local file system. + type: string + type: object + type: array + clusterState: + type: string + configurations: + description: List of configurations supplied for the EMR cluster + you are creating. Supply a configuration object for applications + to override their default configuration. See AWS Documentation + for more information. + type: string + configurationsJson: + description: JSON string for supplying list of configurations + for the EMR cluster. + type: string + coreInstanceFleet: + description: Configuration block to use an Instance Fleet for + the core node type. Cannot be specified if any core_instance_group + configuration blocks are set. Detailed below. + properties: + id: + description: Master node type Instance Group ID, if using + Instance Group for this node type. + type: string + instanceTypeConfigs: + description: Configuration block for instance fleet. + items: + properties: + bidPrice: + description: Bid price for each EC2 Spot instance type + as defined by instance_type. Expressed in USD. If + neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: Bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: Configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that + run on the cluster. List of configuration blocks. + items: + properties: + classification: + description: Classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties + that are set when the step runs. You can use + these properties to pass key value pairs to + your main function. + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes + attached to each instance in the instance group. Detailed + below. + items: + properties: + iops: + description: Number of I/O operations per second + (IOPS) that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + type: + description: Volume type. Valid options are gp3, + gp2, io1, io2, standard, st1 and sc1. See EBS + Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance + group (default is 1). + type: number + type: object + type: array + instanceType: + description: EC2 instance type, such as m4.xlarge. + type: string + weightedCapacity: + description: Number of units that a provisioned instance + of this type provides toward fulfilling the target + capacities defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification. + properties: + onDemandSpecification: + description: Configuration block for on demand instances + launch specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only + option is lowest-price (the default), which launches + the lowest price first. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + Spot instance fleets. Valid values include capacity-optimized, + diversified, lowest-price, price-capacity-optimized. + See the AWS documentation for details on each + strategy type. + type: string + blockDurationMinutes: + description: Defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the + defined duration expires, and defined duration + pricing for Spot instances applies. Valid values + are 60, 120, 180, 240, 300, or 360. The duration + period starts as soon as a Spot instance receives + its instance ID. At the end of the duration, Amazon + EC2 marks the Spot instance for termination and + provides a Spot instance termination notice, which + gives the instance a two-minute warning before + it terminates. + type: number + timeoutAction: + description: Action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances + could not be provisioned within the Spot provisioning + timeout. Valid values are TERMINATE_CLUSTER and + SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies + that if no Spot instances are available, On-Demand + Instances should be provisioned to fulfill any + remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: Spot provisioning timeout period in + minutes. If Spot instances are not provisioned + within this time period, the TimeOutAction is + taken. Minimum value is 5 and maximum value is + 1440. The timeout applies only during initial + provisioning, when the cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + provisionedOnDemandCapacity: + type: number + provisionedSpotCapacity: + type: number + targetOnDemandCapacity: + description: The target capacity of On-Demand units for the + instance fleet, which determines how many On-Demand instances + to provision. + type: number + targetSpotCapacity: + description: Target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + type: object + coreInstanceGroup: + description: Configuration block to use an Instance Group for + the core node type. + properties: + autoscalingPolicy: + description: String containing the EMR Auto Scaling Policy + JSON. + type: string + bidPrice: + description: Bid price for each EC2 instance in the instance + group, expressed in USD. By setting this attribute, the + instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank + to use On-Demand Instances. + type: string + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: Number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + throughput: + description: The throughput, in mebibyte per second + (MiB/s). + type: number + type: + description: Volume type. Valid options are gp3, gp2, + io1, io2, standard, st1 and sc1. See EBS Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1). + type: number + type: object + type: array + id: + description: Master node type Instance Group ID, if using + Instance Group for this node type. + type: string + instanceCount: + description: Target number of instances for the instance group. + Must be at least 1. Defaults to 1. + type: number + instanceType: + description: EC2 instance type for all instances in the instance + group. + type: string + name: + description: Friendly name given to the instance group. + type: string + type: object + customAmiId: + description: Custom Amazon Linux AMI for the cluster (instead + of an EMR-owned AMI). Available in Amazon EMR version 5.7.0 + and later. + type: string + ebsRootVolumeSize: + description: Size in GiB of the EBS root device volume of the + Linux AMI that is used for each EC2 instance. Available in Amazon + EMR version 4.x and later. + type: number + ec2Attributes: + description: Attributes for the EC2 instances running the job + flow. See below. + properties: + additionalMasterSecurityGroups: + description: String containing a comma separated list of additional + Amazon EC2 security group IDs for the master node. + type: string + additionalSlaveSecurityGroups: + description: String containing a comma separated list of additional + Amazon EC2 security group IDs for the slave nodes as a comma + separated string. + type: string + emrManagedMasterSecurityGroup: + description: Identifier of the Amazon EC2 EMR-Managed security + group for the master node. + type: string + emrManagedSlaveSecurityGroup: + description: Identifier of the Amazon EC2 EMR-Managed security + group for the slave nodes. + type: string + instanceProfile: + description: Instance Profile for EC2 instances of the cluster + assume this role. + type: string + keyName: + description: Amazon EC2 key pair that can be used to ssh to + the master node as the user called hadoop. + type: string + serviceAccessSecurityGroup: + description: Identifier of the Amazon EC2 service-access security + group - required when the cluster runs on a private subnet. + type: string + subnetId: + description: VPC subnet id where you want the job flow to + launch. Cannot specify the cc1.4xlarge instance type for + nodes of a job flow launched in an Amazon VPC. + type: string + subnetIds: + description: List of VPC subnet id-s where you want the job + flow to launch. Amazon EMR identifies the best Availability + Zone to launch instances according to your fleet specifications. + items: + type: string + type: array + x-kubernetes-list-type: set + type: object + id: + description: ID of the cluster. + type: string + keepJobFlowAliveWhenNoSteps: + description: Switch on/off run cluster with no steps or when all + steps are complete (default is on) + type: boolean + kerberosAttributes: + description: Kerberos configuration for the cluster. See below. + properties: + adDomainJoinUser: + description: Required only when establishing a cross-realm + trust with an Active Directory domain. A user with sufficient + privileges to join resources to the domain. + type: string + realm: + description: Name of the Kerberos realm to which all nodes + in a cluster belong. For example, EC2.INTERNAL + type: string + type: object + listStepsStates: + description: List of step states used to filter returned steps + items: + type: string + type: array + x-kubernetes-list-type: set + logEncryptionKmsKeyId: + description: AWS KMS customer master key (CMK) key ID or arn used + for encrypting log files. This attribute is only available with + EMR version 5.30.0 and later, excluding EMR 6.0.0. + type: string + logUri: + description: S3 bucket to write the log files of the job flow. + If a value is not provided, logs are not created. + type: string + masterInstanceFleet: + description: Configuration block to use an Instance Fleet for + the master node type. Cannot be specified if any master_instance_group + configuration blocks are set. Detailed below. + properties: + id: + description: Master node type Instance Group ID, if using + Instance Group for this node type. + type: string + instanceTypeConfigs: + description: Configuration block for instance fleet. + items: + properties: + bidPrice: + description: Bid price for each EC2 instance in the + instance group, expressed in USD. By setting this + attribute, the instance group is being declared as + a Spot Instance, and will implicitly create a Spot + request. Leave this blank to use On-Demand Instances. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: Bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: Configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that + run on the cluster. List of configuration blocks. + items: + properties: + classification: + description: Classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties + that are set when the step runs. You can use + these properties to pass key value pairs to + your main function. + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes + attached to each instance in the instance group. Detailed + below. + items: + properties: + iops: + description: Number of I/O operations per second + (IOPS) that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + type: + description: Volume type. Valid options are gp3, + gp2, io1, io2, standard, st1 and sc1. See EBS + Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance + group (default is 1). + type: number + type: object + type: array + instanceType: + description: EC2 instance type for all instances in + the instance group. + type: string + weightedCapacity: + description: Number of units that a provisioned instance + of this type provides toward fulfilling the target + capacities defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification. + properties: + onDemandSpecification: + description: Configuration block for on demand instances + launch specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + Spot instance fleets. Valid values include capacity-optimized, + diversified, lowest-price, price-capacity-optimized. + See the AWS documentation for details on each + strategy type. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications. + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + Spot instance fleets. Valid values include capacity-optimized, + diversified, lowest-price, price-capacity-optimized. + See the AWS documentation for details on each + strategy type. + type: string + blockDurationMinutes: + description: Defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the + defined duration expires, and defined duration + pricing for Spot instances applies. Valid values + are 60, 120, 180, 240, 300, or 360. The duration + period starts as soon as a Spot instance receives + its instance ID. At the end of the duration, Amazon + EC2 marks the Spot instance for termination and + provides a Spot instance termination notice, which + gives the instance a two-minute warning before + it terminates. + type: number + timeoutAction: + description: Action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances + could not be provisioned within the Spot provisioning + timeout. Valid values are TERMINATE_CLUSTER and + SWITCH_TO_ON_DEMAND. SWITCH_TO_ON_DEMAND specifies + that if no Spot instances are available, On-Demand + Instances should be provisioned to fulfill any + remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: Spot provisioning timeout period in + minutes. If Spot instances are not provisioned + within this time period, the TimeOutAction is + taken. Minimum value is 5 and maximum value is + 1440. The timeout applies only during initial + provisioning, when the cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + provisionedOnDemandCapacity: + type: number + provisionedSpotCapacity: + type: number + targetOnDemandCapacity: + description: Target capacity of On-Demand units for the instance + fleet, which determines how many On-Demand instances to + provision. + type: number + targetSpotCapacity: + description: Target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + type: object + masterInstanceGroup: + description: Configuration block to use an Instance Group for + the master node type. + properties: + bidPrice: + description: Bid price for each EC2 instance in the instance + group, expressed in USD. By setting this attribute, the + instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank + to use On-Demand Instances. + type: string + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: Number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: Volume size, in gibibytes (GiB). + type: number + throughput: + description: The throughput, in mebibyte per second + (MiB/s). + type: number + type: + description: Volume type. Valid options are gp3, gp2, + io1, io2, standard, st1 and sc1. See EBS Volume Types. + type: string + volumesPerInstance: + description: Number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1). + type: number + type: object + type: array + id: + description: Master node type Instance Group ID, if using + Instance Group for this node type. + type: string + instanceCount: + description: Target number of instances for the instance group. + Must be 1 or 3. Defaults to 1. Launching with multiple master + nodes is only supported in EMR version 5.23.0+, and requires + this resource's core_instance_group to be configured. Public + (Internet accessible) instances must be created in VPC subnets + that have map public IP on launch enabled. + type: number + instanceType: + description: EC2 instance type for all instances in the instance + group. + type: string + name: + description: Friendly name given to the instance group. + type: string + type: object + masterPublicDns: + description: The DNS name of the master node. If the cluster is + on a private subnet, this is the private DNS name. On a public + subnet, this is the public DNS name. + type: string + name: + description: Name of the job flow. + type: string + placementGroupConfig: + description: The specified placement group configuration for an + Amazon EMR cluster. + items: + properties: + instanceRole: + description: 'Role of the instance in the cluster. Valid + Values: MASTER, CORE, TASK.' + type: string + placementStrategy: + description: 'EC2 Placement Group strategy associated with + instance role. Valid Values: SPREAD, PARTITION, CLUSTER, + NONE.' + type: string + type: object + type: array + releaseLabel: + description: Release label for the Amazon EMR release. + type: string + scaleDownBehavior: + description: Way that individual Amazon EC2 instances terminate + when an automatic scale-in activity occurs or an instance group + is resized. + type: string + securityConfiguration: + description: Security configuration name to attach to the EMR + cluster. Only valid for EMR clusters with release_label 4.8.0 + or greater. + type: string + serviceRole: + description: IAM role that will be assumed by the Amazon EMR service + to access AWS resources. + type: string + step: + description: List of steps to run when creating the cluster. See + below. This argument is processed in attribute-as-blocks mode. + items: + properties: + actionOnFailure: + description: 'Action to take if the step fails. Valid values: + TERMINATE_JOB_FLOW, TERMINATE_CLUSTER, CANCEL_AND_WAIT, + and CONTINUE' + type: string + hadoopJarStep: + description: JAR file used for the step. See below. + properties: + args: + description: List of command line arguments to pass + to the bootstrap action script. + items: + type: string + type: array + jar: + description: Path to a JAR file run during the step. + type: string + mainClass: + description: Name of the main class in the specified + Java file. If not specified, the JAR file should specify + a Main-Class in its manifest file. + type: string + properties: + additionalProperties: + type: string + description: Key-Value map of Java properties that are + set when the step runs. You can use these properties + to pass key value pairs to your main function. + type: object + x-kubernetes-map-type: granular + type: object + name: + description: Name of the job flow. + type: string + type: object + type: array + stepConcurrencyLevel: + description: Number of steps that can be executed concurrently. + You can specify a maximum of 256 steps. Only valid for EMR clusters + with release_label 5.28.0 or greater (default is 1). + type: number + tags: + additionalProperties: + type: string + description: Key-value map of resource tags. + type: object + x-kubernetes-map-type: granular + tagsAll: + additionalProperties: + type: string + description: Map of tags assigned to the resource, including those + inherited from the provider default_tags configuration block. + type: object + x-kubernetes-map-type: granular + terminationProtection: + description: Switch on/off termination protection (default is + false, except when using multiple master nodes). Before attempting + to destroy the resource when termination protection is enabled, + this configuration must be applied with its value set to false. + type: boolean + unhealthyNodeReplacement: + description: Whether whether Amazon EMR should gracefully replace + core nodes that have degraded within the cluster. Default value + is false. + type: boolean + visibleToAllUsers: + description: Whether the job flow is visible to all IAM users + of the AWS account associated with the job flow. Default value + is true. + type: boolean + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: |- + LastTransitionTime is the last time this condition transitioned from one + status to another. + format: date-time + type: string + message: + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. + type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: |- + Type of this condition. At most one of each condition type may apply to + a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/emr.aws.upbound.io_instancefleets.yaml b/package/crds/emr.aws.upbound.io_instancefleets.yaml new file mode 100644 index 0000000000..ae116b14b5 --- /dev/null +++ b/package/crds/emr.aws.upbound.io_instancefleets.yaml @@ -0,0 +1,932 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: instancefleets.emr.aws.upbound.io +spec: + group: emr.aws.upbound.io + names: + categories: + - crossplane + - managed + - aws + kind: InstanceFleet + listKind: InstanceFleetList + plural: instancefleets + singular: instancefleet + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: InstanceFleet is the Schema for the InstanceFleets API. Provides + an Elastic MapReduce Cluster Instance Fleet + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: InstanceFleetSpec defines the desired state of InstanceFleet + properties: + deletionPolicy: + default: Delete + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + clusterId: + description: ID of the EMR Cluster to attach to. Changing this + forces a new resource to be created. + type: string + clusterIdRef: + description: Reference to a Cluster in emr to populate clusterId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + clusterIdSelector: + description: Selector for a Cluster in emr to populate clusterId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + instanceTypeConfigs: + description: Configuration block for instance fleet + items: + properties: + bidPrice: + description: The bid price for each EC2 Spot instance type + as defined by instance_type. Expressed in USD. If neither + bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: The bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: A configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that run + on the cluster. List of configuration blocks. + items: + properties: + classification: + description: The classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: A map of properties specified within + a configuration classification + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: The number of I/O operations per second + (IOPS) that the volume supports + type: number + size: + description: The volume size, in gibibytes (GiB). + type: number + type: + description: The volume type. Valid options are gp2, + io1, standard and st1. See EBS Volume Types. + type: string + volumesPerInstance: + description: The number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1) + type: number + type: object + type: array + instanceType: + description: An EC2 instance type, such as m4.xlarge. + type: string + weightedCapacity: + description: The number of units that a provisioned instance + of this type provides toward fulfilling the target capacities + defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification + properties: + onDemandSpecification: + description: Configuration block for on demand instances launch + specifications + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only option + is lowest-price (the default), which launches the + lowest price first. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only option + is lowest-price (the default), which launches the + lowest price first. + type: string + blockDurationMinutes: + description: The defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the defined + duration expires, and defined duration pricing for + Spot instances applies. Valid values are 60, 120, + 180, 240, 300, or 360. The duration period starts + as soon as a Spot instance receives its instance ID. + At the end of the duration, Amazon EC2 marks the Spot + instance for termination and provides a Spot instance + termination notice, which gives the instance a two-minute + warning before it terminates. + type: number + timeoutAction: + description: The action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances could + not be provisioned within the Spot provisioning timeout. + Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. + SWITCH_TO_ON_DEMAND specifies that if no Spot instances + are available, On-Demand Instances should be provisioned + to fulfill any remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: The spot provisioning timeout period in + minutes. If Spot instances are not provisioned within + this time period, the TimeOutAction is taken. Minimum + value is 5 and maximum value is 1440. The timeout + applies only during initial provisioning, when the + cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + region: + description: Region is the region you'd like your resource to + be created in. + type: string + targetOnDemandCapacity: + description: The target capacity of On-Demand units for the instance + fleet, which determines how many On-Demand instances to provision. + type: number + targetSpotCapacity: + description: The target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + required: + - region + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + clusterId: + description: ID of the EMR Cluster to attach to. Changing this + forces a new resource to be created. + type: string + clusterIdRef: + description: Reference to a Cluster in emr to populate clusterId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + clusterIdSelector: + description: Selector for a Cluster in emr to populate clusterId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + instanceTypeConfigs: + description: Configuration block for instance fleet + items: + properties: + bidPrice: + description: The bid price for each EC2 Spot instance type + as defined by instance_type. Expressed in USD. If neither + bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: The bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: A configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that run + on the cluster. List of configuration blocks. + items: + properties: + classification: + description: The classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: A map of properties specified within + a configuration classification + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: The number of I/O operations per second + (IOPS) that the volume supports + type: number + size: + description: The volume size, in gibibytes (GiB). + type: number + type: + description: The volume type. Valid options are gp2, + io1, standard and st1. See EBS Volume Types. + type: string + volumesPerInstance: + description: The number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1) + type: number + type: object + type: array + instanceType: + description: An EC2 instance type, such as m4.xlarge. + type: string + weightedCapacity: + description: The number of units that a provisioned instance + of this type provides toward fulfilling the target capacities + defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification + properties: + onDemandSpecification: + description: Configuration block for on demand instances launch + specifications + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only option + is lowest-price (the default), which launches the + lowest price first. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only option + is lowest-price (the default), which launches the + lowest price first. + type: string + blockDurationMinutes: + description: The defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the defined + duration expires, and defined duration pricing for + Spot instances applies. Valid values are 60, 120, + 180, 240, 300, or 360. The duration period starts + as soon as a Spot instance receives its instance ID. + At the end of the duration, Amazon EC2 marks the Spot + instance for termination and provides a Spot instance + termination notice, which gives the instance a two-minute + warning before it terminates. + type: number + timeoutAction: + description: The action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances could + not be provisioned within the Spot provisioning timeout. + Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. + SWITCH_TO_ON_DEMAND specifies that if no Spot instances + are available, On-Demand Instances should be provisioned + to fulfill any remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: The spot provisioning timeout period in + minutes. If Spot instances are not provisioned within + this time period, the TimeOutAction is taken. Minimum + value is 5 and maximum value is 1440. The timeout + applies only during initial provisioning, when the + cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + targetOnDemandCapacity: + description: The target capacity of On-Demand units for the instance + fleet, which determines how many On-Demand instances to provision. + type: number + targetSpotCapacity: + description: The target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: |- + PublishConnectionDetailsTo specifies the connection secret config which + contains a name, metadata and a reference to secret store config to + which any connection details for this managed resource should be written. + Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations are the annotations to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.annotations". + - It is up to Secret Store implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: |- + Labels are the labels/tags to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store types. + type: object + type: + description: |- + Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: |- + WriteConnectionSecretToReference specifies the namespace and name of a + Secret to which any connection details for this managed resource should + be written. Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + This field is planned to be replaced in a future release in favor of + PublishConnectionDetailsTo. Currently, both could be set independently + and connection details would be published to both without affecting + each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + status: + description: InstanceFleetStatus defines the observed state of InstanceFleet. + properties: + atProvider: + properties: + clusterId: + description: ID of the EMR Cluster to attach to. Changing this + forces a new resource to be created. + type: string + id: + description: The unique identifier of the instance fleet. + type: string + instanceTypeConfigs: + description: Configuration block for instance fleet + items: + properties: + bidPrice: + description: The bid price for each EC2 Spot instance type + as defined by instance_type. Expressed in USD. If neither + bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: string + bidPriceAsPercentageOfOnDemandPrice: + description: The bid price, as a percentage of On-Demand + price, for each EC2 Spot instance as defined by instance_type. + Expressed as a number (for example, 20 specifies 20%). + If neither bid_price nor bid_price_as_percentage_of_on_demand_price + is provided, bid_price_as_percentage_of_on_demand_price + defaults to 100%. + type: number + configurations: + description: A configuration classification that applies + when provisioning cluster instances, which can include + configurations for applications and software that run + on the cluster. List of configuration blocks. + items: + properties: + classification: + description: The classification within a configuration. + type: string + properties: + additionalProperties: + type: string + description: A map of properties specified within + a configuration classification + type: object + x-kubernetes-map-type: granular + type: object + type: array + ebsConfig: + description: Configuration block(s) for EBS volumes attached + to each instance in the instance group. Detailed below. + items: + properties: + iops: + description: The number of I/O operations per second + (IOPS) that the volume supports + type: number + size: + description: The volume size, in gibibytes (GiB). + type: number + type: + description: The volume type. Valid options are gp2, + io1, standard and st1. See EBS Volume Types. + type: string + volumesPerInstance: + description: The number of EBS volumes with this configuration + to attach to each EC2 instance in the instance group + (default is 1) + type: number + type: object + type: array + instanceType: + description: An EC2 instance type, such as m4.xlarge. + type: string + weightedCapacity: + description: The number of units that a provisioned instance + of this type provides toward fulfilling the target capacities + defined in aws_emr_instance_fleet. + type: number + type: object + type: array + launchSpecifications: + description: Configuration block for launch specification + properties: + onDemandSpecification: + description: Configuration block for on demand instances launch + specifications + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only option + is lowest-price (the default), which launches the + lowest price first. + type: string + type: object + type: array + spotSpecification: + description: Configuration block for spot instances launch + specifications + items: + properties: + allocationStrategy: + description: Specifies the strategy to use in launching + On-Demand instance fleets. Currently, the only option + is lowest-price (the default), which launches the + lowest price first. + type: string + blockDurationMinutes: + description: The defined duration for Spot instances + (also known as Spot blocks) in minutes. When specified, + the Spot instance does not terminate before the defined + duration expires, and defined duration pricing for + Spot instances applies. Valid values are 60, 120, + 180, 240, 300, or 360. The duration period starts + as soon as a Spot instance receives its instance ID. + At the end of the duration, Amazon EC2 marks the Spot + instance for termination and provides a Spot instance + termination notice, which gives the instance a two-minute + warning before it terminates. + type: number + timeoutAction: + description: The action to take when TargetSpotCapacity + has not been fulfilled when the TimeoutDurationMinutes + has expired; that is, when all Spot instances could + not be provisioned within the Spot provisioning timeout. + Valid values are TERMINATE_CLUSTER and SWITCH_TO_ON_DEMAND. + SWITCH_TO_ON_DEMAND specifies that if no Spot instances + are available, On-Demand Instances should be provisioned + to fulfill any remaining Spot capacity. + type: string + timeoutDurationMinutes: + description: The spot provisioning timeout period in + minutes. If Spot instances are not provisioned within + this time period, the TimeOutAction is taken. Minimum + value is 5 and maximum value is 1440. The timeout + applies only during initial provisioning, when the + cluster is first created. + type: number + type: object + type: array + type: object + name: + description: Friendly name given to the instance fleet. + type: string + provisionedOnDemandCapacity: + description: |- + Demand units that have been provisioned for the instance + fleet to fulfill TargetOnDemandCapacity. This provisioned capacity might be less than or greater than TargetOnDemandCapacity. + type: number + provisionedSpotCapacity: + description: |- + The number of Spot units that have been provisioned for this instance fleet + to fulfill TargetSpotCapacity. This provisioned capacity might be less than or greater than TargetSpotCapacity. + type: number + targetOnDemandCapacity: + description: The target capacity of On-Demand units for the instance + fleet, which determines how many On-Demand instances to provision. + type: number + targetSpotCapacity: + description: The target capacity of Spot units for the instance + fleet, which determines how many Spot instances to provision. + type: number + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: |- + LastTransitionTime is the last time this condition transitioned from one + status to another. + format: date-time + type: string + message: + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. + type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: |- + Type of this condition. At most one of each condition type may apply to + a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/package/crds/emr.aws.upbound.io_instancegroups.yaml b/package/crds/emr.aws.upbound.io_instancegroups.yaml new file mode 100644 index 0000000000..d1f4579fe9 --- /dev/null +++ b/package/crds/emr.aws.upbound.io_instancegroups.yaml @@ -0,0 +1,670 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.14.0 + name: instancegroups.emr.aws.upbound.io +spec: + group: emr.aws.upbound.io + names: + categories: + - crossplane + - managed + - aws + kind: InstanceGroup + listKind: InstanceGroupList + plural: instancegroups + singular: instancegroup + scope: Cluster + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=='Synced')].status + name: SYNCED + type: string + - jsonPath: .status.conditions[?(@.type=='Ready')].status + name: READY + type: string + - jsonPath: .metadata.annotations.crossplane\.io/external-name + name: EXTERNAL-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: InstanceGroup is the Schema for the InstanceGroups API. Provides + an Elastic MapReduce Cluster Instance Group + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: InstanceGroupSpec defines the desired state of InstanceGroup + properties: + deletionPolicy: + default: Delete + description: |- + DeletionPolicy specifies what will happen to the underlying external + when this managed resource is deleted - either "Delete" or "Orphan" the + external resource. + This field is planned to be deprecated in favor of the ManagementPolicies + field in a future release. Currently, both could be set independently and + non-default values would be honored if the feature flag is enabled. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + enum: + - Orphan + - Delete + type: string + forProvider: + properties: + autoscalingPolicy: + description: The autoscaling policy document. This is a JSON formatted + string. See EMR Auto Scaling + type: string + bidPrice: + description: If set, the bid price for each EC2 instance in the + instance group, expressed in USD. By setting this attribute, + the instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank to use + On-Demand Instances. + type: string + clusterId: + description: ID of the EMR Cluster to attach to. Changing this + forces a new resource to be created. + type: string + clusterIdRef: + description: Reference to a Cluster in emr to populate clusterId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + clusterIdSelector: + description: Selector for a Cluster in emr to populate clusterId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + configurationsJson: + description: A JSON string for supplying list of configurations + specific to the EMR instance group. Note that this can only + be changed when using EMR release 5.21 or later. + type: string + ebsConfig: + description: One or more ebs_config blocks as defined below. Changing + this forces a new resource to be created. + items: + properties: + iops: + description: The number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: The volume size, in gibibytes (GiB). This can + be a number from 1 - 1024. If the volume type is EBS-optimized, + the minimum value is 10. + type: number + type: + description: The volume type. Valid options are 'gp2', 'io1' + and 'standard'. + type: string + volumesPerInstance: + description: The number of EBS Volumes to attach per instance. + type: number + type: object + type: array + ebsOptimized: + description: optimized. Changing this forces a new resource to + be created. + type: boolean + instanceCount: + description: target number of instances for the instance group. + defaults to 0. + type: number + instanceType: + description: The EC2 instance type for all instances in the instance + group. Changing this forces a new resource to be created. + type: string + name: + description: Human friendly name given to the instance group. + Changing this forces a new resource to be created. + type: string + region: + description: Region is the region you'd like your resource to + be created in. + type: string + required: + - region + type: object + initProvider: + description: |- + THIS IS A BETA FIELD. It will be honored + unless the Management Policies feature flag is disabled. + InitProvider holds the same fields as ForProvider, with the exception + of Identifier and other resource reference fields. The fields that are + in InitProvider are merged into ForProvider when the resource is created. + The same fields are also added to the terraform ignore_changes hook, to + avoid updating them after creation. This is useful for fields that are + required on creation, but we do not desire to update them after creation, + for example because of an external controller is managing them, like an + autoscaler. + properties: + autoscalingPolicy: + description: The autoscaling policy document. This is a JSON formatted + string. See EMR Auto Scaling + type: string + bidPrice: + description: If set, the bid price for each EC2 instance in the + instance group, expressed in USD. By setting this attribute, + the instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank to use + On-Demand Instances. + type: string + clusterId: + description: ID of the EMR Cluster to attach to. Changing this + forces a new resource to be created. + type: string + clusterIdRef: + description: Reference to a Cluster in emr to populate clusterId. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + clusterIdSelector: + description: Selector for a Cluster in emr to populate clusterId. + properties: + matchControllerRef: + description: |- + MatchControllerRef ensures an object with the same controller reference + as the selecting object is selected. + type: boolean + matchLabels: + additionalProperties: + type: string + description: MatchLabels ensures an object with matching labels + is selected. + type: object + policy: + description: Policies for selection. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + type: object + configurationsJson: + description: A JSON string for supplying list of configurations + specific to the EMR instance group. Note that this can only + be changed when using EMR release 5.21 or later. + type: string + ebsConfig: + description: One or more ebs_config blocks as defined below. Changing + this forces a new resource to be created. + items: + properties: + iops: + description: The number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: The volume size, in gibibytes (GiB). This can + be a number from 1 - 1024. If the volume type is EBS-optimized, + the minimum value is 10. + type: number + type: + description: The volume type. Valid options are 'gp2', 'io1' + and 'standard'. + type: string + volumesPerInstance: + description: The number of EBS Volumes to attach per instance. + type: number + type: object + type: array + ebsOptimized: + description: optimized. Changing this forces a new resource to + be created. + type: boolean + instanceCount: + description: target number of instances for the instance group. + defaults to 0. + type: number + instanceType: + description: The EC2 instance type for all instances in the instance + group. Changing this forces a new resource to be created. + type: string + name: + description: Human friendly name given to the instance group. + Changing this forces a new resource to be created. + type: string + type: object + managementPolicies: + default: + - '*' + description: |- + THIS IS A BETA FIELD. It is on by default but can be opted out + through a Crossplane feature flag. + ManagementPolicies specify the array of actions Crossplane is allowed to + take on the managed and external resources. + This field is planned to replace the DeletionPolicy field in a future + release. Currently, both could be set independently and non-default + values would be honored if the feature flag is enabled. If both are + custom, the DeletionPolicy field will be ignored. + See the design doc for more information: https://github.com/crossplane/crossplane/blob/499895a25d1a1a0ba1604944ef98ac7a1a71f197/design/design-doc-observe-only-resources.md?plain=1#L223 + and this one: https://github.com/crossplane/crossplane/blob/444267e84783136daa93568b364a5f01228cacbe/design/one-pager-ignore-changes.md + items: + description: |- + A ManagementAction represents an action that the Crossplane controllers + can take on an external resource. + enum: + - Observe + - Create + - Update + - Delete + - LateInitialize + - '*' + type: string + type: array + providerConfigRef: + default: + name: default + description: |- + ProviderConfigReference specifies how the provider that will be used to + create, observe, update, and delete this managed resource should be + configured. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + publishConnectionDetailsTo: + description: |- + PublishConnectionDetailsTo specifies the connection secret config which + contains a name, metadata and a reference to secret store config to + which any connection details for this managed resource should be written. + Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + properties: + configRef: + default: + name: default + description: |- + SecretStoreConfigRef specifies which secret store config should be used + for this ConnectionSecret. + properties: + name: + description: Name of the referenced object. + type: string + policy: + description: Policies for referencing. + properties: + resolution: + default: Required + description: |- + Resolution specifies whether resolution of this reference is required. + The default is 'Required', which means the reconcile will fail if the + reference cannot be resolved. 'Optional' means this reference will be + a no-op if it cannot be resolved. + enum: + - Required + - Optional + type: string + resolve: + description: |- + Resolve specifies when this reference should be resolved. The default + is 'IfNotPresent', which will attempt to resolve the reference only when + the corresponding field is not present. Use 'Always' to resolve the + reference on every reconcile. + enum: + - Always + - IfNotPresent + type: string + type: object + required: + - name + type: object + metadata: + description: Metadata is the metadata for connection secret. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations are the annotations to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.annotations". + - It is up to Secret Store implementation for others store types. + type: object + labels: + additionalProperties: + type: string + description: |- + Labels are the labels/tags to be added to connection secret. + - For Kubernetes secrets, this will be used as "metadata.labels". + - It is up to Secret Store implementation for others store types. + type: object + type: + description: |- + Type is the SecretType for the connection secret. + - Only valid for Kubernetes Secret Stores. + type: string + type: object + name: + description: Name is the name of the connection secret. + type: string + required: + - name + type: object + writeConnectionSecretToRef: + description: |- + WriteConnectionSecretToReference specifies the namespace and name of a + Secret to which any connection details for this managed resource should + be written. Connection details frequently include the endpoint, username, + and password required to connect to the managed resource. + This field is planned to be replaced in a future release in favor of + PublishConnectionDetailsTo. Currently, both could be set independently + and connection details would be published to both without affecting + each other. + properties: + name: + description: Name of the secret. + type: string + namespace: + description: Namespace of the secret. + type: string + required: + - name + - namespace + type: object + required: + - forProvider + type: object + x-kubernetes-validations: + - message: spec.forProvider.instanceType is a required parameter + rule: '!(''*'' in self.managementPolicies || ''Create'' in self.managementPolicies + || ''Update'' in self.managementPolicies) || has(self.forProvider.instanceType) + || (has(self.initProvider) && has(self.initProvider.instanceType))' + status: + description: InstanceGroupStatus defines the observed state of InstanceGroup. + properties: + atProvider: + properties: + autoscalingPolicy: + description: The autoscaling policy document. This is a JSON formatted + string. See EMR Auto Scaling + type: string + bidPrice: + description: If set, the bid price for each EC2 instance in the + instance group, expressed in USD. By setting this attribute, + the instance group is being declared as a Spot Instance, and + will implicitly create a Spot request. Leave this blank to use + On-Demand Instances. + type: string + clusterId: + description: ID of the EMR Cluster to attach to. Changing this + forces a new resource to be created. + type: string + configurationsJson: + description: A JSON string for supplying list of configurations + specific to the EMR instance group. Note that this can only + be changed when using EMR release 5.21 or later. + type: string + ebsConfig: + description: One or more ebs_config blocks as defined below. Changing + this forces a new resource to be created. + items: + properties: + iops: + description: The number of I/O operations per second (IOPS) + that the volume supports. + type: number + size: + description: The volume size, in gibibytes (GiB). This can + be a number from 1 - 1024. If the volume type is EBS-optimized, + the minimum value is 10. + type: number + type: + description: The volume type. Valid options are 'gp2', 'io1' + and 'standard'. + type: string + volumesPerInstance: + description: The number of EBS Volumes to attach per instance. + type: number + type: object + type: array + ebsOptimized: + description: optimized. Changing this forces a new resource to + be created. + type: boolean + id: + description: The EMR Instance ID + type: string + instanceCount: + description: target number of instances for the instance group. + defaults to 0. + type: number + instanceType: + description: The EC2 instance type for all instances in the instance + group. Changing this forces a new resource to be created. + type: string + name: + description: Human friendly name given to the instance group. + Changing this forces a new resource to be created. + type: string + runningInstanceCount: + description: The number of instances currently running in this + instance group. + type: number + status: + description: The current status of the instance group. + type: string + type: object + conditions: + description: Conditions of the resource. + items: + description: A Condition that may apply to a resource. + properties: + lastTransitionTime: + description: |- + LastTransitionTime is the last time this condition transitioned from one + status to another. + format: date-time + type: string + message: + description: |- + A Message containing details about this condition's last transition from + one status to another, if any. + type: string + observedGeneration: + description: |- + ObservedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + type: integer + reason: + description: A Reason for this condition's last transition from + one status to another. + type: string + status: + description: Status of this condition; is it currently True, + False, or Unknown? + type: string + type: + description: |- + Type of this condition. At most one of each condition type may apply to + a resource at any point in time. + type: string + required: + - lastTransitionTime + - reason + - status + - type + type: object + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + observedGeneration: + description: |- + ObservedGeneration is the latest metadata.generation + which resulted in either a ready state, or stalled due to error + it can not recover from without human intervention. + format: int64 + type: integer + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {}