createConstraint method

Future<CreateConstraintOutput> createConstraint({
  1. required String parameters,
  2. required String portfolioId,
  3. required String productId,
  4. required String type,
  5. String? acceptLanguage,
  6. String? description,
  7. String? idempotencyToken,
})

Creates a constraint.

A delegated admin is authorized to invoke this command.

May throw ResourceNotFoundException. May throw InvalidParametersException. May throw LimitExceededException. May throw DuplicateResourceException.

Parameter parameters : The constraint parameters, in JSON format. The syntax depends on the constraint type as follows:

LAUNCH
You are required to specify either the RoleArn or the LocalRoleName but can't use both.

Specify the RoleArn property as follows:

{"RoleArn" : "arn:aws:iam::123456789012:role/LaunchRole"}

Specify the LocalRoleName property as follows:

{"LocalRoleName": "SCBasicLaunchRole"}

If you specify the LocalRoleName property, when an account uses the launch constraint, the IAM role with that name in the account will be used. This allows launch-role constraints to be account-agnostic so the administrator can create fewer resources per shared account. You cannot have both a LAUNCH and a STACKSET constraint.

You also cannot have more than one LAUNCH constraint on a product and portfolio.

NOTIFICATION
Specify the NotificationArns property as follows:

{"NotificationArns" : "arn:aws:sns:us-east-1:123456789012:Topic"}

RESOURCE_UPDATE
Specify the TagUpdatesOnProvisionedProduct property as follows:

{"Version":"2.0","Properties":{"TagUpdateOnProvisionedProduct":"String"}}

The TagUpdatesOnProvisionedProduct property accepts a string value of ALLOWED or NOT_ALLOWED.

STACKSET
Specify the Parameters property as follows:

{"Version": "String", "Properties": {"AccountList": "String" , "RegionList": "String" , "AdminRole": "String", "ExecutionRole": "String"}}

You cannot have both a LAUNCH and a STACKSET constraint.

You also cannot have more than one STACKSET constraint on a product and portfolio.

Products with a STACKSET constraint will launch an AWS CloudFormation stack set.

TEMPLATE
Specify the Rules property. For more information, see Template Constraint Rules.

Parameter portfolioId : The portfolio identifier.

Parameter productId : The product identifier.

Parameter type : The type of constraint.

  • LAUNCH
  • NOTIFICATION
  • RESOURCE_UPDATE
  • STACKSET
  • TEMPLATE

Parameter acceptLanguage : The language code.

  • en - English (default)
  • jp - Japanese
  • zh - Chinese

Parameter description : The description of the constraint.

Parameter idempotencyToken : A unique identifier that you provide to ensure idempotency. If multiple requests differ only by the idempotency token, the same response is returned for each repeated request.

Implementation

Future<CreateConstraintOutput> createConstraint({
  required String parameters,
  required String portfolioId,
  required String productId,
  required String type,
  String? acceptLanguage,
  String? description,
  String? idempotencyToken,
}) async {
  ArgumentError.checkNotNull(parameters, 'parameters');
  ArgumentError.checkNotNull(portfolioId, 'portfolioId');
  _s.validateStringLength(
    'portfolioId',
    portfolioId,
    1,
    100,
    isRequired: true,
  );
  ArgumentError.checkNotNull(productId, 'productId');
  _s.validateStringLength(
    'productId',
    productId,
    1,
    100,
    isRequired: true,
  );
  ArgumentError.checkNotNull(type, 'type');
  _s.validateStringLength(
    'type',
    type,
    1,
    1024,
    isRequired: true,
  );
  _s.validateStringLength(
    'acceptLanguage',
    acceptLanguage,
    0,
    100,
  );
  _s.validateStringLength(
    'description',
    description,
    0,
    2000,
  );
  _s.validateStringLength(
    'idempotencyToken',
    idempotencyToken,
    1,
    128,
  );
  final headers = <String, String>{
    'Content-Type': 'application/x-amz-json-1.1',
    'X-Amz-Target': 'AWS242ServiceCatalogService.CreateConstraint'
  };
  final jsonResponse = await _protocol.send(
    method: 'POST',
    requestUri: '/',
    exceptionFnMap: _exceptionFns,
    // TODO queryParams
    headers: headers,
    payload: {
      'Parameters': parameters,
      'PortfolioId': portfolioId,
      'ProductId': productId,
      'Type': type,
      if (acceptLanguage != null) 'AcceptLanguage': acceptLanguage,
      if (description != null) 'Description': description,
      'IdempotencyToken': idempotencyToken ?? _s.generateIdempotencyToken(),
    },
  );

  return CreateConstraintOutput.fromJson(jsonResponse.body);
}