sonic-screwdriver 1.4.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/bin/commit_docs.sh +26 -0
  3. data/.circleci/config.yml +72 -0
  4. data/.gitignore +2 -1
  5. data/CHANGELOG.md +29 -3
  6. data/Gemfile +3 -3
  7. data/Guardfile +17 -10
  8. data/LICENSE.txt +2 -2
  9. data/README.md +25 -28
  10. data/Rakefile +9 -2
  11. data/docs/_config.yml +3 -0
  12. data/docs/_docs/help.md +1 -1
  13. data/docs/_docs/install-bastion.md +5 -15
  14. data/docs/_docs/install.md +3 -13
  15. data/docs/_docs/next-steps.md +1 -1
  16. data/docs/_docs/settings.md +42 -56
  17. data/docs/_docs/tutorial-ecs-exec.md +16 -20
  18. data/docs/_docs/tutorial-ecs-sh.md +73 -0
  19. data/docs/_docs/tutorial-execute.md +106 -38
  20. data/docs/_docs/tutorial-ssh.md +15 -19
  21. data/docs/_docs/why-ec2-run-command.md +1 -1
  22. data/docs/_includes/commands.html +5 -5
  23. data/docs/_includes/content.html +5 -0
  24. data/docs/_includes/css/main.css +15 -9
  25. data/docs/_includes/css/sonic.css +7 -5
  26. data/docs/_includes/example.html +4 -4
  27. data/docs/_includes/footer.html +6 -4
  28. data/docs/_includes/reference.md +1 -0
  29. data/docs/_includes/subnav.html +2 -1
  30. data/docs/_reference/sonic-completion.md +44 -0
  31. data/docs/_reference/sonic-completion_script.md +25 -0
  32. data/docs/_reference/sonic-ecs-exec.md +30 -0
  33. data/docs/_reference/sonic-ecs-help.md +21 -0
  34. data/docs/_reference/sonic-ecs-sh.md +35 -0
  35. data/docs/_reference/sonic-ecs.md +25 -0
  36. data/docs/_reference/sonic-execute.md +85 -0
  37. data/docs/_reference/sonic-list.md +40 -0
  38. data/docs/_reference/sonic-ssh.md +86 -0
  39. data/docs/_reference/sonic-version.md +21 -0
  40. data/docs/bin/web +1 -1
  41. data/docs/img/tutorials/ec2-console-run-command.png +0 -0
  42. data/docs/quick-start.md +17 -22
  43. data/docs/reference.md +12 -0
  44. data/{bin → exe}/sonic +3 -3
  45. data/lib/bash_scripts/docker-exec.sh +1 -0
  46. data/lib/bash_scripts/docker-run.sh +8 -1
  47. data/lib/sonic.rb +11 -3
  48. data/lib/sonic/{aws_services.rb → aws_service.rb} +6 -1
  49. data/lib/sonic/base_command.rb +82 -0
  50. data/lib/sonic/checks.rb +2 -2
  51. data/lib/sonic/cli.rb +41 -29
  52. data/lib/sonic/command.rb +8 -22
  53. data/lib/sonic/completer.rb +161 -0
  54. data/lib/sonic/completer/script.rb +6 -0
  55. data/lib/sonic/completer/script.sh +10 -0
  56. data/lib/sonic/core.rb +15 -0
  57. data/lib/sonic/default/settings.yml +9 -16
  58. data/lib/sonic/docker.rb +30 -2
  59. data/lib/sonic/ecs.rb +22 -0
  60. data/lib/sonic/execute.rb +203 -51
  61. data/lib/sonic/help.rb +9 -0
  62. data/lib/sonic/help/command/send.md +10 -0
  63. data/lib/sonic/help/completion.md +22 -0
  64. data/lib/sonic/help/completion_script.md +3 -0
  65. data/lib/sonic/help/ecs/exec.md +8 -0
  66. data/lib/sonic/help/ecs/sh.md +13 -0
  67. data/lib/sonic/help/execute.md +59 -0
  68. data/lib/sonic/help/list.md +17 -0
  69. data/lib/sonic/help/ssh.md +60 -0
  70. data/lib/sonic/list.rb +5 -2
  71. data/lib/sonic/setting.rb +47 -0
  72. data/lib/sonic/ssh.rb +42 -23
  73. data/lib/sonic/ssh/identifier_detector.rb +7 -3
  74. data/lib/sonic/ui.rb +2 -2
  75. data/lib/sonic/version.rb +1 -1
  76. data/sonic.gemspec +14 -9
  77. data/spec/lib/cli_spec.rb +11 -11
  78. data/spec/lib/sonic/execute_spec.rb +1 -2
  79. data/spec/spec_helper.rb +18 -10
  80. metadata +115 -19
  81. data/Gemfile.lock +0 -134
  82. data/docs/_docs/tutorial-ecs-run.md +0 -100
  83. data/lib/sonic/cli/help.rb +0 -152
  84. data/lib/sonic/settings.rb +0 -115
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2bceac30eb060267cadfbf45908bb3577a9182b7cc41f26163c8b2dea2ad9cd8
4
- data.tar.gz: 411d3d01a83f3f412e4e41d6aed8e5ff4f75fc8d7514ea47f2d38ea73f902295
3
+ metadata.gz: ca0ee2f6b882f119c6e607c3de2c38391c8c17236f9ef892211cb55e887c7c95
4
+ data.tar.gz: a4592ac7afc7d3c875be3f02b26f5a884d2bd09423f518cf53fc5b027c963436
5
5
  SHA512:
6
- metadata.gz: a7ee03c40b123fb2af14f470bb465e02bd8c1c9687f3912056c50d4f92ff8df677e1e7c6970e712d3667e7a2e95ee07a70a73b6fd32975950e78def1a9dd708b
7
- data.tar.gz: 87d14c75178e7935d34cc473122aa18ecb52bcc75f3116b591835456eb042c9a0e878829d1cdf332b325bd195813508cf63481afc4f837b17454de7184f09209
6
+ metadata.gz: e4c02076435af8641128a6487769362b4a3cb4f428a88fe07f14cb0455f8a5ab3bf80ea1950748b9ea0690307e7c38f4f779165e01a3e5279801ad798e4b279f
7
+ data.tar.gz: f0a7a5cea95e05190b5cf2fe767cc212d49e4063b9cfd4e04c18fb95ed20f2ae4b59b7bfe5a245b1616750aba6eb562ab53cddc196034af98977f8c25af56845
@@ -0,0 +1,26 @@
1
+ #!/bin/bash -eux
2
+
3
+ # Even though specs also generate docs, lets run again to ensure clean slate
4
+ bundle exec rake docs
5
+
6
+ out=$(git status docs)
7
+ if [[ "$out" = *"nothing to commit"* ]]; then
8
+ exit
9
+ fi
10
+
11
+ COMMIT_MESSAGE="docs updated by circleci"
12
+
13
+ # If the last commit already updated the docs, then exit.
14
+ # Preventable measure to avoid infinite loop.
15
+ if git log -1 --pretty=oneline | grep "$COMMIT_MESSAGE" ; then
16
+ exit
17
+ fi
18
+
19
+ # If reach here, we have some changes on docs that we should commit.
20
+ # Even though s
21
+ git add docs
22
+ git commit -m "$COMMIT_MESSAGE"
23
+
24
+ # https://makandracards.com/makandra/12107-git-show-current-branch-name-only
25
+ current_branch=$(git rev-parse --abbrev-ref HEAD)
26
+ git push origin "$current_branch"
@@ -0,0 +1,72 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ docker:
9
+ # specify the version you desire here
10
+ - image: circleci/ruby:2.6.5-node-browsers
11
+
12
+ # Specify service dependencies here if necessary
13
+ # CircleCI maintains a library of pre-built images
14
+ # documented at https://circleci.com/docs/2.0/circleci-images/
15
+ # - image: circleci/postgres:9.4
16
+
17
+ working_directory: ~/repo
18
+
19
+ steps:
20
+ - checkout
21
+
22
+ - run:
23
+ name: submodule sync
24
+ command: |
25
+ git submodule sync
26
+ git submodule update --init
27
+
28
+ # Download and cache dependencies
29
+ - restore_cache:
30
+ keys:
31
+ - v1-dependencies-{{ checksum "Gemfile" }}
32
+ # fallback to using the latest cache if no exact match is found
33
+ - v1-dependencies-
34
+
35
+ - run:
36
+ name: install dependencies
37
+ command: |
38
+ gem install bundler
39
+ gem update --system
40
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
41
+
42
+ - save_cache:
43
+ paths:
44
+ - ./vendor/bundle
45
+ key: v1-dependencies-{{ checksum "Gemfile" }}
46
+
47
+ # specs need git configured ad commit_docs.sh required it also
48
+ - run:
49
+ name: configure git
50
+ command: |
51
+ git config --global user.email "tongueroo@gmail.com"
52
+ git config --global user.name "Tung Nguyen"
53
+
54
+ # run tests!
55
+ - run:
56
+ name: run tests
57
+ command: |
58
+ mkdir /tmp/test-results
59
+ bundle exec rspec
60
+
61
+ - run:
62
+ name: commit cli reference docs
63
+ command: |
64
+ chmod a+x -R .circleci/bin
65
+ .circleci/bin/commit_docs.sh
66
+
67
+ # collect reports
68
+ - store_test_results:
69
+ path: /tmp/test-results
70
+ - store_artifacts:
71
+ path: /tmp/test-results
72
+ destination: test-results
data/.gitignore CHANGED
@@ -3,10 +3,10 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
- InstalledFiles
7
6
  _yardoc
8
7
  coverage
9
8
  doc/
9
+ InstalledFiles
10
10
  lib/bundler/man
11
11
  pkg
12
12
  rdoc
@@ -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,33 @@
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.1] - 2021-04-12
7
+ - [#9](https://github.com/boltops-tools/sonic/pull/9) improve command array handling
8
+
9
+ ## [2.2.0]
10
+ - #7 sonic execute command: `--tags` and `--instance-id` options instead of polymorphic list. Breaking behavior.
11
+ - display output even if tags used
12
+ - configure default log group
13
+ - correct exit status
14
+
15
+ ## [2.1.1]
16
+ - use rainbow gem for terminal colors
17
+
18
+ ## [2.1.0]
19
+ - change the setting format to ssh.user instead of bastion.user
20
+
21
+ ## [2.0.0]
22
+ - Merge pull request #5 from boltopslabs/cli-template-upgrade
23
+ - improve css for docs site
24
+ - add CLI reference docs
25
+ - use JumpProxy option for bastion
26
+ - change the way settings work, usage of SONIC_PROFILE and AWS_PROFILE and separate files
27
+ - Big restructuring of sonic commands:
28
+ - sonic ecs exec
29
+ - sonic ecs run
30
+ - sonic execute # much improved and added conveniences
5
31
 
6
32
  ## [1.4.0]
7
33
  - only use required aws-sdk modules
@@ -29,8 +55,8 @@ This project *tries* to adhere to [Semantic Versioning](http://semver.org/), eve
29
55
  - standardize filter to be first argument
30
56
 
31
57
  ## [1.0.0]
32
- - sonic ecs-exec
33
- - sonic ecs-run
58
+ - sonic ecs exec
59
+ - sonic ecs sh
34
60
  - sonic execute
35
61
  - sonic list
36
62
  - sonic ssh
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in sonic.gemspec
3
+ # Specify your gem dependencies in sonic.gemspec
4
4
  gemspec
5
5
 
6
- gem "codeclimate-test-reporter", group: :test, require: nil
6
+ gem "codeclimate-test-reporter", group: :test, require: nil
data/Guardfile CHANGED
@@ -1,12 +1,19 @@
1
- guard 'rspec' do
2
- watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}) { "spec/sonic_spec.rb" }
4
- watch(%r{^lib/sonic/(.+)\.rb$}) { "spec/sonic_spec.rb" }
5
- watch('spec/spec_helper.rb') { "spec/sonic_spec.rb" }
6
- watch(%r{^lib/sonic/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
1
+ guard "bundler", cmd: "bundle" do
2
+ watch("Gemfile")
3
+ watch(/^.+\.gemspec/)
7
4
  end
8
5
 
9
- guard 'bundler' do
10
- watch('Gemfile')
11
- watch(/^.+\.gemspec/)
12
- end
6
+ guard :rspec, cmd: "bundle exec rspec" do
7
+ require "guard/rspec/dsl"
8
+ dsl = Guard::RSpec::Dsl.new(self)
9
+
10
+ # RSpec files
11
+ rspec = dsl.rspec
12
+ watch(rspec.spec_helper) { rspec.spec_dir }
13
+ watch(rspec.spec_support) { rspec.spec_dir }
14
+ watch(rspec.spec_files)
15
+
16
+ # Ruby files
17
+ ruby = dsl.ruby
18
+ dsl.watch_spec_files_for(ruby.lib_files)
19
+ end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Tung Nguyen
1
+ Copyright (c) 2018 Tung Nguyen
2
2
 
3
3
  MIT License
4
4
 
@@ -19,4 +19,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
19
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
20
  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
21
  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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-stag # ec2 tag
55
- sonic ssh hi-web-stag --cluster stag # ecs service name
56
- sonic ssh hi-web-stag --cluster stag # ecs service name
57
- sonic ssh 7fbc8c75-4675-4d39-a5a4-0395ff8cd474 --cluster stag # ECS container id
58
- sonic ssh 1ed12abd-645c-4a05-9acf-739b9d790170 --cluster stag # 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-stag
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-run hi-web-stag
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-stag and worker
70
- sonic execute hi-web-stag,hi-worker-stag 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-stag
74
- ```
70
+ # list ec2 instances
71
+ sonic list demo-web
75
72
 
76
73
  ## Contributing
77
74
 
data/Rakefile CHANGED
@@ -1,6 +1,13 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
3
 
4
- task :default => :spec
4
+ task default: :spec
5
5
 
6
- RSpec::Core::RakeTask.new
6
+ RSpec::Core::RakeTask.new
7
+
8
+ require_relative "lib/sonic"
9
+ require "cli_markdown"
10
+ desc "Generates cli reference docs as markdown"
11
+ task :docs do
12
+ CliMarkdown::Creator.create_all(cli_class: Sonic::CLI, cli_name: "sonic")
13
+ end
data/docs/_config.yml CHANGED
@@ -61,6 +61,9 @@ collections:
61
61
  docs:
62
62
  name: "Documentation"
63
63
  output: true
64
+ reference:
65
+ name: "Reference"
66
+ output: true
64
67
 
65
68
  defaults:
66
69
  - values:
data/docs/_docs/help.md CHANGED
@@ -12,7 +12,7 @@ You can append `help`, `-h` or `--help` to the end of any command to get more he
12
12
 
13
13
  ```sh
14
14
  sonic ssh help
15
- sonic ecs-exec --help
15
+ sonic ecs exec --help
16
16
  sonic execute -h
17
17
  ```
18
18
 
@@ -7,21 +7,13 @@ It is common to secure your network setup by restricting access to your servers
7
7
  You can configure the [settings.yml]({% link _docs/settings.md %}) file to use a bastion host. Here's an example:
8
8
 
9
9
  ```yaml
10
- bastion: # cluster_host mapping
11
- default: ec2-user@bastion.mydomain.com
12
- prod: ec2-user@bastion.mydomain.com
13
- stag: ubuntu@bastion-stag.mydomain.com
10
+ bastion:
11
+ host: ec2-user@34.211.223.3
12
+ host_key_check: false
13
+ user: ec2-user # user for 2nd level servers
14
14
  ```
15
15
 
16
- The configuration specifies a bastion for the specific clusters. If the cluster is not in the configuration it defaults to the default bastion host setting.
17
-
18
- ```sh
19
- sonic ssh --cluster prod [IDENTIFER] # ec2-user@bastion.mydomain.com used as the bastion host
20
- sonic ssh --cluster stag [IDENTIFER] # ubuntu@bastion-stag.mydomain.com used as the bastion host
21
- sonic ssh --cluster whatever [IDENTIFER] # ec2-user@bastion.mydomain.com used as the bastion host
22
- ```
23
-
24
- The settting directs the `sonic ssh` to jump through the bastion host. This works completely transparently. The sonic commands are exactly the same as if there is no bastion host. Examples:
16
+ The settting directs the `sonic ssh` to jump through the bastion host. This works transparently. The sonic commands are exactly the same as if there is no bastion host. Examples:
25
17
 
26
18
  ```
27
19
  sonic ssh i-0f7f833131a51ce35
@@ -32,8 +24,6 @@ You should notice that the built up command now includes the bastion jump host.
32
24
  ```
33
25
  $ sonic ssh i-0f7f833131a51ce35 uptime
34
26
  => ssh -At ec2-user@34.211.223.3 ssh ec2-user@10.10.110.135 uptime
35
- Warning: Permanently added '34.211.223.3' (ECDSA) to the list of known hosts.
36
- Warning: Permanently added '10.10.110.135' (ECDSA) to the list of known hosts.
37
27
  18:35:18 up 1:14, 0 users, load average: 0.24, 0.07, 0.02
38
28
  Connection to 34.211.223.3 closed.
39
29
  $
@@ -16,28 +16,18 @@ 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.
32
22
 
33
- #### sonic ecs-* dependencies
23
+ #### sonic ecs dependencies
34
24
 
35
- For the `sonic ecs-*` commands to work `jq` is required on the server side. This is covered in the [How It Works]({% link _docs/how-it-works.md %}) section.
25
+ For the `sonic ecs` commands to work `jq` is required on the server side. This is covered in the [How It Works]({% link _docs/how-it-works.md %}) section.
36
26
 
37
27
  One way to install `jq` quickly is by using the `sonic execute` command. For example:
38
28
 
39
29
  ```sh
40
- sonic execute hi-web-stag yum install -y jq
30
+ sonic execute hi-web yum install -y jq
41
31
  ```
42
32
 
43
33
  It is recommended that you install `jq` with the UserData script or bake it into the AMI though.
@@ -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
 
@@ -2,92 +2,78 @@
2
2
  title: Settings
3
3
  ---
4
4
 
5
- You can adjust the behavior of sonic and set some handy default values with `settings.yml` files. There can exist multiple settings files which all get loaded and merged. The options from the files follow the following precedence rules:
5
+ You can adjust the behavior of sonic and set some handy default values with settings files. The settings files used are determined by the value of environment variable `SONIC_PROFILE` or `AWS_PROFILE`. The value determines the settings profile to use. There can exist multiple settings files which all get loaded and merged. The options from the files follow the following precedence rules:
6
6
 
7
- 1. current folder - The current folder's `.sonic/settings.yml` values take the highest precedence. The current folder is typically the project folder.
8
- 2. user - The user's `~/.sonic/settings.yml` values take the second highest precedence.
7
+ 1. current folder - The current folder's `.sonic/[AWS_PROFILE].yml` values take the highest precedence. The current folder is typically the project folder.
8
+ 2. user - The user's `~/.sonic/[AWS_PROFILE].yml` values take the second highest precedence.
9
9
  3. default - The [default settings](https://github.com/boltopslabs/sonic/blob/master/lib/sonic/default/settings.yml) bundled with the tool takes the lowest precedence.
10
10
 
11
- Here is an `settings.yml` example:
11
+ A concrete example helps explain it. Let's say `AWS_PROFILE=prod-profile` with the following files:
12
12
 
13
- ```yaml
14
- bastion: # cluster_host mapping
15
- default: # default is nil - which means a bastion host wont be used
16
- # Examples:
17
- # prod: bastion.mydomain.com
18
- # stag: ubuntu@bastion-stag.mydomain.com
19
- host_key_check: false
20
- service_cluster:
21
- default: # defaults to nil
22
- hi-web-prod: prod
23
- hi-clock-prod: prod
24
- hi-worker-prod: prod
25
- hi-web-stag: stag
26
- hi-clock-stag: stag
27
- hi-worker-stag: stag
28
- user: ec2-user
29
- ```
13
+ * in current folder: `.sonic/prod-profile.yml`
14
+ * in user home folder: `~/.sonic/prod-profile.yml`
30
15
 
31
- The following table covers the different setting options:
32
-
33
- Setting | Description | Default
34
- ------------- | ------------- | -------------
35
- bastion | 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)
36
- 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
37
- service_cluster | Service to cluster mapping. This is a Hash structure that maps the service name to cluster names. | (no value)
38
- 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
16
+ Then the `.sonic/prod-profile.yml` gets merged into `~/.sonic/prod-profile.yml` and that in turn gets merged into sonic's [default settings](https://github.com/boltopslabs/sonic/blob/master/lib/sonic/default/settings.yml).
39
17
 
40
- 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).
18
+ You can also use the `SONIC_PROFILE=prod-profile` environment variable instead of the `AWS_PROFILE` environment variable. The `SONIC_PROFILE` wins over the `AWS_PROFILE` value.
41
19
 
42
- ### Bastion cluster to host mapping
20
+ ## Full Example
43
21
 
44
- Provided this example:
22
+ Here is an `prod-profile.yml` example:
45
23
 
46
24
  ```yaml
47
25
  bastion: # cluster_host mapping
48
- default: ec2-user@bastion.mydomain.com
49
- prod: ec2-user@bastion.mydomain.com
50
- stag: ubuntu@bastion-stag.mydomain.com
26
+ host: # default is nil - which means a bastion host wont be used
27
+ host_key_check: false
28
+
29
+ ssh:
30
+ user: ec2-user
31
+
32
+ # used with `sonic ecs ssh` command
33
+ ecs_service_cluster_map:
34
+ default: default # default cluster
35
+ hi-web: production
36
+ hi-clock: production
37
+ hi-worker: production
51
38
  ```
52
39
 
53
- This results in
40
+ The following table covers the different setting options:
54
41
 
55
- ```sh
56
- sonic ssh --cluster prod [IDENTIFER] # ec2-user@bastion.mydomain.com used as the bastion host
57
- sonic ssh --cluster stag [IDENTIFER] # ubuntu@bastion-stag.mydomain.com used as the bastion host
58
- sonic ssh --cluster whatever [IDENTIFER] # ec2-user@bastion.mydomain.com used as the bastion host
59
- ```
42
+ Setting | Description | Default
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)
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
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
48
+
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).
60
50
 
61
51
  ### Service to Cluster Mapping
62
52
 
63
- One of the useful options is the `service_cluster`. This option maps service names to cluster names. This saves you from typing the `--cluster` option over and over. Here is an example `~/.sonic/settings.yml`:
53
+ A useful option is the `ecs_service_cluster_map`. This option maps ecs service names to cluster names. This saves you from typing the `--cluster` option repeatedly. Here is an example `~/.sonic/settings.yml`:
64
54
 
65
55
  ```yaml
66
- user: ec2-user
67
- service_cluster:
56
+ ecs_service_cluster_map:
68
57
  default: my-default-cluster
69
- hi-web-prod: prod
70
- hi-clock-prod: prod
71
- hi-worker-prod: prod
72
- hi-web-stag: stag
73
- hi-clock-stag: stag
74
- hi-worker-stag: stag
58
+ hi-web: production
59
+ hi-clock: production
60
+ hi-worker: production
75
61
  ```
76
62
 
77
63
  This results in shorter commands:
78
64
 
79
65
  ```
80
- sonic ssh hi-web-prod
81
- sonic ssh hi-clock-prod
82
- sonic ssh hi-worker-stag
66
+ sonic ecs ssh hi-web
67
+ sonic ecs ssh hi-clock
68
+ sonic ecs ssh hi-worker
83
69
  ```
84
70
 
85
71
  Instead of what you normally would have to type:
86
72
 
87
73
  ```
88
- sonic ssh hi-web-prod --cluster prod
89
- sonic ssh hi-clock-prod --cluster prod
90
- sonic ssh hi-worker-stag --cluster stag
74
+ sonic ecs ssh hi-web --cluster production
75
+ sonic ecs ssh hi-clock --cluster production
76
+ sonic ecs ssh hi-worker --cluster production
91
77
  ```
92
78
 
93
79