// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.accesscontextmanager;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class AuthorizedOrgsDescArgs extends com.pulumi.resources.ResourceArgs {

    public static final AuthorizedOrgsDescArgs Empty = new AuthorizedOrgsDescArgs();

    /**
     * The type of entities that need to use the authorization relationship during
     * evaluation, such as a device. Valid values are &#34;ASSET_TYPE_DEVICE&#34; and
     * &#34;ASSET_TYPE_CREDENTIAL_STRENGTH&#34;.
     * Possible values are: `ASSET_TYPE_DEVICE`, `ASSET_TYPE_CREDENTIAL_STRENGTH`.
     * 
     */
    @Import(name="assetType")
    private @Nullable Output<String> assetType;

    /**
     * @return The type of entities that need to use the authorization relationship during
     * evaluation, such as a device. Valid values are &#34;ASSET_TYPE_DEVICE&#34; and
     * &#34;ASSET_TYPE_CREDENTIAL_STRENGTH&#34;.
     * Possible values are: `ASSET_TYPE_DEVICE`, `ASSET_TYPE_CREDENTIAL_STRENGTH`.
     * 
     */
    public Optional<Output<String>> assetType() {
        return Optional.ofNullable(this.assetType);
    }

    /**
     * The direction of the authorization relationship between this organization
     * and the organizations listed in the &#34;orgs&#34; field. The valid values for this
     * field include the following:
     * AUTHORIZATION_DIRECTION_FROM: Allows this organization to evaluate traffic
     * in the organizations listed in the `orgs` field.
     * AUTHORIZATION_DIRECTION_TO: Allows the organizations listed in the `orgs`
     * field to evaluate the traffic in this organization.
     * For the authorization relationship to take effect, all of the organizations
     * must authorize and specify the appropriate relationship direction. For
     * example, if organization A authorized organization B and C to evaluate its
     * traffic, by specifying &#34;AUTHORIZATION_DIRECTION_TO&#34; as the authorization
     * direction, organizations B and C must specify
     * &#34;AUTHORIZATION_DIRECTION_FROM&#34; as the authorization direction in their
     * &#34;AuthorizedOrgsDesc&#34; resource.
     * Possible values are: `AUTHORIZATION_DIRECTION_TO`, `AUTHORIZATION_DIRECTION_FROM`.
     * 
     */
    @Import(name="authorizationDirection")
    private @Nullable Output<String> authorizationDirection;

    /**
     * @return The direction of the authorization relationship between this organization
     * and the organizations listed in the &#34;orgs&#34; field. The valid values for this
     * field include the following:
     * AUTHORIZATION_DIRECTION_FROM: Allows this organization to evaluate traffic
     * in the organizations listed in the `orgs` field.
     * AUTHORIZATION_DIRECTION_TO: Allows the organizations listed in the `orgs`
     * field to evaluate the traffic in this organization.
     * For the authorization relationship to take effect, all of the organizations
     * must authorize and specify the appropriate relationship direction. For
     * example, if organization A authorized organization B and C to evaluate its
     * traffic, by specifying &#34;AUTHORIZATION_DIRECTION_TO&#34; as the authorization
     * direction, organizations B and C must specify
     * &#34;AUTHORIZATION_DIRECTION_FROM&#34; as the authorization direction in their
     * &#34;AuthorizedOrgsDesc&#34; resource.
     * Possible values are: `AUTHORIZATION_DIRECTION_TO`, `AUTHORIZATION_DIRECTION_FROM`.
     * 
     */
    public Optional<Output<String>> authorizationDirection() {
        return Optional.ofNullable(this.authorizationDirection);
    }

    /**
     * A granular control type for authorization levels. Valid value is &#34;AUTHORIZATION_TYPE_TRUST&#34;.
     * Possible values are: `AUTHORIZATION_TYPE_TRUST`.
     * 
     */
    @Import(name="authorizationType")
    private @Nullable Output<String> authorizationType;

    /**
     * @return A granular control type for authorization levels. Valid value is &#34;AUTHORIZATION_TYPE_TRUST&#34;.
     * Possible values are: `AUTHORIZATION_TYPE_TRUST`.
     * 
     */
    public Optional<Output<String>> authorizationType() {
        return Optional.ofNullable(this.authorizationType);
    }

    /**
     * Resource name for the `AuthorizedOrgsDesc`. Format:
     * `accessPolicies/{access_policy}/authorizedOrgsDescs/{authorized_orgs_desc}`.
     * The `authorized_orgs_desc` component must begin with a letter, followed by
     * alphanumeric characters or `_`.
     * After you create an `AuthorizedOrgsDesc`, you cannot change its `name`.
     * 
     * ***
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Resource name for the `AuthorizedOrgsDesc`. Format:
     * `accessPolicies/{access_policy}/authorizedOrgsDescs/{authorized_orgs_desc}`.
     * The `authorized_orgs_desc` component must begin with a letter, followed by
     * alphanumeric characters or `_`.
     * After you create an `AuthorizedOrgsDesc`, you cannot change its `name`.
     * 
     * ***
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The list of organization ids in this AuthorizedOrgsDesc.
     * Format: `organizations/&lt;org_number&gt;`
     * Example: `organizations/123456`
     * 
     */
    @Import(name="orgs")
    private @Nullable Output<List<String>> orgs;

    /**
     * @return The list of organization ids in this AuthorizedOrgsDesc.
     * Format: `organizations/&lt;org_number&gt;`
     * Example: `organizations/123456`
     * 
     */
    public Optional<Output<List<String>>> orgs() {
        return Optional.ofNullable(this.orgs);
    }

    /**
     * Required. Resource name for the access policy which owns this `AuthorizedOrgsDesc`.
     * 
     */
    @Import(name="parent", required=true)
    private Output<String> parent;

    /**
     * @return Required. Resource name for the access policy which owns this `AuthorizedOrgsDesc`.
     * 
     */
    public Output<String> parent() {
        return this.parent;
    }

    private AuthorizedOrgsDescArgs() {}

    private AuthorizedOrgsDescArgs(AuthorizedOrgsDescArgs $) {
        this.assetType = $.assetType;
        this.authorizationDirection = $.authorizationDirection;
        this.authorizationType = $.authorizationType;
        this.name = $.name;
        this.orgs = $.orgs;
        this.parent = $.parent;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(AuthorizedOrgsDescArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private AuthorizedOrgsDescArgs $;

        public Builder() {
            $ = new AuthorizedOrgsDescArgs();
        }

        public Builder(AuthorizedOrgsDescArgs defaults) {
            $ = new AuthorizedOrgsDescArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param assetType The type of entities that need to use the authorization relationship during
         * evaluation, such as a device. Valid values are &#34;ASSET_TYPE_DEVICE&#34; and
         * &#34;ASSET_TYPE_CREDENTIAL_STRENGTH&#34;.
         * Possible values are: `ASSET_TYPE_DEVICE`, `ASSET_TYPE_CREDENTIAL_STRENGTH`.
         * 
         * @return builder
         * 
         */
        public Builder assetType(@Nullable Output<String> assetType) {
            $.assetType = assetType;
            return this;
        }

        /**
         * @param assetType The type of entities that need to use the authorization relationship during
         * evaluation, such as a device. Valid values are &#34;ASSET_TYPE_DEVICE&#34; and
         * &#34;ASSET_TYPE_CREDENTIAL_STRENGTH&#34;.
         * Possible values are: `ASSET_TYPE_DEVICE`, `ASSET_TYPE_CREDENTIAL_STRENGTH`.
         * 
         * @return builder
         * 
         */
        public Builder assetType(String assetType) {
            return assetType(Output.of(assetType));
        }

        /**
         * @param authorizationDirection The direction of the authorization relationship between this organization
         * and the organizations listed in the &#34;orgs&#34; field. The valid values for this
         * field include the following:
         * AUTHORIZATION_DIRECTION_FROM: Allows this organization to evaluate traffic
         * in the organizations listed in the `orgs` field.
         * AUTHORIZATION_DIRECTION_TO: Allows the organizations listed in the `orgs`
         * field to evaluate the traffic in this organization.
         * For the authorization relationship to take effect, all of the organizations
         * must authorize and specify the appropriate relationship direction. For
         * example, if organization A authorized organization B and C to evaluate its
         * traffic, by specifying &#34;AUTHORIZATION_DIRECTION_TO&#34; as the authorization
         * direction, organizations B and C must specify
         * &#34;AUTHORIZATION_DIRECTION_FROM&#34; as the authorization direction in their
         * &#34;AuthorizedOrgsDesc&#34; resource.
         * Possible values are: `AUTHORIZATION_DIRECTION_TO`, `AUTHORIZATION_DIRECTION_FROM`.
         * 
         * @return builder
         * 
         */
        public Builder authorizationDirection(@Nullable Output<String> authorizationDirection) {
            $.authorizationDirection = authorizationDirection;
            return this;
        }

        /**
         * @param authorizationDirection The direction of the authorization relationship between this organization
         * and the organizations listed in the &#34;orgs&#34; field. The valid values for this
         * field include the following:
         * AUTHORIZATION_DIRECTION_FROM: Allows this organization to evaluate traffic
         * in the organizations listed in the `orgs` field.
         * AUTHORIZATION_DIRECTION_TO: Allows the organizations listed in the `orgs`
         * field to evaluate the traffic in this organization.
         * For the authorization relationship to take effect, all of the organizations
         * must authorize and specify the appropriate relationship direction. For
         * example, if organization A authorized organization B and C to evaluate its
         * traffic, by specifying &#34;AUTHORIZATION_DIRECTION_TO&#34; as the authorization
         * direction, organizations B and C must specify
         * &#34;AUTHORIZATION_DIRECTION_FROM&#34; as the authorization direction in their
         * &#34;AuthorizedOrgsDesc&#34; resource.
         * Possible values are: `AUTHORIZATION_DIRECTION_TO`, `AUTHORIZATION_DIRECTION_FROM`.
         * 
         * @return builder
         * 
         */
        public Builder authorizationDirection(String authorizationDirection) {
            return authorizationDirection(Output.of(authorizationDirection));
        }

        /**
         * @param authorizationType A granular control type for authorization levels. Valid value is &#34;AUTHORIZATION_TYPE_TRUST&#34;.
         * Possible values are: `AUTHORIZATION_TYPE_TRUST`.
         * 
         * @return builder
         * 
         */
        public Builder authorizationType(@Nullable Output<String> authorizationType) {
            $.authorizationType = authorizationType;
            return this;
        }

        /**
         * @param authorizationType A granular control type for authorization levels. Valid value is &#34;AUTHORIZATION_TYPE_TRUST&#34;.
         * Possible values are: `AUTHORIZATION_TYPE_TRUST`.
         * 
         * @return builder
         * 
         */
        public Builder authorizationType(String authorizationType) {
            return authorizationType(Output.of(authorizationType));
        }

        /**
         * @param name Resource name for the `AuthorizedOrgsDesc`. Format:
         * `accessPolicies/{access_policy}/authorizedOrgsDescs/{authorized_orgs_desc}`.
         * The `authorized_orgs_desc` component must begin with a letter, followed by
         * alphanumeric characters or `_`.
         * After you create an `AuthorizedOrgsDesc`, you cannot change its `name`.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Resource name for the `AuthorizedOrgsDesc`. Format:
         * `accessPolicies/{access_policy}/authorizedOrgsDescs/{authorized_orgs_desc}`.
         * The `authorized_orgs_desc` component must begin with a letter, followed by
         * alphanumeric characters or `_`.
         * After you create an `AuthorizedOrgsDesc`, you cannot change its `name`.
         * 
         * ***
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param orgs The list of organization ids in this AuthorizedOrgsDesc.
         * Format: `organizations/&lt;org_number&gt;`
         * Example: `organizations/123456`
         * 
         * @return builder
         * 
         */
        public Builder orgs(@Nullable Output<List<String>> orgs) {
            $.orgs = orgs;
            return this;
        }

        /**
         * @param orgs The list of organization ids in this AuthorizedOrgsDesc.
         * Format: `organizations/&lt;org_number&gt;`
         * Example: `organizations/123456`
         * 
         * @return builder
         * 
         */
        public Builder orgs(List<String> orgs) {
            return orgs(Output.of(orgs));
        }

        /**
         * @param orgs The list of organization ids in this AuthorizedOrgsDesc.
         * Format: `organizations/&lt;org_number&gt;`
         * Example: `organizations/123456`
         * 
         * @return builder
         * 
         */
        public Builder orgs(String... orgs) {
            return orgs(List.of(orgs));
        }

        /**
         * @param parent Required. Resource name for the access policy which owns this `AuthorizedOrgsDesc`.
         * 
         * @return builder
         * 
         */
        public Builder parent(Output<String> parent) {
            $.parent = parent;
            return this;
        }

        /**
         * @param parent Required. Resource name for the access policy which owns this `AuthorizedOrgsDesc`.
         * 
         * @return builder
         * 
         */
        public Builder parent(String parent) {
            return parent(Output.of(parent));
        }

        public AuthorizedOrgsDescArgs build() {
            $.parent = Objects.requireNonNull($.parent, "expected parameter 'parent' to be non-null");
            return $;
        }
    }

}
