
software.amazon.awssdk.services.organizations.model.CreateGovCloudAccountRequest Maven / Gradle / Ivy
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
package software.amazon.awssdk.services.organizations.model;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration;
import software.amazon.awssdk.core.SdkField;
import software.amazon.awssdk.core.SdkPojo;
import software.amazon.awssdk.core.protocol.MarshallLocation;
import software.amazon.awssdk.core.protocol.MarshallingType;
import software.amazon.awssdk.core.traits.ListTrait;
import software.amazon.awssdk.core.traits.LocationTrait;
import software.amazon.awssdk.core.util.DefaultSdkAutoConstructList;
import software.amazon.awssdk.core.util.SdkAutoConstructList;
import software.amazon.awssdk.utils.ToString;
import software.amazon.awssdk.utils.builder.CopyableBuilder;
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
/**
*/
@Generated("software.amazon.awssdk:codegen")
public final class CreateGovCloudAccountRequest extends OrganizationsRequest implements
ToCopyableBuilder {
private static final SdkField EMAIL_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Email")
.getter(getter(CreateGovCloudAccountRequest::email)).setter(setter(Builder::email))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Email").build()).build();
private static final SdkField ACCOUNT_NAME_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("AccountName").getter(getter(CreateGovCloudAccountRequest::accountName))
.setter(setter(Builder::accountName))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("AccountName").build()).build();
private static final SdkField ROLE_NAME_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("RoleName").getter(getter(CreateGovCloudAccountRequest::roleName)).setter(setter(Builder::roleName))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("RoleName").build()).build();
private static final SdkField IAM_USER_ACCESS_TO_BILLING_FIELD = SdkField. builder(MarshallingType.STRING)
.memberName("IamUserAccessToBilling").getter(getter(CreateGovCloudAccountRequest::iamUserAccessToBillingAsString))
.setter(setter(Builder::iamUserAccessToBilling))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("IamUserAccessToBilling").build())
.build();
private static final SdkField> TAGS_FIELD = SdkField
.> builder(MarshallingType.LIST)
.memberName("Tags")
.getter(getter(CreateGovCloudAccountRequest::tags))
.setter(setter(Builder::tags))
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Tags").build(),
ListTrait
.builder()
.memberLocationName(null)
.memberFieldInfo(
SdkField. builder(MarshallingType.SDK_POJO)
.constructor(Tag::builder)
.traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD)
.locationName("member").build()).build()).build()).build();
private static final List> SDK_FIELDS = Collections.unmodifiableList(Arrays.asList(EMAIL_FIELD,
ACCOUNT_NAME_FIELD, ROLE_NAME_FIELD, IAM_USER_ACCESS_TO_BILLING_FIELD, TAGS_FIELD));
private static final Map> SDK_NAME_TO_FIELD = memberNameToFieldInitializer();
private final String email;
private final String accountName;
private final String roleName;
private final String iamUserAccessToBilling;
private final List tags;
private CreateGovCloudAccountRequest(BuilderImpl builder) {
super(builder);
this.email = builder.email;
this.accountName = builder.accountName;
this.roleName = builder.roleName;
this.iamUserAccessToBilling = builder.iamUserAccessToBilling;
this.tags = builder.tags;
}
/**
*
* Specifies the email address of the owner to assign to the new member account in the commercial Region. This email
* address must not already be associated with another Amazon Web Services account. You must use a valid email
* address to complete account creation.
*
*
* The rules for a valid email address:
*
*
* -
*
* The address must be a minimum of 6 and a maximum of 64 characters long.
*
*
* -
*
* All characters must be 7-bit ASCII characters.
*
*
* -
*
* There must be one and only one @ symbol, which separates the local name from the domain name.
*
*
* -
*
* The local name can't contain any of the following characters:
*
*
* whitespace, " ' ( ) < > [ ] : ; , \ | % &
*
*
* -
*
* The local name can't begin with a dot (.)
*
*
* -
*
* The domain name can consist of only the characters [a-z],[A-Z],[0-9], hyphen (-), or dot (.)
*
*
* -
*
* The domain name can't begin or end with a hyphen (-) or dot (.)
*
*
* -
*
* The domain name must contain at least one dot
*
*
*
*
* You can't access the root user of the account or remove an account that was created with an invalid email
* address. Like all request parameters for CreateGovCloudAccount
, the request for the email address
* for the Amazon Web Services GovCloud (US) account originates from the commercial Region, not from the Amazon Web
* Services GovCloud (US) Region.
*
*
* @return Specifies the email address of the owner to assign to the new member account in the commercial Region.
* This email address must not already be associated with another Amazon Web Services account. You must use
* a valid email address to complete account creation.
*
* The rules for a valid email address:
*
*
* -
*
* The address must be a minimum of 6 and a maximum of 64 characters long.
*
*
* -
*
* All characters must be 7-bit ASCII characters.
*
*
* -
*
* There must be one and only one @ symbol, which separates the local name from the domain name.
*
*
* -
*
* The local name can't contain any of the following characters:
*
*
* whitespace, " ' ( ) < > [ ] : ; , \ | % &
*
*
* -
*
* The local name can't begin with a dot (.)
*
*
* -
*
* The domain name can consist of only the characters [a-z],[A-Z],[0-9], hyphen (-), or dot (.)
*
*
* -
*
* The domain name can't begin or end with a hyphen (-) or dot (.)
*
*
* -
*
* The domain name must contain at least one dot
*
*
*
*
* You can't access the root user of the account or remove an account that was created with an invalid email
* address. Like all request parameters for CreateGovCloudAccount
, the request for the email
* address for the Amazon Web Services GovCloud (US) account originates from the commercial Region, not from
* the Amazon Web Services GovCloud (US) Region.
*/
public final String email() {
return email;
}
/**
*
* The friendly name of the member account.
*
*
* The account name can consist of only the characters [a-z],[A-Z],[0-9], hyphen (-), or dot (.) You can't separate
* characters with a dash (–).
*
*
* @return The friendly name of the member account.
*
* The account name can consist of only the characters [a-z],[A-Z],[0-9], hyphen (-), or dot (.) You can't
* separate characters with a dash (–).
*/
public final String accountName() {
return accountName;
}
/**
*
* (Optional)
*
*
* The name of an IAM role that Organizations automatically preconfigures in the new member accounts in both the
* Amazon Web Services GovCloud (US) Region and in the commercial Region. This role trusts the management account,
* allowing users in the management account to assume the role, as permitted by the management account
* administrator. The role has administrator permissions in the new member account.
*
*
* If you don't specify this parameter, the role name defaults to OrganizationAccountAccessRole
.
*
*
* For more information about how to use this role to access the member account, see the following links:
*
*
* -
*
* Creating the OrganizationAccountAccessRole in an invited member account in the Organizations User
* Guide
*
*
* -
*
* Steps 2 and 3 in IAM Tutorial:
* Delegate access across Amazon Web Services accounts using IAM roles in the IAM User Guide
*
*
*
*
* The regex pattern that is used to validate this parameter. The
* pattern can include uppercase letters, lowercase letters, digits with no spaces, and any of the following
* characters: =,.@-
*
*
* @return (Optional)
*
* The name of an IAM role that Organizations automatically preconfigures in the new member accounts in both
* the Amazon Web Services GovCloud (US) Region and in the commercial Region. This role trusts the
* management account, allowing users in the management account to assume the role, as permitted by the
* management account administrator. The role has administrator permissions in the new member account.
*
*
* If you don't specify this parameter, the role name defaults to OrganizationAccountAccessRole
* .
*
*
* For more information about how to use this role to access the member account, see the following links:
*
*
* -
*
* Creating the OrganizationAccountAccessRole in an invited member account in the Organizations User
* Guide
*
*
* -
*
* Steps 2 and 3 in IAM
* Tutorial: Delegate access across Amazon Web Services accounts using IAM roles in the IAM User
* Guide
*
*
*
*
* The regex pattern that is used to validate this parameter.
* The pattern can include uppercase letters, lowercase letters, digits with no spaces, and any of the
* following characters: =,.@-
*/
public final String roleName() {
return roleName;
}
/**
*
* If set to ALLOW
, the new linked account in the commercial Region enables IAM users to access account
* billing information if they have the required permissions. If set to DENY
, only the root user
* of the new account can access account billing information. For more information, see About IAM access to the Billing and Cost Management console in the Amazon Web Services Billing and Cost
* Management User Guide.
*
*
* If you don't specify this parameter, the value defaults to ALLOW
, and IAM users and roles with the
* required permissions can access billing information for the new account.
*
*
* If the service returns an enum value that is not available in the current SDK version,
* {@link #iamUserAccessToBilling} will return {@link IAMUserAccessToBilling#UNKNOWN_TO_SDK_VERSION}. The raw value
* returned by the service is available from {@link #iamUserAccessToBillingAsString}.
*
*
* @return If set to ALLOW
, the new linked account in the commercial Region enables IAM users to access
* account billing information if they have the required permissions. If set to DENY
,
* only the root user of the new account can access account billing information. For more information, see
* About IAM access to the Billing and Cost Management console in the Amazon Web Services Billing
* and Cost Management User Guide.
*
* If you don't specify this parameter, the value defaults to ALLOW
, and IAM users and roles
* with the required permissions can access billing information for the new account.
* @see IAMUserAccessToBilling
*/
public final IAMUserAccessToBilling iamUserAccessToBilling() {
return IAMUserAccessToBilling.fromValue(iamUserAccessToBilling);
}
/**
*
* If set to ALLOW
, the new linked account in the commercial Region enables IAM users to access account
* billing information if they have the required permissions. If set to DENY
, only the root user
* of the new account can access account billing information. For more information, see About IAM access to the Billing and Cost Management console in the Amazon Web Services Billing and Cost
* Management User Guide.
*
*
* If you don't specify this parameter, the value defaults to ALLOW
, and IAM users and roles with the
* required permissions can access billing information for the new account.
*
*
* If the service returns an enum value that is not available in the current SDK version,
* {@link #iamUserAccessToBilling} will return {@link IAMUserAccessToBilling#UNKNOWN_TO_SDK_VERSION}. The raw value
* returned by the service is available from {@link #iamUserAccessToBillingAsString}.
*
*
* @return If set to ALLOW
, the new linked account in the commercial Region enables IAM users to access
* account billing information if they have the required permissions. If set to DENY
,
* only the root user of the new account can access account billing information. For more information, see
* About IAM access to the Billing and Cost Management console in the Amazon Web Services Billing
* and Cost Management User Guide.
*
* If you don't specify this parameter, the value defaults to ALLOW
, and IAM users and roles
* with the required permissions can access billing information for the new account.
* @see IAMUserAccessToBilling
*/
public final String iamUserAccessToBillingAsString() {
return iamUserAccessToBilling;
}
/**
* For responses, this returns true if the service returned a value for the Tags property. This DOES NOT check that
* the value is non-empty (for which, you should check the {@code isEmpty()} method on the property). This is useful
* because the SDK will never return a null collection or map, but you may need to differentiate between the service
* returning nothing (or null) and the service returning an empty collection or map. For requests, this returns true
* if a value for the property was specified in the request builder, and false if a value was not specified.
*/
public final boolean hasTags() {
return tags != null && !(tags instanceof SdkAutoConstructList);
}
/**
*
* A list of tags that you want to attach to the newly created account. These tags are attached to the commercial
* account associated with the GovCloud account, and not to the GovCloud account itself. To add tags to the actual
* GovCloud account, call the TagResource operation in the GovCloud region after the new GovCloud account
* exists.
*
*
* For each tag in the list, you must specify both a tag key and a value. You can set the value to an empty string,
* but you can't set it to null
. For more information about tagging, see Tagging Organizations
* resources in the Organizations User Guide.
*
*
*
* If any one of the tags is not valid or if you exceed the maximum allowed number of tags for an account, then the
* entire request fails and the account is not created.
*
*
*
* Attempts to modify the collection returned by this method will result in an UnsupportedOperationException.
*
*
* This method will never return null. If you would like to know whether the service returned this field (so that
* you can differentiate between null and empty), you can use the {@link #hasTags} method.
*
*
* @return A list of tags that you want to attach to the newly created account. These tags are attached to the
* commercial account associated with the GovCloud account, and not to the GovCloud account itself. To add
* tags to the actual GovCloud account, call the TagResource operation in the GovCloud region after
* the new GovCloud account exists.
*
* For each tag in the list, you must specify both a tag key and a value. You can set the value to an empty
* string, but you can't set it to null
. For more information about tagging, see Tagging Organizations
* resources in the Organizations User Guide.
*
*
*
* If any one of the tags is not valid or if you exceed the maximum allowed number of tags for an account,
* then the entire request fails and the account is not created.
*
*/
public final List tags() {
return tags;
}
@Override
public Builder toBuilder() {
return new BuilderImpl(this);
}
public static Builder builder() {
return new BuilderImpl();
}
public static Class extends Builder> serializableBuilderClass() {
return BuilderImpl.class;
}
@Override
public final int hashCode() {
int hashCode = 1;
hashCode = 31 * hashCode + super.hashCode();
hashCode = 31 * hashCode + Objects.hashCode(email());
hashCode = 31 * hashCode + Objects.hashCode(accountName());
hashCode = 31 * hashCode + Objects.hashCode(roleName());
hashCode = 31 * hashCode + Objects.hashCode(iamUserAccessToBillingAsString());
hashCode = 31 * hashCode + Objects.hashCode(hasTags() ? tags() : null);
return hashCode;
}
@Override
public final boolean equals(Object obj) {
return super.equals(obj) && equalsBySdkFields(obj);
}
@Override
public final boolean equalsBySdkFields(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof CreateGovCloudAccountRequest)) {
return false;
}
CreateGovCloudAccountRequest other = (CreateGovCloudAccountRequest) obj;
return Objects.equals(email(), other.email()) && Objects.equals(accountName(), other.accountName())
&& Objects.equals(roleName(), other.roleName())
&& Objects.equals(iamUserAccessToBillingAsString(), other.iamUserAccessToBillingAsString())
&& hasTags() == other.hasTags() && Objects.equals(tags(), other.tags());
}
/**
* Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be
* redacted from this string using a placeholder value.
*/
@Override
public final String toString() {
return ToString.builder("CreateGovCloudAccountRequest")
.add("Email", email() == null ? null : "*** Sensitive Data Redacted ***")
.add("AccountName", accountName() == null ? null : "*** Sensitive Data Redacted ***").add("RoleName", roleName())
.add("IamUserAccessToBilling", iamUserAccessToBillingAsString()).add("Tags", hasTags() ? tags() : null).build();
}
public final Optional getValueForField(String fieldName, Class clazz) {
switch (fieldName) {
case "Email":
return Optional.ofNullable(clazz.cast(email()));
case "AccountName":
return Optional.ofNullable(clazz.cast(accountName()));
case "RoleName":
return Optional.ofNullable(clazz.cast(roleName()));
case "IamUserAccessToBilling":
return Optional.ofNullable(clazz.cast(iamUserAccessToBillingAsString()));
case "Tags":
return Optional.ofNullable(clazz.cast(tags()));
default:
return Optional.empty();
}
}
@Override
public final List> sdkFields() {
return SDK_FIELDS;
}
@Override
public final Map> sdkFieldNameToField() {
return SDK_NAME_TO_FIELD;
}
private static Map> memberNameToFieldInitializer() {
Map> map = new HashMap<>();
map.put("Email", EMAIL_FIELD);
map.put("AccountName", ACCOUNT_NAME_FIELD);
map.put("RoleName", ROLE_NAME_FIELD);
map.put("IamUserAccessToBilling", IAM_USER_ACCESS_TO_BILLING_FIELD);
map.put("Tags", TAGS_FIELD);
return Collections.unmodifiableMap(map);
}
private static Function