text:
package com.amazonaws.services.opsworks.model;

import java.io.Serializable;
import com.amazonaws.AmazonWebServiceRequest;

/**
 *
 */
public class CloneStackRequest extends AmazonWebServiceRequest implements
        Serializable, Cloneable {

    /**
     *

     * The source stack ID.
     *

     */
    private String sourceStackId;
    /**
     *

     * The cloned stack name.
     *

     */
    private String name;
    /**
     *

     * The cloned stack AWS region, such as "us-east-1". For more information
     * about AWS regions, see Regions
     * and Endpoints.
     *

     */
    private String region;
    /**
     *

     * The ID of the VPC that the cloned stack is to be launched into. It must
     * be in the specified region. All instances are launched into this VPC, and
     * you cannot change the ID later.
     *

     *

     *
If your account supports EC2 Classic, the default value is no VPC.

     *
If your account does not support EC2 Classic, the default value is
     * the default VPC for the specified region.

     *

     *

     * If the VPC ID corresponds to a default VPC and you have specified either
     * the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the
     * value of the other parameter. If you specify neither parameter, AWS
     * OpsWorks sets these parameters to the first valid Availability Zone for
     * the specified region and the corresponding default VPC subnet ID,
     * respectively.
     *

     *

     * If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the specified
     * region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     * For more information on how to use AWS OpsWorks with a VPC, see Running a Stack in a VPC. For more information on default VPC and
     * EC2 Classic, see Supported Platforms.
     *

     */
    private String vpcId;
    /**
     *

     * A list of stack attributes and values as key/value pairs to be added to
     * the cloned stack.
     *

     */
    private com.amazonaws.internal.SdkInternalMap<String, String> attributes;
    /**
     *

     * The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this
     * parameter to the Amazon Resource Name (ARN) for an existing IAM role. If
     * you create a stack by using the AWS OpsWorks console, it creates the role
     * for you. You can obtain an existing stack's IAM ARN programmatically by
     * calling DescribePermissions. For more information about IAM ARNs,
     * see Using Identifiers.
     *

     * <note>
     *

     * You must set this parameter to a valid service role ARN or the action
     * will fail; there is no default value. You can specify the source stack's
     * service role ARN, if you prefer, but you must do so explicitly.
     *

     * </note>
     */
    private String serviceRoleArn;
    /**
     *

     * The Amazon Resource Name (ARN) of an IAM profile that is the default
     * profile for all of the stack's EC2 instances. For more information about
     * IAM ARNs, see Using Identifiers.
     *

     */
    private String defaultInstanceProfileArn;
    /**
     *

     * The stack's operating system, which must be set to one of the following.
     *

     *

     *
A supported Linux operating system: An Amazon Linux version, such as
     * Amazon Linux 2015.03,
     * Red Hat Enterprise Linux 7, Ubuntu 12.04 LTS,
     * or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI you
     * want to use when you create instances. For more information on how to use
     * custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     * The default option is the parent stack's operating system. For more
     * information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     * <note>You can specify a different Linux operating system for the cloned
     * stack, but you cannot change from Linux to Windows or Windows to
     * Linux.</note>
     */
    private String defaultOs;
    /**
     *

     * The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By
     * default, HostnameTheme is set to
     * Layer_Dependent, which creates host names by appending
     * integers to the layer's short name. The other themes are:
     *

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     * To obtain a generated host name, call GetHostNameSuggestion,
     * which returns a host name based on the current theme.
     *

     */
    private String hostnameTheme;
    /**
     *

     * The cloned stack's default Availability Zone, which must be in the
     * specified region. For more information, see Regions
     * and Endpoints. If you also specify a value for
     * DefaultSubnetId, the subnet must be in the same zone. For
     * more information, see the VpcId parameter description.
     *

     */
    private String defaultAvailabilityZone;
    /**
     *

     * The stack's default VPC subnet ID. This parameter is required if you
     * specify a value for the VpcId parameter. All instances are
     * launched into this subnet unless you specify otherwise when you create
     * the instance. If you also specify a value for
     * DefaultAvailabilityZone, the subnet must be in that zone.
     * For information on default values and when this parameter is required,
     * see the VpcId parameter description.
     *

     */
    private String defaultSubnetId;
    /**
     *

     * A string that contains user-defined, custom JSON. It is used to override
     * the corresponding default stack configuration JSON values. The string
     * should be in the following format and must escape characters such as '"':
     *

     *

     * "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     * For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     *

     */
    private String customJson;
    /**
     *

     * The configuration manager. When you clone a stack we recommend that you
     * use the configuration manager to specify the Chef version: 12, 11.10, or
     * 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for
     * Linux stacks is currently 11.4.
     *

     */
    private StackConfigurationManager configurationManager;
    /**
     *

     * A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more
     * information, see Create a New Stack.
     *

     */
    private ChefConfiguration chefConfiguration;
    /**
     *

     * Whether to use custom cookbooks.
     *

     */
    private Boolean useCustomCookbooks;
    /**
     *

     * Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.
     *

     *

     * AWS OpsWorks provides a standard set of built-in security groups, one for
     * each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own
     * custom security groups. UseOpsworksSecurityGroups has the
     * following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate built-in
     * security group with each layer (default setting). You can associate
     * additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security groups with
     * layers. You must create appropriate Amazon Elastic Compute Cloud (Amazon
     * EC2) security groups and associate a security group with each layer that
     * you create. However, you can still manually associate a built-in security
     * group with a layer on creation; custom security groups are required only
     * for those layers that need custom settings.

     *

     *

     * For more information, see Create a New Stack.
     *

     */
    private Boolean useOpsworksSecurityGroups;

    private Source customCookbooksSource;
    /**
     *

     * A default Amazon EC2 key pair name. The default value is none. If you
     * specify a key pair name, AWS OpsWorks installs the public key on the
     * instance and you can use the private key with an SSH client to log in to
     * the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by specifying a
     * different key pair, or no key pair, when you  create an instance.
     *

     */
    private String defaultSshKeyName;
    /**
     *

     * Whether to clone the source stack's permissions.
     *

     */
    private Boolean clonePermissions;
    /**
     *

     * A list of source stack app IDs to be included in the cloned stack.
     *

     */
    private com.amazonaws.internal.SdkInternalList<String> cloneAppIds;
    /**
     *

     * The default root device type. This value is used by default for all
     * instances in the cloned stack, but you can override it when you create an
     * instance. For more information, see Storage for the Root Device.
     *

     */
    private String defaultRootDeviceType;
    /**
     *

     * The default AWS OpsWorks agent version. You have the following options:
     *

     *

     *
Auto-update - Set this parameter to LATEST. AWS OpsWorks
     * automatically installs new agent versions on the stack's instances as
     * soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent version.
     * To update the agent version, you must edit the stack configuration and
     * specify a new version. AWS OpsWorks then automatically installs that
     * version on the stack's instances.

     *

     *

     * The default setting is LATEST. To specify an agent version,
     * you must use the complete version number, not the abbreviated number
     * shown on the console. For a list of available agent version numbers, call
     * DescribeAgentVersions.
     *

     * <note>You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.</note>
     */
    private String agentVersion;

    /**
     *

     * The source stack ID.
     *

     *
     * @param sourceStackId
     *        The source stack ID.
     */

    public void setSourceStackId(String sourceStackId) {
        this.sourceStackId = sourceStackId;
    }

    /**
     *

     * The source stack ID.
     *

     *
     * @return The source stack ID.
     */

    public String getSourceStackId() {
        return this.sourceStackId;
    }

    /**
     *

     * The source stack ID.
     *

     *
     * @param sourceStackId
     *        The source stack ID.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withSourceStackId(String sourceStackId) {
        setSourceStackId(sourceStackId);
        return this;
    }

    /**
     *

     * The cloned stack name.
     *

     *
     * @param name
     *        The cloned stack name.
     */

    public void setName(String name) {
        this.name = name;
    }

    /**
     *

     * The cloned stack name.
     *

     *
     * @return The cloned stack name.
     */

    public String getName() {
        return this.name;
    }

    /**
     *

     * The cloned stack name.
     *

     *
     * @param name
     *        The cloned stack name.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withName(String name) {
        setName(name);
        return this;
    }

    /**
     *

     * The cloned stack AWS region, such as "us-east-1". For more information
     * about AWS regions, see Regions
     * and Endpoints.
     *

     *
     * @param region
     *        The cloned stack AWS region, such as "us-east-1". For more
     *        information about AWS regions, see Regions and Endpoints.
     */

    public void setRegion(String region) {
        this.region = region;
    }

    /**
     *

     * The cloned stack AWS region, such as "us-east-1". For more information
     * about AWS regions, see Regions
     * and Endpoints.
     *

     *
     * @return The cloned stack AWS region, such as "us-east-1". For more
     *         information about AWS regions, see Regions and Endpoints.
     */

    public String getRegion() {
        return this.region;
    }

    /**
     *

     * The cloned stack AWS region, such as "us-east-1". For more information
     * about AWS regions, see Regions
     * and Endpoints.
     *

     *
     * @param region
     *        The cloned stack AWS region, such as "us-east-1". For more
     *        information about AWS regions, see Regions and Endpoints.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withRegion(String region) {
        setRegion(region);
        return this;
    }

    /**
     *

     * The ID of the VPC that the cloned stack is to be launched into. It must
     * be in the specified region. All instances are launched into this VPC, and
     * you cannot change the ID later.
     *

     *

     *
If your account supports EC2 Classic, the default value is no VPC.

     *
If your account does not support EC2 Classic, the default value is
     * the default VPC for the specified region.

     *

     *

     * If the VPC ID corresponds to a default VPC and you have specified either
     * the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the
     * value of the other parameter. If you specify neither parameter, AWS
     * OpsWorks sets these parameters to the first valid Availability Zone for
     * the specified region and the corresponding default VPC subnet ID,
     * respectively.
     *

     *

     * If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the specified
     * region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     * For more information on how to use AWS OpsWorks with a VPC, see Running a Stack in a VPC. For more information on default VPC and
     * EC2 Classic, see Supported Platforms.
     *

     *
     * @param vpcId
     *        The ID of the VPC that the cloned stack is to be launched into. It
     *        must be in the specified region. All instances are launched into
     *        this VPC, and you cannot change the ID later.

     *

     *
If your account supports EC2 Classic, the default value is no
     *        VPC.

     *
If your account does not support EC2 Classic, the default
     *        value is the default VPC for the specified region.

     *

     *

     *        If the VPC ID corresponds to a default VPC and you have specified
     *        either the DefaultAvailabilityZone or the
     *        DefaultSubnetId parameter only, AWS OpsWorks infers
     *        the value of the other parameter. If you specify neither
     *        parameter, AWS OpsWorks sets these parameters to the first valid
     *        Availability Zone for the specified region and the corresponding
     *        default VPC subnet ID, respectively.
     *

     *

     *        If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the
     *        specified region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     *        For more information on how to use AWS OpsWorks with a VPC, see Running a Stack in a VPC. For more information on default VPC
     *        and EC2 Classic, see Supported Platforms.
     */

    public void setVpcId(String vpcId) {
        this.vpcId = vpcId;
    }

    /**
     *

     * The ID of the VPC that the cloned stack is to be launched into. It must
     * be in the specified region. All instances are launched into this VPC, and
     * you cannot change the ID later.
     *

     *

     *
If your account supports EC2 Classic, the default value is no VPC.

     *
If your account does not support EC2 Classic, the default value is
     * the default VPC for the specified region.

     *

     *

     * If the VPC ID corresponds to a default VPC and you have specified either
     * the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the
     * value of the other parameter. If you specify neither parameter, AWS
     * OpsWorks sets these parameters to the first valid Availability Zone for
     * the specified region and the corresponding default VPC subnet ID,
     * respectively.
     *

     *

     * If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the specified
     * region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     * For more information on how to use AWS OpsWorks with a VPC, see Running a Stack in a VPC. For more information on default VPC and
     * EC2 Classic, see Supported Platforms.
     *

     *
     * @return The ID of the VPC that the cloned stack is to be launched into.
     *         It must be in the specified region. All instances are launched
     *         into this VPC, and you cannot change the ID later.

     *

     *
If your account supports EC2 Classic, the default value is no
     *         VPC.

     *
If your account does not support EC2 Classic, the default
     *         value is the default VPC for the specified region.

     *

     *

     *         If the VPC ID corresponds to a default VPC and you have specified
     *         either the DefaultAvailabilityZone or the
     *         DefaultSubnetId parameter only, AWS OpsWorks infers
     *         the value of the other parameter. If you specify neither
     *         parameter, AWS OpsWorks sets these parameters to the first valid
     *         Availability Zone for the specified region and the corresponding
     *         default VPC subnet ID, respectively.
     *

     *

     *         If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the
     *         specified region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     *         For more information on how to use AWS OpsWorks with a VPC, see
     *         Running a Stack in a VPC. For more information on default
     *         VPC and EC2 Classic, see Supported Platforms.
     */

    public String getVpcId() {
        return this.vpcId;
    }

    /**
     *

     * The ID of the VPC that the cloned stack is to be launched into. It must
     * be in the specified region. All instances are launched into this VPC, and
     * you cannot change the ID later.
     *

     *

     *
If your account supports EC2 Classic, the default value is no VPC.

     *
If your account does not support EC2 Classic, the default value is
     * the default VPC for the specified region.

     *

     *

     * If the VPC ID corresponds to a default VPC and you have specified either
     * the DefaultAvailabilityZone or the
     * DefaultSubnetId parameter only, AWS OpsWorks infers the
     * value of the other parameter. If you specify neither parameter, AWS
     * OpsWorks sets these parameters to the first valid Availability Zone for
     * the specified region and the corresponding default VPC subnet ID,
     * respectively.
     *

     *

     * If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the specified
     * region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     * For more information on how to use AWS OpsWorks with a VPC, see Running a Stack in a VPC. For more information on default VPC and
     * EC2 Classic, see Supported Platforms.
     *

     *
     * @param vpcId
     *        The ID of the VPC that the cloned stack is to be launched into. It
     *        must be in the specified region. All instances are launched into
     *        this VPC, and you cannot change the ID later.

     *

     *
If your account supports EC2 Classic, the default value is no
     *        VPC.

     *
If your account does not support EC2 Classic, the default
     *        value is the default VPC for the specified region.

     *

     *

     *        If the VPC ID corresponds to a default VPC and you have specified
     *        either the DefaultAvailabilityZone or the
     *        DefaultSubnetId parameter only, AWS OpsWorks infers
     *        the value of the other parameter. If you specify neither
     *        parameter, AWS OpsWorks sets these parameters to the first valid
     *        Availability Zone for the specified region and the corresponding
     *        default VPC subnet ID, respectively.
     *

     *

     *        If you specify a nondefault VPC ID, note the following:
     *

     *

     *
It must belong to a VPC in your account that is in the
     *        specified region.

     *
You must specify a value for DefaultSubnetId.

     *

     *

     *        For more information on how to use AWS OpsWorks with a VPC, see Running a Stack in a VPC. For more information on default VPC
     *        and EC2 Classic, see Supported Platforms.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withVpcId(String vpcId) {
        setVpcId(vpcId);
        return this;
    }

    /**
     *

     * A list of stack attributes and values as key/value pairs to be added to
     * the cloned stack.
     *

     *
     * @return A list of stack attributes and values as key/value pairs to be
     *         added to the cloned stack.
     */

    public java.util.Map<String, String> getAttributes() {
        if (attributes == null) {
            attributes = new com.amazonaws.internal.SdkInternalMap<String, String>();
        }
        return attributes;
    }

    /**
     *

     * A list of stack attributes and values as key/value pairs to be added to
     * the cloned stack.
     *

     *
     * @param attributes
     *        A list of stack attributes and values as key/value pairs to be
     *        added to the cloned stack.
     */

    public void setAttributes(java.util.Map<String, String> attributes) {
        this.attributes = attributes == null ? null
                : new com.amazonaws.internal.SdkInternalMap<String, String>(
                        attributes);
    }

    /**
     *

     * A list of stack attributes and values as key/value pairs to be added to
     * the cloned stack.
     *

     *
     * @param attributes
     *        A list of stack attributes and values as key/value pairs to be
     *        added to the cloned stack.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withAttributes(
            java.util.Map<String, String> attributes) {
        setAttributes(attributes);
        return this;
    }

    public CloneStackRequest addAttributesEntry(String key, String value) {
        if (null == this.attributes) {
            this.attributes = new com.amazonaws.internal.SdkInternalMap<String, String>();
        }
        if (this.attributes.containsKey(key))
            throw new IllegalArgumentException("Duplicated keys ("
                    + key.toString() + ") are provided.");
        this.attributes.put(key, value);
        return this;
    }

    /**
     * Removes all the entries added into Attributes. <p> Returns a reference
     * to this object so that method calls can be chained together.
     */

    public CloneStackRequest clearAttributesEntries() {
        this.attributes = null;
        return this;
    }

    /**
     *

     * The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this
     * parameter to the Amazon Resource Name (ARN) for an existing IAM role. If
     * you create a stack by using the AWS OpsWorks console, it creates the role
     * for you. You can obtain an existing stack's IAM ARN programmatically by
     * calling DescribePermissions. For more information about IAM ARNs,
     * see Using Identifiers.
     *

     * <note>
     *

     * You must set this parameter to a valid service role ARN or the action
     * will fail; there is no default value. You can specify the source stack's
     * service role ARN, if you prefer, but you must do so explicitly.
     *

     * </note>
     *
     * @param serviceRoleArn
     *        The stack AWS Identity and Access Management (IAM) role, which
     *        allows AWS OpsWorks to work with AWS resources on your behalf. You
     *        must set this parameter to the Amazon Resource Name (ARN) for an
     *        existing IAM role. If you create a stack by using the AWS OpsWorks
     *        console, it creates the role for you. You can obtain an existing
     *        stack's IAM ARN programmatically by calling
     *        DescribePermissions. For more information about IAM ARNs,
     *        see Using Identifiers.
 <note>
     *

     *        You must set this parameter to a valid service role ARN or the
     *        action will fail; there is no default value. You can specify the
     *        source stack's service role ARN, if you prefer, but you must do so
     *        explicitly.
     *

     */

    public void setServiceRoleArn(String serviceRoleArn) {
        this.serviceRoleArn = serviceRoleArn;
    }

    /**
     *

     * The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this
     * parameter to the Amazon Resource Name (ARN) for an existing IAM role. If
     * you create a stack by using the AWS OpsWorks console, it creates the role
     * for you. You can obtain an existing stack's IAM ARN programmatically by
     * calling DescribePermissions. For more information about IAM ARNs,
     * see Using Identifiers.
     *

     * <note>
     *

     * You must set this parameter to a valid service role ARN or the action
     * will fail; there is no default value. You can specify the source stack's
     * service role ARN, if you prefer, but you must do so explicitly.
     *

     * </note>
     *
     * @return The stack AWS Identity and Access Management (IAM) role, which
     *         allows AWS OpsWorks to work with AWS resources on your behalf.
     *         You must set this parameter to the Amazon Resource Name (ARN) for
     *         an existing IAM role. If you create a stack by using the AWS
     *         OpsWorks console, it creates the role for you. You can obtain an
     *         existing stack's IAM ARN programmatically by calling
     *         DescribePermissions. For more information about IAM ARNs,
     *         see Using Identifiers.
 <note>
     *

     *         You must set this parameter to a valid service role ARN or the
     *         action will fail; there is no default value. You can specify the
     *         source stack's service role ARN, if you prefer, but you must do
     *         so explicitly.
     *

     */

    public String getServiceRoleArn() {
        return this.serviceRoleArn;
    }

    /**
     *

     * The stack AWS Identity and Access Management (IAM) role, which allows AWS
     * OpsWorks to work with AWS resources on your behalf. You must set this
     * parameter to the Amazon Resource Name (ARN) for an existing IAM role. If
     * you create a stack by using the AWS OpsWorks console, it creates the role
     * for you. You can obtain an existing stack's IAM ARN programmatically by
     * calling DescribePermissions. For more information about IAM ARNs,
     * see Using Identifiers.
     *

     * <note>
     *

     * You must set this parameter to a valid service role ARN or the action
     * will fail; there is no default value. You can specify the source stack's
     * service role ARN, if you prefer, but you must do so explicitly.
     *

     * </note>
     *
     * @param serviceRoleArn
     *        The stack AWS Identity and Access Management (IAM) role, which
     *        allows AWS OpsWorks to work with AWS resources on your behalf. You
     *        must set this parameter to the Amazon Resource Name (ARN) for an
     *        existing IAM role. If you create a stack by using the AWS OpsWorks
     *        console, it creates the role for you. You can obtain an existing
     *        stack's IAM ARN programmatically by calling
     *        DescribePermissions. For more information about IAM ARNs,
     *        see Using Identifiers.
 <note>
     *

     *        You must set this parameter to a valid service role ARN or the
     *        action will fail; there is no default value. You can specify the
     *        source stack's service role ARN, if you prefer, but you must do so
     *        explicitly.
     *

     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withServiceRoleArn(String serviceRoleArn) {
        setServiceRoleArn(serviceRoleArn);
        return this;
    }

    /**
     *

     * The Amazon Resource Name (ARN) of an IAM profile that is the default
     * profile for all of the stack's EC2 instances. For more information about
     * IAM ARNs, see Using Identifiers.
     *

     *
     * @param defaultInstanceProfileArn
     *        The Amazon Resource Name (ARN) of an IAM profile that is the
     *        default profile for all of the stack's EC2 instances. For more
     *        information about IAM ARNs, see Using Identifiers.
     */

    public void setDefaultInstanceProfileArn(String defaultInstanceProfileArn) {
        this.defaultInstanceProfileArn = defaultInstanceProfileArn;
    }

    /**
     *

     * The Amazon Resource Name (ARN) of an IAM profile that is the default
     * profile for all of the stack's EC2 instances. For more information about
     * IAM ARNs, see Using Identifiers.
     *

     *
     * @return The Amazon Resource Name (ARN) of an IAM profile that is the
     *         default profile for all of the stack's EC2 instances. For more
     *         information about IAM ARNs, see Using Identifiers.
     */

    public String getDefaultInstanceProfileArn() {
        return this.defaultInstanceProfileArn;
    }

    /**
     *

     * The Amazon Resource Name (ARN) of an IAM profile that is the default
     * profile for all of the stack's EC2 instances. For more information about
     * IAM ARNs, see Using Identifiers.
     *

     *
     * @param defaultInstanceProfileArn
     *        The Amazon Resource Name (ARN) of an IAM profile that is the
     *        default profile for all of the stack's EC2 instances. For more
     *        information about IAM ARNs, see Using Identifiers.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withDefaultInstanceProfileArn(
            String defaultInstanceProfileArn) {
        setDefaultInstanceProfileArn(defaultInstanceProfileArn);
        return this;
    }

    /**
     *

     * The stack's operating system, which must be set to one of the following.
     *

     *

     *
A supported Linux operating system: An Amazon Linux version, such as
     * Amazon Linux 2015.03,
     * Red Hat Enterprise Linux 7, Ubuntu 12.04 LTS,
     * or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI you
     * want to use when you create instances. For more information on how to use
     * custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     * The default option is the parent stack's operating system. For more
     * information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     * <note>You can specify a different Linux operating system for the cloned
     * stack, but you cannot change from Linux to Windows or Windows to
     * Linux.</note>
     *
     * @param defaultOs
     *        The stack's operating system, which must be set to one of the
     *        following.

     *

     *
A supported Linux operating system: An Amazon Linux version,
     *        such as Amazon Linux 2015.03,
     *        Red Hat Enterprise Linux 7,
     *        Ubuntu 12.04 LTS, or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI
     *        you want to use when you create instances. For more information on
     *        how to use custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     *        The default option is the parent stack's operating system. For
     *        more information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     *        <note>You can specify a different Linux operating system for the
     *        cloned stack, but you cannot change from Linux to Windows or
     *        Windows to Linux.
     */

    public void setDefaultOs(String defaultOs) {
        this.defaultOs = defaultOs;
    }

    /**
     *

     * The stack's operating system, which must be set to one of the following.
     *

     *

     *
A supported Linux operating system: An Amazon Linux version, such as
     * Amazon Linux 2015.03,
     * Red Hat Enterprise Linux 7, Ubuntu 12.04 LTS,
     * or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI you
     * want to use when you create instances. For more information on how to use
     * custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     * The default option is the parent stack's operating system. For more
     * information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     * <note>You can specify a different Linux operating system for the cloned
     * stack, but you cannot change from Linux to Windows or Windows to
     * Linux.</note>
     *
     * @return The stack's operating system, which must be set to one of the
     *         following.

     *

     *
A supported Linux operating system: An Amazon Linux version,
     *         such as Amazon Linux 2015.03,
     *         Red Hat Enterprise Linux 7,
     *         Ubuntu 12.04 LTS, or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI
     *         you want to use when you create instances. For more information
     *         on how to use custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     *         The default option is the parent stack's operating system. For
     *         more information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     *         <note>You can specify a different Linux operating system for the
     *         cloned stack, but you cannot change from Linux to Windows or
     *         Windows to Linux.
     */

    public String getDefaultOs() {
        return this.defaultOs;
    }

    /**
     *

     * The stack's operating system, which must be set to one of the following.
     *

     *

     *
A supported Linux operating system: An Amazon Linux version, such as
     * Amazon Linux 2015.03,
     * Red Hat Enterprise Linux 7, Ubuntu 12.04 LTS,
     * or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI you
     * want to use when you create instances. For more information on how to use
     * custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     * The default option is the parent stack's operating system. For more
     * information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     * <note>You can specify a different Linux operating system for the cloned
     * stack, but you cannot change from Linux to Windows or Windows to
     * Linux.</note>
     *
     * @param defaultOs
     *        The stack's operating system, which must be set to one of the
     *        following.

     *

     *
A supported Linux operating system: An Amazon Linux version,
     *        such as Amazon Linux 2015.03,
     *        Red Hat Enterprise Linux 7,
     *        Ubuntu 12.04 LTS, or Ubuntu 14.04 LTS.

     *
Microsoft Windows Server 2012 R2 Base.

     *
A custom AMI: Custom. You specify the custom AMI
     *        you want to use when you create instances. For more information on
     *        how to use custom AMIs with OpsWorks, see Using Custom AMIs.

     *

     *

     *        The default option is the parent stack's operating system. For
     *        more information on the supported operating systems, see AWS OpsWorks Operating Systems.
     *

     *        <note>You can specify a different Linux operating system for the
     *        cloned stack, but you cannot change from Linux to Windows or
     *        Windows to Linux.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withDefaultOs(String defaultOs) {
        setDefaultOs(defaultOs);
        return this;
    }

    /**
     *

     * The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By
     * default, HostnameTheme is set to
     * Layer_Dependent, which creates host names by appending
     * integers to the layer's short name. The other themes are:
     *

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     * To obtain a generated host name, call GetHostNameSuggestion,
     * which returns a host name based on the current theme.
     *

     *
     * @param hostnameTheme
     *        The stack's host name theme, with spaces are replaced by
     *        underscores. The theme is used to generate host names for the
     *        stack's instances. By default, HostnameTheme is set
     *        to Layer_Dependent, which creates host names by
     *        appending integers to the layer's short name. The other themes
     *        are:

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     *        To obtain a generated host name, call
     *        GetHostNameSuggestion, which returns a host name
     *        based on the current theme.
     */

    public void setHostnameTheme(String hostnameTheme) {
        this.hostnameTheme = hostnameTheme;
    }

    /**
     *

     * The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By
     * default, HostnameTheme is set to
     * Layer_Dependent, which creates host names by appending
     * integers to the layer's short name. The other themes are:
     *

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     * To obtain a generated host name, call GetHostNameSuggestion,
     * which returns a host name based on the current theme.
     *

     *
     * @return The stack's host name theme, with spaces are replaced by
     *         underscores. The theme is used to generate host names for the
     *         stack's instances. By default, HostnameTheme is set
     *         to Layer_Dependent, which creates host names by
     *         appending integers to the layer's short name. The other themes
     *         are:

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     *         To obtain a generated host name, call
     *         GetHostNameSuggestion, which returns a host name
     *         based on the current theme.
     */

    public String getHostnameTheme() {
        return this.hostnameTheme;
    }

    /**
     *

     * The stack's host name theme, with spaces are replaced by underscores. The
     * theme is used to generate host names for the stack's instances. By
     * default, HostnameTheme is set to
     * Layer_Dependent, which creates host names by appending
     * integers to the layer's short name. The other themes are:
     *

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     * To obtain a generated host name, call GetHostNameSuggestion,
     * which returns a host name based on the current theme.
     *

     *
     * @param hostnameTheme
     *        The stack's host name theme, with spaces are replaced by
     *        underscores. The theme is used to generate host names for the
     *        stack's instances. By default, HostnameTheme is set
     *        to Layer_Dependent, which creates host names by
     *        appending integers to the layer's short name. The other themes
     *        are:

     *

     *
 Baked_Goods

     *
 Clouds

     *
 Europe_Cities

     *
 Fruits

     *
 Greek_Deities

     *
 Legendary_creatures_from_Japan

     *
 Planets_and_Moons

     *
 Roman_Deities

     *
 Scottish_Islands

     *
 US_Cities

     *
 Wild_Cats

     *

     *

     *        To obtain a generated host name, call
     *        GetHostNameSuggestion, which returns a host name
     *        based on the current theme.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withHostnameTheme(String hostnameTheme) {
        setHostnameTheme(hostnameTheme);
        return this;
    }

    /**
     *

     * The cloned stack's default Availability Zone, which must be in the
     * specified region. For more information, see Regions
     * and Endpoints. If you also specify a value for
     * DefaultSubnetId, the subnet must be in the same zone. For
     * more information, see the VpcId parameter description.
     *

     *
     * @param defaultAvailabilityZone
     *        The cloned stack's default Availability Zone, which must be in the
     *        specified region. For more information, see Regions and Endpoints. If you also specify a value for
     *        DefaultSubnetId, the subnet must be in the same zone.
     *        For more information, see the VpcId parameter
     *        description.
     */

    public void setDefaultAvailabilityZone(String defaultAvailabilityZone) {
        this.defaultAvailabilityZone = defaultAvailabilityZone;
    }

    /**
     *

     * The cloned stack's default Availability Zone, which must be in the
     * specified region. For more information, see Regions
     * and Endpoints. If you also specify a value for
     * DefaultSubnetId, the subnet must be in the same zone. For
     * more information, see the VpcId parameter description.
     *

     *
     * @return The cloned stack's default Availability Zone, which must be in
     *         the specified region. For more information, see Regions and Endpoints. If you also specify a value for
     *         DefaultSubnetId, the subnet must be in the same
     *         zone. For more information, see the VpcId parameter
     *         description.
     */

    public String getDefaultAvailabilityZone() {
        return this.defaultAvailabilityZone;
    }

    /**
     *

     * The cloned stack's default Availability Zone, which must be in the
     * specified region. For more information, see Regions
     * and Endpoints. If you also specify a value for
     * DefaultSubnetId, the subnet must be in the same zone. For
     * more information, see the VpcId parameter description.
     *

     *
     * @param defaultAvailabilityZone
     *        The cloned stack's default Availability Zone, which must be in the
     *        specified region. For more information, see Regions and Endpoints. If you also specify a value for
     *        DefaultSubnetId, the subnet must be in the same zone.
     *        For more information, see the VpcId parameter
     *        description.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withDefaultAvailabilityZone(
            String defaultAvailabilityZone) {
        setDefaultAvailabilityZone(defaultAvailabilityZone);
        return this;
    }

    /**
     *

     * The stack's default VPC subnet ID. This parameter is required if you
     * specify a value for the VpcId parameter. All instances are
     * launched into this subnet unless you specify otherwise when you create
     * the instance. If you also specify a value for
     * DefaultAvailabilityZone, the subnet must be in that zone.
     * For information on default values and when this parameter is required,
     * see the VpcId parameter description.
     *

     *
     * @param defaultSubnetId
     *        The stack's default VPC subnet ID. This parameter is required if
     *        you specify a value for the VpcId parameter. All
     *        instances are launched into this subnet unless you specify
     *        otherwise when you create the instance. If you also specify a
     *        value for DefaultAvailabilityZone, the subnet must be
     *        in that zone. For information on default values and when this
     *        parameter is required, see the VpcId parameter
     *        description.
     */

    public void setDefaultSubnetId(String defaultSubnetId) {
        this.defaultSubnetId = defaultSubnetId;
    }

    /**
     *

     * The stack's default VPC subnet ID. This parameter is required if you
     * specify a value for the VpcId parameter. All instances are
     * launched into this subnet unless you specify otherwise when you create
     * the instance. If you also specify a value for
     * DefaultAvailabilityZone, the subnet must be in that zone.
     * For information on default values and when this parameter is required,
     * see the VpcId parameter description.
     *

     *
     * @return The stack's default VPC subnet ID. This parameter is required if
     *         you specify a value for the VpcId parameter. All
     *         instances are launched into this subnet unless you specify
     *         otherwise when you create the instance. If you also specify a
     *         value for DefaultAvailabilityZone, the subnet must
     *         be in that zone. For information on default values and when this
     *         parameter is required, see the VpcId parameter
     *         description.
     */

    public String getDefaultSubnetId() {
        return this.defaultSubnetId;
    }

    /**
     *

     * The stack's default VPC subnet ID. This parameter is required if you
     * specify a value for the VpcId parameter. All instances are
     * launched into this subnet unless you specify otherwise when you create
     * the instance. If you also specify a value for
     * DefaultAvailabilityZone, the subnet must be in that zone.
     * For information on default values and when this parameter is required,
     * see the VpcId parameter description.
     *

     *
     * @param defaultSubnetId
     *        The stack's default VPC subnet ID. This parameter is required if
     *        you specify a value for the VpcId parameter. All
     *        instances are launched into this subnet unless you specify
     *        otherwise when you create the instance. If you also specify a
     *        value for DefaultAvailabilityZone, the subnet must be
     *        in that zone. For information on default values and when this
     *        parameter is required, see the VpcId parameter
     *        description.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withDefaultSubnetId(String defaultSubnetId) {
        setDefaultSubnetId(defaultSubnetId);
        return this;
    }

    /**
     *

     * A string that contains user-defined, custom JSON. It is used to override
     * the corresponding default stack configuration JSON values. The string
     * should be in the following format and must escape characters such as '"':
     *

     *

     * "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     * For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     *

     *
     * @param customJson
     *        A string that contains user-defined, custom JSON. It is used to
     *        override the corresponding default stack configuration JSON
     *        values. The string should be in the following format and must
     *        escape characters such as '"':

     *

     *        "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     *        For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     */

    public void setCustomJson(String customJson) {
        this.customJson = customJson;
    }

    /**
     *

     * A string that contains user-defined, custom JSON. It is used to override
     * the corresponding default stack configuration JSON values. The string
     * should be in the following format and must escape characters such as '"':
     *

     *

     * "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     * For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     *

     *
     * @return A string that contains user-defined, custom JSON. It is used to
     *         override the corresponding default stack configuration JSON
     *         values. The string should be in the following format and must
     *         escape characters such as '"':

     *

     *         "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     *         For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     */

    public String getCustomJson() {
        return this.customJson;
    }

    /**
     *

     * A string that contains user-defined, custom JSON. It is used to override
     * the corresponding default stack configuration JSON values. The string
     * should be in the following format and must escape characters such as '"':
     *

     *

     * "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     * For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     *

     *
     * @param customJson
     *        A string that contains user-defined, custom JSON. It is used to
     *        override the corresponding default stack configuration JSON
     *        values. The string should be in the following format and must
     *        escape characters such as '"':

     *

     *        "{\"key1\": \"value1\", \"key2\": \"value2\",...}"
     *

     *

     *        For more information on custom JSON, see Use Custom JSON to Modify the Stack Configuration Attributes
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withCustomJson(String customJson) {
        setCustomJson(customJson);
        return this;
    }

    /**
     *

     * The configuration manager. When you clone a stack we recommend that you
     * use the configuration manager to specify the Chef version: 12, 11.10, or
     * 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for
     * Linux stacks is currently 11.4.
     *

     *
     * @param configurationManager
     *        The configuration manager. When you clone a stack we recommend
     *        that you use the configuration manager to specify the Chef
     *        version: 12, 11.10, or 11.4 for Linux stacks, or 12.2 for Windows
     *        stacks. The default value for Linux stacks is currently 11.4.
     */

    public void setConfigurationManager(
            StackConfigurationManager configurationManager) {
        this.configurationManager = configurationManager;
    }

    /**
     *

     * The configuration manager. When you clone a stack we recommend that you
     * use the configuration manager to specify the Chef version: 12, 11.10, or
     * 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for
     * Linux stacks is currently 11.4.
     *

     *
     * @return The configuration manager. When you clone a stack we recommend
     *         that you use the configuration manager to specify the Chef
     *         version: 12, 11.10, or 11.4 for Linux stacks, or 12.2 for Windows
     *         stacks. The default value for Linux stacks is currently 11.4.
     */

    public StackConfigurationManager getConfigurationManager() {
        return this.configurationManager;
    }

    /**
     *

     * The configuration manager. When you clone a stack we recommend that you
     * use the configuration manager to specify the Chef version: 12, 11.10, or
     * 11.4 for Linux stacks, or 12.2 for Windows stacks. The default value for
     * Linux stacks is currently 11.4.
     *

     *
     * @param configurationManager
     *        The configuration manager. When you clone a stack we recommend
     *        that you use the configuration manager to specify the Chef
     *        version: 12, 11.10, or 11.4 for Linux stacks, or 12.2 for Windows
     *        stacks. The default value for Linux stacks is currently 11.4.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withConfigurationManager(
            StackConfigurationManager configurationManager) {
        setConfigurationManager(configurationManager);
        return this;
    }

    /**
     *

     * A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more
     * information, see Create a New Stack.
     *

     *
     * @param chefConfiguration
     *        A ChefConfiguration object that specifies whether to
     *        enable Berkshelf and the Berkshelf version on Chef 11.10 stacks.
     *        For more information, see Create a New Stack.
     */

    public void setChefConfiguration(ChefConfiguration chefConfiguration) {
        this.chefConfiguration = chefConfiguration;
    }

    /**
     *

     * A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more
     * information, see Create a New Stack.
     *

     *
     * @return A ChefConfiguration object that specifies whether to
     *         enable Berkshelf and the Berkshelf version on Chef 11.10 stacks.
     *         For more information, see Create a New Stack.
     */

    public ChefConfiguration getChefConfiguration() {
        return this.chefConfiguration;
    }

    /**
     *

     * A ChefConfiguration object that specifies whether to enable
     * Berkshelf and the Berkshelf version on Chef 11.10 stacks. For more
     * information, see Create a New Stack.
     *

     *
     * @param chefConfiguration
     *        A ChefConfiguration object that specifies whether to
     *        enable Berkshelf and the Berkshelf version on Chef 11.10 stacks.
     *        For more information, see Create a New Stack.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withChefConfiguration(
            ChefConfiguration chefConfiguration) {
        setChefConfiguration(chefConfiguration);
        return this;
    }

    /**
     *

     * Whether to use custom cookbooks.
     *

     *
     * @param useCustomCookbooks
     *        Whether to use custom cookbooks.
     */

    public void setUseCustomCookbooks(Boolean useCustomCookbooks) {
        this.useCustomCookbooks = useCustomCookbooks;
    }

    /**
     *

     * Whether to use custom cookbooks.
     *

     *
     * @return Whether to use custom cookbooks.
     */

    public Boolean getUseCustomCookbooks() {
        return this.useCustomCookbooks;
    }

    /**
     *

     * Whether to use custom cookbooks.
     *

     *
     * @param useCustomCookbooks
     *        Whether to use custom cookbooks.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withUseCustomCookbooks(Boolean useCustomCookbooks) {
        setUseCustomCookbooks(useCustomCookbooks);
        return this;
    }

    /**
     *

     * Whether to use custom cookbooks.
     *

     *
     * @return Whether to use custom cookbooks.
     */

    public Boolean isUseCustomCookbooks() {
        return this.useCustomCookbooks;
    }

    /**
     *

     * Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.
     *

     *

     * AWS OpsWorks provides a standard set of built-in security groups, one for
     * each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own
     * custom security groups. UseOpsworksSecurityGroups has the
     * following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate built-in
     * security group with each layer (default setting). You can associate
     * additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security groups with
     * layers. You must create appropriate Amazon Elastic Compute Cloud (Amazon
     * EC2) security groups and associate a security group with each layer that
     * you create. However, you can still manually associate a built-in security
     * group with a layer on creation; custom security groups are required only
     * for those layers that need custom settings.

     *

     *

     * For more information, see Create a New Stack.
     *

     *
     * @param useOpsworksSecurityGroups
     *        Whether to associate the AWS OpsWorks built-in security groups
     *        with the stack's layers.

     *

     *        AWS OpsWorks provides a standard set of built-in security groups,
     *        one for each layer, which are associated with layers by default.
     *        With UseOpsworksSecurityGroups you can instead
     *        provide your own custom security groups.
     *        UseOpsworksSecurityGroups has the following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate
     *        built-in security group with each layer (default setting). You can
     *        associate additional security groups with a layer after you create
     *        it but you cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security
     *        groups with layers. You must create appropriate Amazon Elastic
     *        Compute Cloud (Amazon EC2) security groups and associate a
     *        security group with each layer that you create. However, you can
     *        still manually associate a built-in security group with a layer on
     *        creation; custom security groups are required only for those
     *        layers that need custom settings.

     *

     *

     *        For more information, see Create a New Stack.
     */

    public void setUseOpsworksSecurityGroups(Boolean useOpsworksSecurityGroups) {
        this.useOpsworksSecurityGroups = useOpsworksSecurityGroups;
    }

    /**
     *

     * Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.
     *

     *

     * AWS OpsWorks provides a standard set of built-in security groups, one for
     * each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own
     * custom security groups. UseOpsworksSecurityGroups has the
     * following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate built-in
     * security group with each layer (default setting). You can associate
     * additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security groups with
     * layers. You must create appropriate Amazon Elastic Compute Cloud (Amazon
     * EC2) security groups and associate a security group with each layer that
     * you create. However, you can still manually associate a built-in security
     * group with a layer on creation; custom security groups are required only
     * for those layers that need custom settings.

     *

     *

     * For more information, see Create a New Stack.
     *

     *
     * @return Whether to associate the AWS OpsWorks built-in security groups
     *         with the stack's layers.

     *

     *         AWS OpsWorks provides a standard set of built-in security groups,
     *         one for each layer, which are associated with layers by default.
     *         With UseOpsworksSecurityGroups you can instead
     *         provide your own custom security groups.
     *         UseOpsworksSecurityGroups has the following
     *         settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate
     *         built-in security group with each layer (default setting). You
     *         can associate additional security groups with a layer after you
     *         create it but you cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security
     *         groups with layers. You must create appropriate Amazon Elastic
     *         Compute Cloud (Amazon EC2) security groups and associate a
     *         security group with each layer that you create. However, you can
     *         still manually associate a built-in security group with a layer
     *         on creation; custom security groups are required only for those
     *         layers that need custom settings.

     *

     *

     *         For more information, see Create a New Stack.
     */

    public Boolean getUseOpsworksSecurityGroups() {
        return this.useOpsworksSecurityGroups;
    }

    /**
     *

     * Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.
     *

     *

     * AWS OpsWorks provides a standard set of built-in security groups, one for
     * each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own
     * custom security groups. UseOpsworksSecurityGroups has the
     * following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate built-in
     * security group with each layer (default setting). You can associate
     * additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security groups with
     * layers. You must create appropriate Amazon Elastic Compute Cloud (Amazon
     * EC2) security groups and associate a security group with each layer that
     * you create. However, you can still manually associate a built-in security
     * group with a layer on creation; custom security groups are required only
     * for those layers that need custom settings.

     *

     *

     * For more information, see Create a New Stack.
     *

     *
     * @param useOpsworksSecurityGroups
     *        Whether to associate the AWS OpsWorks built-in security groups
     *        with the stack's layers.

     *

     *        AWS OpsWorks provides a standard set of built-in security groups,
     *        one for each layer, which are associated with layers by default.
     *        With UseOpsworksSecurityGroups you can instead
     *        provide your own custom security groups.
     *        UseOpsworksSecurityGroups has the following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate
     *        built-in security group with each layer (default setting). You can
     *        associate additional security groups with a layer after you create
     *        it but you cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security
     *        groups with layers. You must create appropriate Amazon Elastic
     *        Compute Cloud (Amazon EC2) security groups and associate a
     *        security group with each layer that you create. However, you can
     *        still manually associate a built-in security group with a layer on
     *        creation; custom security groups are required only for those
     *        layers that need custom settings.

     *

     *

     *        For more information, see Create a New Stack.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withUseOpsworksSecurityGroups(
            Boolean useOpsworksSecurityGroups) {
        setUseOpsworksSecurityGroups(useOpsworksSecurityGroups);
        return this;
    }

    /**
     *

     * Whether to associate the AWS OpsWorks built-in security groups with the
     * stack's layers.
     *

     *

     * AWS OpsWorks provides a standard set of built-in security groups, one for
     * each layer, which are associated with layers by default. With
     * UseOpsworksSecurityGroups you can instead provide your own
     * custom security groups. UseOpsworksSecurityGroups has the
     * following settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate built-in
     * security group with each layer (default setting). You can associate
     * additional security groups with a layer after you create it but you
     * cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security groups with
     * layers. You must create appropriate Amazon Elastic Compute Cloud (Amazon
     * EC2) security groups and associate a security group with each layer that
     * you create. However, you can still manually associate a built-in security
     * group with a layer on creation; custom security groups are required only
     * for those layers that need custom settings.

     *

     *

     * For more information, see Create a New Stack.
     *

     *
     * @return Whether to associate the AWS OpsWorks built-in security groups
     *         with the stack's layers.

     *

     *         AWS OpsWorks provides a standard set of built-in security groups,
     *         one for each layer, which are associated with layers by default.
     *         With UseOpsworksSecurityGroups you can instead
     *         provide your own custom security groups.
     *         UseOpsworksSecurityGroups has the following
     *         settings:
     *

     *

     *
True - AWS OpsWorks automatically associates the appropriate
     *         built-in security group with each layer (default setting). You
     *         can associate additional security groups with a layer after you
     *         create it but you cannot delete the built-in security group.

     *
False - AWS OpsWorks does not associate built-in security
     *         groups with layers. You must create appropriate Amazon Elastic
     *         Compute Cloud (Amazon EC2) security groups and associate a
     *         security group with each layer that you create. However, you can
     *         still manually associate a built-in security group with a layer
     *         on creation; custom security groups are required only for those
     *         layers that need custom settings.

     *

     *

     *         For more information, see Create a New Stack.
     */

    public Boolean isUseOpsworksSecurityGroups() {
        return this.useOpsworksSecurityGroups;
    }

    /**
     * @param customCookbooksSource
     */

    public void setCustomCookbooksSource(Source customCookbooksSource) {
        this.customCookbooksSource = customCookbooksSource;
    }

    /**
     * @return
     */

    public Source getCustomCookbooksSource() {
        return this.customCookbooksSource;
    }

    /**
     * @param customCookbooksSource
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withCustomCookbooksSource(
            Source customCookbooksSource) {
        setCustomCookbooksSource(customCookbooksSource);
        return this;
    }

    /**
     *

     * A default Amazon EC2 key pair name. The default value is none. If you
     * specify a key pair name, AWS OpsWorks installs the public key on the
     * instance and you can use the private key with an SSH client to log in to
     * the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by specifying a
     * different key pair, or no key pair, when you  create an instance.
     *

     *
     * @param defaultSshKeyName
     *        A default Amazon EC2 key pair name. The default value is none. If
     *        you specify a key pair name, AWS OpsWorks installs the public key
     *        on the instance and you can use the private key with an SSH client
     *        to log in to the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by
     *        specifying a different key pair, or no key pair, when you  create an instance.
     */

    public void setDefaultSshKeyName(String defaultSshKeyName) {
        this.defaultSshKeyName = defaultSshKeyName;
    }

    /**
     *

     * A default Amazon EC2 key pair name. The default value is none. If you
     * specify a key pair name, AWS OpsWorks installs the public key on the
     * instance and you can use the private key with an SSH client to log in to
     * the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by specifying a
     * different key pair, or no key pair, when you  create an instance.
     *

     *
     * @return A default Amazon EC2 key pair name. The default value is none. If
     *         you specify a key pair name, AWS OpsWorks installs the public key
     *         on the instance and you can use the private key with an SSH
     *         client to log in to the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by
     *         specifying a different key pair, or no key pair, when you  create an instance.
     */

    public String getDefaultSshKeyName() {
        return this.defaultSshKeyName;
    }

    /**
     *

     * A default Amazon EC2 key pair name. The default value is none. If you
     * specify a key pair name, AWS OpsWorks installs the public key on the
     * instance and you can use the private key with an SSH client to log in to
     * the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by specifying a
     * different key pair, or no key pair, when you  create an instance.
     *

     *
     * @param defaultSshKeyName
     *        A default Amazon EC2 key pair name. The default value is none. If
     *        you specify a key pair name, AWS OpsWorks installs the public key
     *        on the instance and you can use the private key with an SSH client
     *        to log in to the instance. For more information, see  Using SSH to Communicate with an Instance and  Managing SSH Access. You can override this setting by
     *        specifying a different key pair, or no key pair, when you  create an instance.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withDefaultSshKeyName(String defaultSshKeyName) {
        setDefaultSshKeyName(defaultSshKeyName);
        return this;
    }

    /**
     *

     * Whether to clone the source stack's permissions.
     *

     *
     * @param clonePermissions
     *        Whether to clone the source stack's permissions.
     */

    public void setClonePermissions(Boolean clonePermissions) {
        this.clonePermissions = clonePermissions;
    }

    /**
     *

     * Whether to clone the source stack's permissions.
     *

     *
     * @return Whether to clone the source stack's permissions.
     */

    public Boolean getClonePermissions() {
        return this.clonePermissions;
    }

    /**
     *

     * Whether to clone the source stack's permissions.
     *

     *
     * @param clonePermissions
     *        Whether to clone the source stack's permissions.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withClonePermissions(Boolean clonePermissions) {
        setClonePermissions(clonePermissions);
        return this;
    }

    /**
     *

     * Whether to clone the source stack's permissions.
     *

     *
     * @return Whether to clone the source stack's permissions.
     */

    public Boolean isClonePermissions() {
        return this.clonePermissions;
    }

    /**
     *

     * A list of source stack app IDs to be included in the cloned stack.
     *

     *
     * @return A list of source stack app IDs to be included in the cloned
     *         stack.
     */

    public java.util.List<String> getCloneAppIds() {
        if (cloneAppIds == null) {
            cloneAppIds = new com.amazonaws.internal.SdkInternalList<String>();
        }
        return cloneAppIds;
    }

    /**
     *

     * A list of source stack app IDs to be included in the cloned stack.
     *

     *
     * @param cloneAppIds
     *        A list of source stack app IDs to be included in the cloned stack.
     */

    public void setCloneAppIds(java.util.Collection<String> cloneAppIds) {
        if (cloneAppIds == null) {
            this.cloneAppIds = null;
            return;
        }

        this.cloneAppIds = new com.amazonaws.internal.SdkInternalList<String>(
                cloneAppIds);
    }

    /**
     *

     * A list of source stack app IDs to be included in the cloned stack.
     *

     *

     * NOTE: This method appends the values to the existing list (if
     * any). Use {@link #setCloneAppIds(java.util.Collection)} or
     * {@link #withCloneAppIds(java.util.Collection)} if you want to override
     * the existing values.
     *

     *
     * @param cloneAppIds
     *        A list of source stack app IDs to be included in the cloned stack.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withCloneAppIds(String... cloneAppIds) {
        if (this.cloneAppIds == null) {
            setCloneAppIds(new com.amazonaws.internal.SdkInternalList<String>(
                    cloneAppIds.length));
        }
        for (String ele : cloneAppIds) {
            this.cloneAppIds.add(ele);
        }
        return this;
    }

    /**
     *

     * A list of source stack app IDs to be included in the cloned stack.
     *

     *
     * @param cloneAppIds
     *        A list of source stack app IDs to be included in the cloned stack.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withCloneAppIds(
            java.util.Collection<String> cloneAppIds) {
        setCloneAppIds(cloneAppIds);
        return this;
    }

    /**
     *

     * The default root device type. This value is used by default for all
     * instances in the cloned stack, but you can override it when you create an
     * instance. For more information, see Storage for the Root Device.
     *

     *
     * @param defaultRootDeviceType
     *        The default root device type. This value is used by default for
     *        all instances in the cloned stack, but you can override it when
     *        you create an instance. For more information, see Storage for the Root Device.
     * @see RootDeviceType
     */

    public void setDefaultRootDeviceType(String defaultRootDeviceType) {
        this.defaultRootDeviceType = defaultRootDeviceType;
    }

    /**
     *

     * The default root device type. This value is used by default for all
     * instances in the cloned stack, but you can override it when you create an
     * instance. For more information, see Storage for the Root Device.
     *

     *
     * @return The default root device type. This value is used by default for
     *         all instances in the cloned stack, but you can override it when
     *         you create an instance. For more information, see Storage for the Root Device.
     * @see RootDeviceType
     */

    public String getDefaultRootDeviceType() {
        return this.defaultRootDeviceType;
    }

    /**
     *

     * The default root device type. This value is used by default for all
     * instances in the cloned stack, but you can override it when you create an
     * instance. For more information, see Storage for the Root Device.
     *

     *
     * @param defaultRootDeviceType
     *        The default root device type. This value is used by default for
     *        all instances in the cloned stack, but you can override it when
     *        you create an instance. For more information, see Storage for the Root Device.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see RootDeviceType
     */

    public CloneStackRequest withDefaultRootDeviceType(
            String defaultRootDeviceType) {
        setDefaultRootDeviceType(defaultRootDeviceType);
        return this;
    }

    /**
     *

     * The default root device type. This value is used by default for all
     * instances in the cloned stack, but you can override it when you create an
     * instance. For more information, see Storage for the Root Device.
     *

     *
     * @param defaultRootDeviceType
     *        The default root device type. This value is used by default for
     *        all instances in the cloned stack, but you can override it when
     *        you create an instance. For more information, see Storage for the Root Device.
     * @see RootDeviceType
     */

    public void setDefaultRootDeviceType(RootDeviceType defaultRootDeviceType) {
        this.defaultRootDeviceType = defaultRootDeviceType.toString();
    }

    /**
     *

     * The default root device type. This value is used by default for all
     * instances in the cloned stack, but you can override it when you create an
     * instance. For more information, see Storage for the Root Device.
     *

     *
     * @param defaultRootDeviceType
     *        The default root device type. This value is used by default for
     *        all instances in the cloned stack, but you can override it when
     *        you create an instance. For more information, see Storage for the Root Device.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     * @see RootDeviceType
     */

    public CloneStackRequest withDefaultRootDeviceType(
            RootDeviceType defaultRootDeviceType) {
        setDefaultRootDeviceType(defaultRootDeviceType);
        return this;
    }

    /**
     *

     * The default AWS OpsWorks agent version. You have the following options:
     *

     *

     *
Auto-update - Set this parameter to LATEST. AWS OpsWorks
     * automatically installs new agent versions on the stack's instances as
     * soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent version.
     * To update the agent version, you must edit the stack configuration and
     * specify a new version. AWS OpsWorks then automatically installs that
     * version on the stack's instances.

     *

     *

     * The default setting is LATEST. To specify an agent version,
     * you must use the complete version number, not the abbreviated number
     * shown on the console. For a list of available agent version numbers, call
     * DescribeAgentVersions.
     *

     * <note>You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.</note>
     *
     * @param agentVersion
     *        The default AWS OpsWorks agent version. You have the following
     *        options:

     *

     *
Auto-update - Set this parameter to LATEST. AWS
     *        OpsWorks automatically installs new agent versions on the stack's
     *        instances as soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent
     *        version. To update the agent version, you must edit the stack
     *        configuration and specify a new version. AWS OpsWorks then
     *        automatically installs that version on the stack's instances.

     *

     *

     *        The default setting is LATEST. To specify an agent
     *        version, you must use the complete version number, not the
     *        abbreviated number shown on the console. For a list of available
     *        agent version numbers, call DescribeAgentVersions.
     *

     *        <note>You can also specify an agent version when you create or
     *        update an instance, which overrides the stack's default setting.
     */

    public void setAgentVersion(String agentVersion) {
        this.agentVersion = agentVersion;
    }

    /**
     *

     * The default AWS OpsWorks agent version. You have the following options:
     *

     *

     *
Auto-update - Set this parameter to LATEST. AWS OpsWorks
     * automatically installs new agent versions on the stack's instances as
     * soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent version.
     * To update the agent version, you must edit the stack configuration and
     * specify a new version. AWS OpsWorks then automatically installs that
     * version on the stack's instances.

     *

     *

     * The default setting is LATEST. To specify an agent version,
     * you must use the complete version number, not the abbreviated number
     * shown on the console. For a list of available agent version numbers, call
     * DescribeAgentVersions.
     *

     * <note>You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.</note>
     *
     * @return The default AWS OpsWorks agent version. You have the following
     *         options:

     *

     *
Auto-update - Set this parameter to LATEST. AWS
     *         OpsWorks automatically installs new agent versions on the stack's
     *         instances as soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent
     *         version. To update the agent version, you must edit the stack
     *         configuration and specify a new version. AWS OpsWorks then
     *         automatically installs that version on the stack's instances.

     *

     *

     *         The default setting is LATEST. To specify an agent
     *         version, you must use the complete version number, not the
     *         abbreviated number shown on the console. For a list of available
     *         agent version numbers, call DescribeAgentVersions.
     *

     *         <note>You can also specify an agent version when you create or
     *         update an instance, which overrides the stack's default setting.
     */

    public String getAgentVersion() {
        return this.agentVersion;
    }

    /**
     *

     * The default AWS OpsWorks agent version. You have the following options:
     *

     *

     *
Auto-update - Set this parameter to LATEST. AWS OpsWorks
     * automatically installs new agent versions on the stack's instances as
     * soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent version.
     * To update the agent version, you must edit the stack configuration and
     * specify a new version. AWS OpsWorks then automatically installs that
     * version on the stack's instances.

     *

     *

     * The default setting is LATEST. To specify an agent version,
     * you must use the complete version number, not the abbreviated number
     * shown on the console. For a list of available agent version numbers, call
     * DescribeAgentVersions.
     *

     * <note>You can also specify an agent version when you create or update an
     * instance, which overrides the stack's default setting.</note>
     *
     * @param agentVersion
     *        The default AWS OpsWorks agent version. You have the following
     *        options:

     *

     *
Auto-update - Set this parameter to LATEST. AWS
     *        OpsWorks automatically installs new agent versions on the stack's
     *        instances as soon as they are available.

     *
Fixed version - Set this parameter to your preferred agent
     *        version. To update the agent version, you must edit the stack
     *        configuration and specify a new version. AWS OpsWorks then
     *        automatically installs that version on the stack's instances.

     *

     *

     *        The default setting is LATEST. To specify an agent
     *        version, you must use the complete version number, not the
     *        abbreviated number shown on the console. For a list of available
     *        agent version numbers, call DescribeAgentVersions.
     *

     *        <note>You can also specify an agent version when you create or
     *        update an instance, which overrides the stack's default setting.
     * @return Returns a reference to this object so that method calls can be
     *         chained together.
     */

    public CloneStackRequest withAgentVersion(String agentVersion) {
        setAgentVersion(agentVersion);
        return this;
    }

    /**
     * Returns a string representation of this object; useful for testing and
     * debugging.
     *
     * @return A string representation of this object.
     *
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("{");
        if (getSourceStackId() != null)
            sb.append("SourceStackId: " + getSourceStackId() + ",");
        if (getName() != null)
            sb.append("Name: " + getName() + ",");
        if (getRegion() != null)
            sb.append("Region: " + getRegion() + ",");
        if (getVpcId() != null)
            sb.append("VpcId: " + getVpcId() + ",");
        if (getAttributes() != null)
            sb.append("Attributes: " + getAttributes() + ",");
        if (getServiceRoleArn() != null)
            sb.append("ServiceRoleArn: " + getServiceRoleArn() + ",");
        if (getDefaultInstanceProfileArn() != null)
            sb.append("DefaultInstanceProfileArn: "
                    + getDefaultInstanceProfileArn() + ",");
        if (getDefaultOs() != null)
            sb.append("DefaultOs: " + getDefaultOs() + ",");
        if (getHostnameTheme() != null)
            sb.append("HostnameTheme: " + getHostnameTheme() + ",");
        if (getDefaultAvailabilityZone() != null)
            sb.append("DefaultAvailabilityZone: "
                    + getDefaultAvailabilityZone() + ",");
        if (getDefaultSubnetId() != null)
            sb.append("DefaultSubnetId: " + getDefaultSubnetId() + ",");
        if (getCustomJson() != null)
            sb.append("CustomJson: " + getCustomJson() + ",");
        if (getConfigurationManager() != null)
            sb.append("ConfigurationManager: " + getConfigurationManager()
                    + ",");
        if (getChefConfiguration() != null)
            sb.append("ChefConfiguration: " + getChefConfiguration() + ",");
        if (getUseCustomCookbooks() != null)
            sb.append("UseCustomCookbooks: " + getUseCustomCookbooks() + ",");
        if (getUseOpsworksSecurityGroups() != null)
            sb.append("UseOpsworksSecurityGroups: "
                    + getUseOpsworksSecurityGroups() + ",");
        if (getCustomCookbooksSource() != null)
            sb.append("CustomCookbooksSource: " + getCustomCookbooksSource()
                    + ",");
        if (getDefaultSshKeyName() != null)
            sb.append("DefaultSshKeyName: " + getDefaultSshKeyName() + ",");
        if (getClonePermissions() != null)
            sb.append("ClonePermissions: " + getClonePermissions() + ",");
        if (getCloneAppIds() != null)
            sb.append("CloneAppIds: " + getCloneAppIds() + ",");
        if (getDefaultRootDeviceType() != null)
            sb.append("DefaultRootDeviceType: " + getDefaultRootDeviceType()
                    + ",");
        if (getAgentVersion() != null)
            sb.append("AgentVersion: " + getAgentVersion());
        sb.append("}");
        return sb.toString();
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;

        if (obj instanceof CloneStackRequest == false)
            return false;
        CloneStackRequest other = (CloneStackRequest) obj;
        if (other.getSourceStackId() == null ^ this.getSourceStackId() == null)
            return false;
        if (other.getSourceStackId() != null
                && other.getSourceStackId().equals(this.getSourceStackId()) == false)
            return false;
        if (other.getName() == null ^ this.getName() == null)
            return false;
        if (other.getName() != null
                && other.getName().equals(this.getName()) == false)
            return false;
        if (other.getRegion() == null ^ this.getRegion() == null)
            return false;
        if (other.getRegion() != null
                && other.getRegion().equals(this.getRegion()) == false)
            return false;
        if (other.getVpcId() == null ^ this.getVpcId() == null)
            return false;
        if (other.getVpcId() != null
                && other.getVpcId().equals(this.getVpcId()) == false)
            return false;
        if (other.getAttributes() == null ^ this.getAttributes() == null)
            return false;
        if (other.getAttributes() != null
                && other.getAttributes().equals(this.getAttributes()) == false)
            return false;
        if (other.getServiceRoleArn() == null
                ^ this.getServiceRoleArn() == null)
            return false;
        if (other.getServiceRoleArn() != null
                && other.getServiceRoleArn().equals(this.getServiceRoleArn()) == false)
            return false;
        if (other.getDefaultInstanceProfileArn() == null
                ^ this.getDefaultInstanceProfileArn() == null)
            return false;
        if (other.getDefaultInstanceProfileArn() != null
                && other.getDefaultInstanceProfileArn().equals(
                        this.getDefaultInstanceProfileArn()) == false)
            return false;
        if (other.getDefaultOs() == null ^ this.getDefaultOs() == null)
            return false;
        if (other.getDefaultOs() != null
                && other.getDefaultOs().equals(this.getDefaultOs()) == false)
            return false;
        if (other.getHostnameTheme() == null ^ this.getHostnameTheme() == null)
            return false;
        if (other.getHostnameTheme() != null
                && other.getHostnameTheme().equals(this.getHostnameTheme()) == false)
            return false;
        if (other.getDefaultAvailabilityZone() == null
                ^ this.getDefaultAvailabilityZone() == null)
            return false;
        if (other.getDefaultAvailabilityZone() != null
                && other.getDefaultAvailabilityZone().equals(
                        this.getDefaultAvailabilityZone()) == false)
            return false;
        if (other.getDefaultSubnetId() == null
                ^ this.getDefaultSubnetId() == null)
            return false;
        if (other.getDefaultSubnetId() != null
                && other.getDefaultSubnetId().equals(this.getDefaultSubnetId()) == false)
            return false;
        if (other.getCustomJson() == null ^ this.getCustomJson() == null)
            return false;
        if (other.getCustomJson() != null
                && other.getCustomJson().equals(this.getCustomJson()) == false)
            return false;
        if (other.getConfigurationManager() == null
                ^ this.getConfigurationManager() == null)
            return false;
        if (other.getConfigurationManager() != null
                && other.getConfigurationManager().equals(
                        this.getConfigurationManager()) == false)
            return false;
        if (other.getChefConfiguration() == null
                ^ this.getChefConfiguration() == null)
            return false;
        if (other.getChefConfiguration() != null
                && other.getChefConfiguration().equals(
                        this.getChefConfiguration()) == false)
            return false;
        if (other.getUseCustomCookbooks() == null
                ^ this.getUseCustomCookbooks() == null)
            return false;
        if (other.getUseCustomCookbooks() != null
                && other.getUseCustomCookbooks().equals(
                        this.getUseCustomCookbooks()) == false)
            return false;
        if (other.getUseOpsworksSecurityGroups() == null
                ^ this.getUseOpsworksSecurityGroups() == null)
            return false;
        if (other.getUseOpsworksSecurityGroups() != null
                && other.getUseOpsworksSecurityGroups().equals(
                        this.getUseOpsworksSecurityGroups()) == false)
            return false;
        if (other.getCustomCookbooksSource() == null
                ^ this.getCustomCookbooksSource() == null)
            return false;
        if (other.getCustomCookbooksSource() != null
                && other.getCustomCookbooksSource().equals(
                        this.getCustomCookbooksSource()) == false)
            return false;
        if (other.getDefaultSshKeyName() == null
                ^ this.getDefaultSshKeyName() == null)
            return false;
        if (other.getDefaultSshKeyName() != null
                && other.getDefaultSshKeyName().equals(
                        this.getDefaultSshKeyName()) == false)
            return false;
        if (other.getClonePermissions() == null
                ^ this.getClonePermissions() == null)
            return false;
        if (other.getClonePermissions() != null
                && other.getClonePermissions().equals(
                        this.getClonePermissions()) == false)
            return false;
        if (other.getCloneAppIds() == null ^ this.getCloneAppIds() == null)
            return false;
        if (other.getCloneAppIds() != null
                && other.getCloneAppIds().equals(this.getCloneAppIds()) == false)
            return false;
        if (other.getDefaultRootDeviceType() == null
                ^ this.getDefaultRootDeviceType() == null)
            return false;
        if (other.getDefaultRootDeviceType() != null
                && other.getDefaultRootDeviceType().equals(
                        this.getDefaultRootDeviceType()) == false)
            return false;
        if (other.getAgentVersion() == null ^ this.getAgentVersion() == null)
            return false;
        if (other.getAgentVersion() != null
                && other.getAgentVersion().equals(this.getAgentVersion()) == false)
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int hashCode = 1;

        hashCode = prime
                * hashCode
                + ((getSourceStackId() == null) ? 0 : getSourceStackId()
                        .hashCode());
        hashCode = prime * hashCode
                + ((getName() == null) ? 0 : getName().hashCode());
        hashCode = prime * hashCode
                + ((getRegion() == null) ? 0 : getRegion().hashCode());
        hashCode = prime * hashCode
                + ((getVpcId() == null) ? 0 : getVpcId().hashCode());
        hashCode = prime * hashCode
                + ((getAttributes() == null) ? 0 : getAttributes().hashCode());
        hashCode = prime
                * hashCode
                + ((getServiceRoleArn() == null) ? 0 : getServiceRoleArn()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getDefaultInstanceProfileArn() == null) ? 0
                        : getDefaultInstanceProfileArn().hashCode());
        hashCode = prime * hashCode
                + ((getDefaultOs() == null) ? 0 : getDefaultOs().hashCode());
        hashCode = prime
                * hashCode
                + ((getHostnameTheme() == null) ? 0 : getHostnameTheme()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getDefaultAvailabilityZone() == null) ? 0
                        : getDefaultAvailabilityZone().hashCode());
        hashCode = prime
                * hashCode
                + ((getDefaultSubnetId() == null) ? 0 : getDefaultSubnetId()
                        .hashCode());
        hashCode = prime * hashCode
                + ((getCustomJson() == null) ? 0 : getCustomJson().hashCode());
        hashCode = prime
                * hashCode
                + ((getConfigurationManager() == null) ? 0
                        : getConfigurationManager().hashCode());
        hashCode = prime
                * hashCode
                + ((getChefConfiguration() == null) ? 0
                        : getChefConfiguration().hashCode());
        hashCode = prime
                * hashCode
                + ((getUseCustomCookbooks() == null) ? 0
                        : getUseCustomCookbooks().hashCode());
        hashCode = prime
                * hashCode
                + ((getUseOpsworksSecurityGroups() == null) ? 0
                        : getUseOpsworksSecurityGroups().hashCode());
        hashCode = prime
                * hashCode
                + ((getCustomCookbooksSource() == null) ? 0
                        : getCustomCookbooksSource().hashCode());
        hashCode = prime
                * hashCode
                + ((getDefaultSshKeyName() == null) ? 0
                        : getDefaultSshKeyName().hashCode());
        hashCode = prime
                * hashCode
                + ((getClonePermissions() == null) ? 0 : getClonePermissions()
                        .hashCode());
        hashCode = prime
                * hashCode
                + ((getCloneAppIds() == null) ? 0 : getCloneAppIds().hashCode());
        hashCode = prime
                * hashCode
                + ((getDefaultRootDeviceType() == null) ? 0
                        : getDefaultRootDeviceType().hashCode());
        hashCode = prime
                * hashCode
                + ((getAgentVersion() == null) ? 0 : getAgentVersion()
                        .hashCode());
        return hashCode;
    }

    @Override
    public CloneStackRequest clone() {
        return (CloneStackRequest) super.clone();
    }
}