sonic-screwdriver 2.0.0 → 2.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc8cb5fef87d05bf06b47548ad6d943fa90682269ac5493881bee38eb47e2e45
4
- data.tar.gz: 7f19894b800b5b042cb86e984d25fa793fe7601f2f35578b76fd8c088edb1790
3
+ metadata.gz: 58baac92cd0720ee6f66d62b668d53eaf77a9b0bb184241dbbb69bdb2b7b120b
4
+ data.tar.gz: 593b326eee1fffa6da70b87f133a4cc1a61ae41b465962b5fa9077f1998c4dc5
5
5
  SHA512:
6
- metadata.gz: 85d9a8a7cd31dc070265d3769f9ca654f34654e89d29d56b90a1772530781ff74d092210ed2479f780c1c8bc456e65ee822b0f1bc9a91d361a6950b6e42966f5
7
- data.tar.gz: 8641e4970facbbb88546f9e542f2cc4fd07f4f3008c7c6287284e1e79977323c7865c14df74f5e667c758fbdec81c682743a37560bacb86907e3e2458bf714a6
6
+ metadata.gz: 01b85739677b31d02caeb2c34a585fc2f711972ff086574b138f68b38ba156e9325dd0f8ba6fb76bd698f5b7bf422b4a1a11336f27b4695d2f2de153688dcc3b
7
+ data.tar.gz: d42107ab7218aab71cf6b500dc377e34a587b27155e696f729633a870b2788ab0807fc16c680c49083c99597ab466631b5e8f92b7d343a388379f5e2ce918c3c
data/.circleci/config.yml CHANGED
@@ -7,7 +7,7 @@ jobs:
7
7
  build:
8
8
  docker:
9
9
  # specify the version you desire here
10
- - image: circleci/ruby:2.5.1-node-browsers
10
+ - image: circleci/ruby:2.6.5-node-browsers
11
11
 
12
12
  # Specify service dependencies here if necessary
13
13
  # CircleCI maintains a library of pre-built images
@@ -35,6 +35,8 @@ jobs:
35
35
  - run:
36
36
  name: install dependencies
37
37
  command: |
38
+ gem install bundler
39
+ gem update --system
38
40
  bundle install --jobs=4 --retry=3 --path vendor/bundle
39
41
 
40
42
  - save_cache:
data/.gitignore CHANGED
@@ -14,3 +14,4 @@ spec/reports
14
14
  test/tmp
15
15
  test/version_tmp
16
16
  tmp
17
+ Gemfile.lock
data/CHANGELOG.md CHANGED
@@ -1,7 +1,25 @@
1
1
  # Change Log
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
- This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
4
+ This project *loosely* adheres to [Semantic Versioning](http://semver.org/), even before v1.0.
5
+
6
+ ## [2.2.2] - 2021-04-12
7
+ - [#11](https://github.com/boltops-tools/sonic/pull/11) cli check
8
+
9
+ ## [2.2.1] - 2021-04-12
10
+ - [#9](https://github.com/boltops-tools/sonic/pull/9) improve command array handling
11
+
12
+ ## [2.2.0]
13
+ - #7 sonic execute command: `--tags` and `--instance-id` options instead of polymorphic list. Breaking behavior.
14
+ - display output even if tags used
15
+ - configure default log group
16
+ - correct exit status
17
+
18
+ ## [2.1.1]
19
+ - use rainbow gem for terminal colors
20
+
21
+ ## [2.1.0]
22
+ - change the setting format to ssh.user instead of bastion.user
5
23
 
6
24
  ## [2.0.0]
7
25
  - Merge pull request #5 from boltopslabs/cli-template-upgrade
data/README.md CHANGED
@@ -4,6 +4,8 @@
4
4
  [![Gitter](https://badges.gitter.im/boltopslabs/sonic.svg)](https://gitter.im/boltopslabs/sonic?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
5
5
  [![Support](https://img.shields.io/badge/get-support-blue.svg)](https://boltops.com?utm_source=badge&utm_medium=badge&utm_campaign=sonic)
6
6
 
7
+ [![BoltOps Badge](https://img.boltops.com/boltops/badges/boltops-badge.png)](https://www.boltops.com)
8
+
7
9
  Sonic is a multi-functional tool that helps you manage AWS resources. Sonic contains a group of commands that help debug EC2 instances and ECS containers quickly.
8
10
 
9
11
  See [sonic-screwdriver.cloud](http://sonic-screwdriver.cloud) for full documentation.
@@ -32,15 +34,7 @@ By the time I get into the container, I need to remind my brain of what the orig
32
34
 
33
35
  You can install sonic with RubyGems
34
36
 
35
- ```sh
36
- gem install sonic
37
- ```
38
-
39
- If you want to quickly install sonic without having to worry about sonic's dependencies you can also install the Bolts Toolbelt which has sonic included.
40
-
41
- ```sh
42
- brew cask install boltopslabs/software/bolts
43
- ```
37
+ gem install sonic
44
38
 
45
39
  Full installation instructions are at [Install Sonic Screwdriver](http://sonic-screwdriver.cloud/docs/install/). There are some server side dependencies for some of the sonic commands, so it is important to read through the full installation guide.
46
40
 
@@ -48,30 +42,33 @@ Full installation instructions are at [Install Sonic Screwdriver](http://sonic-s
48
42
 
49
43
  Here is a quick overview of sonic abilities:
50
44
 
51
- ```sh
52
- # ssh into an instance
53
- sonic ssh i-0f7f833131a51ce35
54
- sonic ssh hi-web # ec2 tag
55
- sonic ssh hi-web --cluster staging # ecs service name
56
- sonic ssh hi-web --cluster staging # ecs service name
57
- sonic ssh 7fbc8c75-4675-4d39-a5a4-0395ff8cd474 --cluster staging # ECS container id
58
- sonic ssh 1ed12abd-645c-4a05-9acf-739b9d790170 --cluster staging # ECS task id
45
+ # ssh into an instance
46
+ sonic ssh i-0f7f833131a51ce35
47
+ sonic ssh demo-web # ec2 tag
48
+ sonic ssh demo-web --cluster staging # ecs service name
49
+ sonic ssh demo-web --cluster staging # ecs service name
50
+ sonic ssh 7fbc8c75-4675-4d39-a5a4-0395ff8cd474 --cluster staging # ECS container id
51
+ sonic ssh 1ed12abd-645c-4a05-9acf-739b9d790170 --cluster staging # ECS task id
52
+
53
+ # docker exec to a running ECS docker container
54
+ sonic ecs exec demo-web
59
55
 
60
- # docker exec to a running ECS docker container
61
- sonic ecs exec hi-web
56
+ # docker run with the same environment as the ECS docker running containers
57
+ sonic ecs sh demo-web
62
58
 
63
- # docker run with the same environment as the ECS docker running containers
64
- sonic ecs sh hi-web
59
+ # run command with instance ids
60
+ sonic execute --instance-ids i-111 uptime
61
+ sonic execute --instance-ids i-111,i-222 uptime
65
62
 
66
- # run command on 1 instance
67
- sonic execute i-0f7f833131a51ce35 uptime
63
+ # run command on all instances tagged with Name demo-web and worker
64
+ sonic execute --tags Name=demo-web,demo-worker uptime
68
65
 
69
- # run command on all instances tagged with hi-web and worker
70
- sonic execute hi-web,hi-worker uptime
66
+ # run command on all instances with multiple tags
67
+ # Quotes are important due to semi-colon
68
+ sonic execute --tags "Name=demo-web,demo-worker;Owner=test" uptime
71
69
 
72
- # list ec2 instances
73
- sonic list hi-web
74
- ```
70
+ # list ec2 instances
71
+ sonic list demo-web
75
72
 
76
73
  ## Contributing
77
74
 
@@ -16,16 +16,6 @@ You can also add sonic to your Gemfile in your project if you are working with a
16
16
  gem "sonic-screwdriver"
17
17
  ```
18
18
 
19
- ### Install with Bolts Toolbelt
20
-
21
- If you want to install sonic without having to worry about sonic's ruby dependency you can simply install the Bolts Toolbelt which has sonic included.
22
-
23
- ```sh
24
- brew cask install boltopslabs/software/bolts
25
- ```
26
-
27
- For more information about the Bolts Toolbelt or to get an installer for another operating system visit: [https://boltops.com/toolbelt](https://boltops.com/toolbelt)
28
-
29
19
  ### Server Side Dependencies
30
20
 
31
21
  For a small set of the commands there are server side dependencies.
@@ -14,6 +14,6 @@ From here, there are a few resources that can help you continue along:
14
14
  Everyone can contribute to make sonic better, including the documentation. These docs are of the same sonic repo in the [docs folder](https://github.com/boltopslabs/sonic/tree/master/docs). Please fork the project and open a pull request! We love your pull requests. Contributions are encouraged and welcomed!
15
15
 
16
16
  <a id="prev" class="btn btn-basic" href="{% link _docs/how-it-works.md %}">Back</a>
17
- <!-- <a id="next" class="btn btn-primary" href="{% link articles.md %}">Next Step</a> -->
17
+ <a id="next" class="btn btn-primary" href="{% link reference.md %}">Next Step</a>
18
18
  <p class="keyboard-tip">Pro tip: Use the <- and -> arrow keys to move back and forward.</p>
19
19
 
@@ -23,10 +23,12 @@ Here is an `prod-profile.yml` example:
23
23
 
24
24
  ```yaml
25
25
  bastion: # cluster_host mapping
26
- user: ec2-user
27
26
  host: # default is nil - which means a bastion host wont be used
28
27
  host_key_check: false
29
28
 
29
+ ssh:
30
+ user: ec2-user
31
+
30
32
  # used with `sonic ecs ssh` command
31
33
  ecs_service_cluster_map:
32
34
  default: default # default cluster
@@ -39,10 +41,10 @@ The following table covers the different setting options:
39
41
 
40
42
  Setting | Description | Default
41
43
  ------------- | ------------- | -------------
42
- bastion.user | User to ssh into the server with. This can be overriden at the CLI with the user@host notation but can be set in the settings.yml file also. | ec2-user
43
44
  bastion.host | Bastion mapping allows you to set a bastion host on a per ECS cluster basis. The bastion host is used as the jump host. Examples: bastion.mydomain.com, myuser@bastion.myuser.com or 123.123.123.123. | (no value)
44
45
  bastion.host_key_check | Controls whether or not use the strict host checking ssh option. Since EC2 server host changes often the default value is false. | false
45
46
  ecs_service_cluster_map | Service to cluster mapping. This is a Hash structure that maps the service name to cluster names. | (no value)
47
+ ssh.user | User to ssh into the server with. This can be overriden at the CLI with the user@host notation but can be set in the settings.yml file also. | ec2-user
46
48
 
47
49
  The default settings are located tool source code at [lib/sonic/default/settings.yml](https://github.com/boltopslabs/sonic/blob/master/lib/sonic/default/settings.yml).
48
50
 
@@ -6,56 +6,50 @@ title: Sonic Execute
6
6
 
7
7
  Sonic provides a way to execute commands remotely and securely across a list of AWS servers. It does this by leveraging [Amazon EC2 Run Command](https://aws.amazon.com/ec2/execute/). Sonic a simple interface and some conveniences for you. The command is called `sonic execute`:
8
8
 
9
- ```sh
10
- sonic execute [FILTER] [COMMAND]
11
- ```
9
+ sonic execute [FILTER] [COMMAND]
12
10
 
13
11
  ## Examples Summary
14
12
 
15
- ```sh
16
- sonic execute hi-web uptime
17
- sonic execute hi-web-prod uptime
18
- sonic execute i-030033c20c54bf149,i-030033c20c54bf150 uname -a
19
- sonic execute i-030033c20c54bf149 file://hello.sh
20
- ```
13
+ sonic execute --tags Name=demo-web uptime
14
+ sonic execute --tags Name=demo-web,demo-worker uptime # multiple tag values
15
+ sonic execute --instance-ids i-030033c20c54bf149,i-030033c20c54bf150 uname -a
16
+ sonic execute --instance-ids i-030033c20c54bf149 file://hello.sh
21
17
 
22
18
  ## Example Detailed
23
19
 
24
20
  Here's a command example output in detailed:
25
21
 
26
- ```sh
27
- $ sonic execute i-0bf51a000ab4e73a8 uptime
28
- Sending command to SSM with options:
29
- ---
30
- instance_ids:
31
- - i-0bf51a000ab4e73a8
32
- document_name: AWS-RunShellScript
33
- comment: sonic execute i-0bf51a000ab4e73a8 uptime
34
- parameters:
35
- commands:
36
- - uptime
37
- output_s3_region: us-east-1
38
- output_s3_bucket_name: [reacted]
39
- output_s3_key_prefix: ssm/commands/sonic
40
-
41
- Command sent to AWS SSM. To check the details of the command:
42
- aws ssm list-commands --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
43
- aws ssm get-command-invocation --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2 --instance-id i-0bf51a000ab4e73a8
44
-
45
- Waiting for ssm command to finish.....
46
- Command finished.
47
-
48
- Displaying output for i-0bf51a000ab4e73a8.
49
- Command status: Success
50
- Command standard output:
51
- 01:08:10 up 8 days, 6:41, 0 users, load average: 0.00, 0.00, 0.00
52
-
53
- To see the more output details visit:
54
- https://us-west-2.console.aws.amazon.com/systems-manager/run-command/0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
55
-
56
- Pro tip: the console url is already in your copy/paste clipboard.
57
- $
58
- ```
22
+ $ sonic execute --instance-ids i-0bf51a000ab4e73a8 uptime
23
+ Sending command to SSM with options:
24
+ ---
25
+ instance_ids:
26
+ - i-0bf51a000ab4e73a8
27
+ document_name: AWS-RunShellScript
28
+ comment: sonic execute --instance-ids i-0bf51a000ab4e73a8 uptime
29
+ parameters:
30
+ commands:
31
+ - uptime
32
+ output_s3_region: us-east-1
33
+ output_s3_bucket_name: [reacted]
34
+ output_s3_key_prefix: ssm/commands/sonic
35
+
36
+ Command sent to AWS SSM. To check the details of the command:
37
+ aws ssm list-commands --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
38
+ aws ssm get-command-invocation --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2 --instance-id i-0bf51a000ab4e73a8
39
+
40
+ Waiting for ssm command to finish.....
41
+ Command finished.
42
+
43
+ Displaying output for i-0bf51a000ab4e73a8.
44
+ Command status: Success
45
+ Command standard output:
46
+ 01:08:10 up 8 days, 6:41, 0 users, load average: 0.00, 0.00, 0.00
47
+
48
+ To see the more output details visit:
49
+ https://us-west-2.console.aws.amazon.com/systems-manager/run-command/0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
50
+
51
+ Pro tip: the console url is already in your copy/paste clipboard.
52
+ $
59
53
 
60
54
  Notice the conveniences of `sonic execute`, it:
61
55
 
@@ -69,28 +63,30 @@ The AWS SSM console looks like this:
69
63
 
70
64
  <img src="/img/tutorials/ec2-console-run-command.png" class="doc-photo" />
71
65
 
72
- ### Polymorphic Filter
66
+ ### Filter Options
73
67
 
74
- The `sonic execute` command can understand a variety of different filters. The filters can be a list of instances ids or one EC2 tag value. Note, ECS service names are *not* supported for the filter.
68
+ The `sonic execute` command can understand a variety of different filters: `--tags` and `--instance-ids`. Note, ECS service names are *not* supported for the filter.
75
69
 
76
70
  Here is an example, where the uptime command will run on both `i-030033c20c54bf149` and `i-030033c20c54bf150` instances.
77
71
 
78
- ```sh
79
- sonic execute i-066b140d9479e9681,i-09482b1a6e330fbf7 uptime
80
- ```
72
+ sonic execute --instance-ids i-066b140d9479e9681,i-09482b1a6e330fbf7 uptime
73
+
74
+ Here is an example, where the uptime command will run on instances tagged with `Name=demo-web`
75
+
76
+ sonic execute --tags Name=demo-web uptime
81
77
 
82
78
  ## Windows Support
83
79
 
84
80
  Windows is also supported. When running a command sonic will first attempt to use the `AWS-RunShellScript` run command, and if it detects that the instance's platform does not support `AWS-RunShellScript`, it will run the command with the `AWS-RunPowerShellScript` run command. Here's an example:
85
81
 
86
82
  ```
87
- $ sonic execute i-0917ad61b10fa1059 pwd
83
+ $ sonic execute --instance-ids i-0917ad61b10fa1059 pwd
88
84
  Sending command to SSM with options:
89
85
  ---
90
86
  instance_ids:
91
87
  - i-0917ad61b10fa1059
92
88
  document_name: AWS-RunShellScript
93
- comment: sonic execute i-0917ad61b10fa1059 pwd
89
+ comment: sonic execute --instance-ids i-0917ad61b10fa1059 pwd
94
90
  parameters:
95
91
  commands:
96
92
  - pwd
@@ -129,16 +125,12 @@ $
129
125
 
130
126
  Sometimes you might want to run more than just a one-liner command. If you need to run a full script, you can provide the file path to the script by designating it with `file://`. For example, here's a file called `hi.sh`:
131
127
 
132
- ```bash
133
- #!/bin/bash
134
- echo "hello world"
135
- ```
128
+ #!/bin/bash
129
+ echo "hello world"
136
130
 
137
131
  Here's how you run that file:
138
132
 
139
- ```sh
140
- sonic execute hi-web file://hi.sh
141
- ```
133
+ sonic execute demo-web file://hi.sh
142
134
 
143
135
  The file gets read by `sonic execute` and sent to EC2 Run Command to be executed.
144
136
 
@@ -39,7 +39,8 @@ sonic ssh ubuntu@i-0f7f833131a51ce35
39
39
  The default user can also be configured with a `~/.sonic/settings.yml` or the project's `.sonic/settings.yml` file like so:
40
40
 
41
41
  ```yaml
42
- user: ec2-user
42
+ ssh:
43
+ user: ec2-user
43
44
  ```
44
45
 
45
46
  More information about sonic settings in available in the docs: [Settings]({% link _docs/settings.md %}).
@@ -6,10 +6,12 @@
6
6
  <div class="footer-col col-md-4">
7
7
  <h3>More Tools</h3>
8
8
  <ul class="list-unstyled tools">
9
- <li><a href="http://jack-eb.com">Jack</a></li>
10
- <li><a href="http://lono.cloud">Lono</a></li>
11
- <li><a href="http://ufoships.com">Ufo</a></li>
12
- <li><a href="https://boltops.com/toolbelt">Toolbelt</a></li>
9
+ <li><a href="https://terraspace.cloud">Terraspace</a></li>
10
+ <li><a href="https://kubes.guru">Kubes</a></li>
11
+ <li><a href="https://rubyonjets.com">Jets</a></li>
12
+ <li><a href="https://ufoships.com">Ufo</a></li>
13
+ <li><a href="https://lono.cloud">Lono</a></li>
14
+ <li><a href="https://jack-eb.com">Jack</a></li>
13
15
  </ul>
14
16
  </div>
15
17
  <div class="footer-col col-md-4">
@@ -11,14 +11,15 @@ reference: true
11
11
 
12
12
  Runs command across fleet of servers via AWS Run Command.
13
13
 
14
- Run as a command across a list of servers. A filter must be provided. The filter can be a mix of instance ids and ec2 tags. This command can also take a path to a file. To specify a path to a file use file:// at the beginning of your file.
14
+ * A filter must be provided. The filter can be a mix of instance ids and ec2 tags.
15
+ * The command can be provided inline or as a file. To a file use `file://` at the beginning of your file.
15
16
 
16
17
  ## Examples Summary
17
18
 
18
- $ sonic execute hi-web-prod uptime
19
- $ sonic execute hi-web-prod,hi-worker-prod,hi-clock-prod uptime
20
- $ sonic execute i-030033c20c54bf149,i-030033c20c54bf150 uname -a
21
- $ sonic execute i-030033c20c54bf149 file://hello.sh
19
+ sonic execute --tags Name=demo-web uptime
20
+ sonic execute --tags Name=demo-web,demo-worker uptime # multiple values
21
+ sonic execute --instance-ids i-030033c20c54bf149,i-030033c20c54bf150 uname -a
22
+ sonic execute --instance-ids i-030033c20c54bf149 file://hello.sh # script from file
22
23
 
23
24
  You cannot mix instance ids and tag names in the filter.
24
25
 
@@ -26,39 +27,37 @@ You cannot mix instance ids and tag names in the filter.
26
27
 
27
28
  Here's a command example output in detailed:
28
29
 
29
- ```sh
30
- $ sonic execute i-0bf51a000ab4e73a8 uptime
31
- Sending command to SSM with options:
32
- ---
33
- instance_ids:
34
- - i-0bf51a000ab4e73a8
35
- document_name: AWS-RunShellScript
36
- comment: sonic execute i-0bf51a000ab4e73a8 uptime
37
- parameters:
38
- commands:
39
- - uptime
40
- output_s3_region: us-east-1
41
- output_s3_bucket_name: [reacted]
42
- output_s3_key_prefix: ssm/commands/sonic
43
-
44
- Command sent to AWS SSM. To check the details of the command:
45
- aws ssm list-commands --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
46
- aws ssm get-command-invocation --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2 --instance-id i-0bf51a000ab4e73a8
47
-
48
- Waiting for ssm command to finish.....
49
- Command finished.
50
-
51
- Displaying output for i-0bf51a000ab4e73a8.
52
- Command status: Success
53
- Command standard output:
54
- 01:08:10 up 8 days, 6:41, 0 users, load average: 0.00, 0.00, 0.00
55
-
56
- To see the more output details visit:
57
- https://us-west-2.console.aws.amazon.com/systems-manager/run-command/0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
58
-
59
- Pro tip: the console url is already in your copy/paste clipboard.
60
- $
61
- ```
30
+ $ sonic execute --instance-ids i-0bf51a000ab4e73a8 uptime
31
+ Sending command to SSM with options:
32
+ ---
33
+ instance_ids:
34
+ - i-0bf51a000ab4e73a8
35
+ document_name: AWS-RunShellScript
36
+ comment: sonic execute --instance-ids i-0bf51a000ab4e73a8 uptime
37
+ parameters:
38
+ commands:
39
+ - uptime
40
+ output_s3_region: us-east-1
41
+ output_s3_bucket_name: [reacted]
42
+ output_s3_key_prefix: ssm/commands/sonic
43
+
44
+ Command sent to AWS SSM. To check the details of the command:
45
+ aws ssm list-commands --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
46
+ aws ssm get-command-invocation --command-id 0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2 --instance-id i-0bf51a000ab4e73a8
47
+
48
+ Waiting for ssm command to finish.....
49
+ Command finished.
50
+
51
+ Displaying output for i-0bf51a000ab4e73a8.
52
+ Command status: Success
53
+ Command standard output:
54
+ 01:08:10 up 8 days, 6:41, 0 users, load average: 0.00, 0.00, 0.00
55
+
56
+ To see the more output details visit:
57
+ https://us-west-2.console.aws.amazon.com/systems-manager/run-command/0bb18d58-6436-49fd-9bfd-0c4b6c51c7a2
58
+
59
+ Pro tip: the console url is already in your copy/paste clipboard.
60
+ $
62
61
 
63
62
  Notice the conveniences of `sonic execute`, it:
64
63
 
@@ -78,6 +77,8 @@ The AWS SSM console looks like this:
78
77
  ```
79
78
  [--zero-warn], [--no-zero-warn] # Warns user when no instances found
80
79
  # Default: true
80
+ [--instance-ids=INSTANCE_IDS] # Instance ids to execute command on. Format: --instance-ids "i-111,i-222"
81
+ [--tags=TAGS] # Tags used to determine what instances to execute command on. Format: --tags "Key1=v1,v2;Key2=v3"
81
82
  [--verbose], [--no-verbose]
82
83
  [--noop], [--no-noop]
83
84
  ```