Package: alibabacloud-ros-iacer
What is Iacer?Iacer is a tool that testsTerraformandROS(Resource Orchestration Service)templates. It deploys your template in multiple Alibaba Cloud Regions and generates a report for each region via a simple configuration file.Installationpip install iacerRequirementsPython 3.7+The iacer is run on requires access to an Alibaba Cloud account, this can be done by any of the following mechanisms:AliyunCli default configuration file (~/.aliyun/config.json)Environment variables (ALIBABA_CLOUD_ACCESS_KEY_IDandALIBABA_CLOUD_ACCESS_KEY_SECRET)The ini configuration file defined by the environment variable ALIBABA_CLOUD_CREDENTIALS_FILEAlibaba Cloud SDK Credentials default configuration file (~/.alibabacloud/credentials.inior~/.aliyun/credentials.ini)Usageiacer adopts a similar cli command structure togitwith aiacer command subcommand --flagstyle. The cli is also designed to be the simplest if run from the root of a project. Let's have a look at equivalent command to run a test:cd into the project root and type test runcd./demo
iacertestrunor run it from anywhere by providing the path to the project rootiacertestrun--project-path./demoCli CommandThe cli is self documenting by using--helpor-h, the most common command isiacer testiacer test -h
usage: iacer [args] test [args] [subcommand] [args] 

Performs functional tests on IaC templates.

options:
  -h, --help  show this help message and exit

subcommands:
  clean - Manually clean up the stacks which were created by Iacer
  list - List stacks which were created by Iacer for all regions
  params - Generate pseudo parameters
  run - tests whether IaC templates are able to successfully launchiacer test run -h
usage: iacer [args] <command> [args] run [args] 

tests whether IaC templates are able to successfully launch

options:
  -h, --help            show this help message and exit
  -t TEMPLATE, --template TEMPLATE
                        path to a template
  -c CONFIG_FILE, --config-file CONFIG_FILE
                        path to a config file
  -o OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY
                        path to an output directory
  -r REGIONS, --regions REGIONS
                        comma separated list of regions to test in
  --test-names TEST_NAMES
                        comma separated list of tests to run
  --no-delete           don't delete stacks after test is complete
  --project-path PROJECT_PATH
                        root path of the project relative to config file,
                        template file and output file
  --keep-failed         do not delete failed stacks
  --dont-wait-for-delete
                        exits immediately after calling delete stack
  -g, --generate-parameters
                        generate pseudo parametersConfiguration filesThere are 2 config files which can be used to set behaviors.Global config file, located in~/.iacer.ymlProject config file, located in<PROJECT_ROOT>/.iacer.ymlEach configuration file supports three-tier configuration, which includesgeneral,projectandtests, andtestsis required.general configuration itemauthAliyun authentication section.{"name":"default","location":"~/.aliyun/config.json"}oss_configOss bucket configuration, include BucketName, BucketRegion and etc.{"bucket_name":"","bucket_region":"","object_prefix":"","callback_params":{"callback_url":"","callback_host":"","callback_body":"","callback_body_type":"","callback_var_params":""}}parametersParameter key-values to pass to template.{"vpc_id":"","vsw_id":""}project configuration itemnameProject NameregionsList of aliyun regions.parametersParameter key-values to pass to template.tagsTagsrole_nameRole nametemplate_configTemplate config{"template_location":"myTemplate/","template_url":"oss://xxx","template_body":"","template_id":"","template_version":""}tests configuration itemnameProject NameregionsList of aliyun regions.parametersParameter key-values to pass to template.tagsTagsrole_nameRole nametemplate_configTemplate config{"template_location":"myTemplate/","template_url":"oss://xxx","template_body":"","template_id":"","template_version":""}PrecedenceExcept the parameters section, more specific config with the same key takes precedence.The rationale behind having parameters function this way is so that values can be overridden at a system level outside a project, that is likely committed to source control. parameters that define account specific things like VPC details, Key Pairs, or secrets like API keys can be defined per host outside of source control.For example, consider this global config in~/.iacer.ymlgeneral:oss_config:bucket_name:global-bucketparameters:KeyPair:my-global-ecs-key-pairand this project configproject:name:my-projectregions:-cn-hangzhouoss_config:bucket_name:project-buckettests:default:template_config:template_url:"oss://xxx"regions:-cn-beijingparameters:KeyPair:my-test-ecs-key-pairWould result in this effective test configuration:tests:default:template_config:template_url:"oss://xxx"regions:-cn-beijingoss_config:bucket_name:project-bucketparameters:KeyPair:my-test-ecs-key-pairNotice thatbucket_nameandregionstook the most specific value andKeyPairthe most general.Pseudo ParametersYou can automatically get the available parameters through the$[iacer-auto]pseudo-parameter if the parameter is the following 2 casesThe resource attribute corresponding to the parameter supports the ROSGetTemplateParameterConstraintsinterface.Parameters whose name itself has a specific meaning. For example,VpcIdmeans the id of virtual private cloud and$[iacer-auto]will automatically obtain a vpcId randomly in the current region of the current account. Currently supported are as follows:Satisfying the regularityr"(\w*)vpc(_|)id(_|)(\d*)"will automatically and randomly obtain the VpcId in the current region.Satisfying the regularityr"(\w*)v(_|)switch(_|)id(_|)(\d*)"will automatically and randomly obtain the VswitchId in the current region. If there is a parameter whose name satisfies the regularityr"(\w*)zone(_|)id(_|)(\d*)", it will query the VswitchId of the corresponding availability zoneSatisfying the regularityr"(\w*)security(_|)group(_id|id)(_|)(\d*)"will automatically and randomly obtain the SecurityGroupId in the current region.Satisfying the regularityr"(\w*)name(_|)(\d*)"will automatically generate a random string starting withiacer-.Satisfying the regularityr"(\w*)password(_|)(\d*)"will automatically generate a password.Satisfying the regularityr"(\w*)uuid(_|)(\d*)"will automatically generate an uuid.