simplygenius-atmos 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/exe/atmos +2 -2
- data/lib/{atmos.rb → simplygenius/atmos.rb} +9 -7
- data/lib/simplygenius/atmos/cli.rb +116 -0
- data/lib/simplygenius/atmos/commands/account.rb +69 -0
- data/lib/simplygenius/atmos/commands/apply.rb +24 -0
- data/lib/simplygenius/atmos/commands/auth_exec.rb +34 -0
- data/lib/simplygenius/atmos/commands/base_command.rb +16 -0
- data/lib/simplygenius/atmos/commands/bootstrap.rb +76 -0
- data/lib/simplygenius/atmos/commands/container.rb +62 -0
- data/lib/simplygenius/atmos/commands/destroy.rb +22 -0
- data/lib/simplygenius/atmos/commands/generate.rb +187 -0
- data/lib/simplygenius/atmos/commands/init.rb +22 -0
- data/lib/simplygenius/atmos/commands/new.rb +22 -0
- data/lib/simplygenius/atmos/commands/otp.rb +58 -0
- data/lib/simplygenius/atmos/commands/plan.rb +24 -0
- data/lib/simplygenius/atmos/commands/secret.rb +91 -0
- data/lib/simplygenius/atmos/commands/terraform.rb +56 -0
- data/lib/simplygenius/atmos/commands/user.rb +78 -0
- data/lib/simplygenius/atmos/config.rb +279 -0
- data/lib/simplygenius/atmos/exceptions.rb +13 -0
- data/lib/simplygenius/atmos/generator.rb +232 -0
- data/lib/simplygenius/atmos/ipc.rb +136 -0
- data/lib/simplygenius/atmos/ipc_actions/notify.rb +31 -0
- data/lib/simplygenius/atmos/ipc_actions/ping.rb +23 -0
- data/lib/simplygenius/atmos/logging.rb +164 -0
- data/lib/simplygenius/atmos/otp.rb +62 -0
- data/lib/simplygenius/atmos/plugin.rb +27 -0
- data/lib/simplygenius/atmos/plugin_manager.rb +120 -0
- data/lib/simplygenius/atmos/plugins/output_filter.rb +29 -0
- data/lib/simplygenius/atmos/plugins/prompt_notify.rb +21 -0
- data/lib/simplygenius/atmos/provider_factory.rb +23 -0
- data/lib/simplygenius/atmos/providers/aws/account_manager.rb +83 -0
- data/lib/simplygenius/atmos/providers/aws/auth_manager.rb +220 -0
- data/lib/simplygenius/atmos/providers/aws/container_manager.rb +118 -0
- data/lib/simplygenius/atmos/providers/aws/provider.rb +53 -0
- data/lib/simplygenius/atmos/providers/aws/s3_secret_manager.rb +51 -0
- data/lib/simplygenius/atmos/providers/aws/user_manager.rb +213 -0
- data/lib/simplygenius/atmos/settings_hash.rb +93 -0
- data/lib/simplygenius/atmos/source_path.rb +186 -0
- data/lib/simplygenius/atmos/template.rb +117 -0
- data/lib/simplygenius/atmos/terraform_executor.rb +297 -0
- data/lib/simplygenius/atmos/ui.rb +173 -0
- data/lib/simplygenius/atmos/utils.rb +54 -0
- data/lib/simplygenius/atmos/version.rb +5 -0
- data/templates/new/config/atmos.yml +21 -13
- data/templates/new/config/atmos/recipes.yml +16 -0
- data/templates/new/config/atmos/runtime.yml +9 -0
- metadata +46 -40
- data/lib/atmos/cli.rb +0 -105
- data/lib/atmos/commands/account.rb +0 -65
- data/lib/atmos/commands/apply.rb +0 -20
- data/lib/atmos/commands/auth_exec.rb +0 -29
- data/lib/atmos/commands/base_command.rb +0 -12
- data/lib/atmos/commands/bootstrap.rb +0 -72
- data/lib/atmos/commands/container.rb +0 -58
- data/lib/atmos/commands/destroy.rb +0 -18
- data/lib/atmos/commands/generate.rb +0 -90
- data/lib/atmos/commands/init.rb +0 -18
- data/lib/atmos/commands/new.rb +0 -18
- data/lib/atmos/commands/otp.rb +0 -54
- data/lib/atmos/commands/plan.rb +0 -20
- data/lib/atmos/commands/secret.rb +0 -87
- data/lib/atmos/commands/terraform.rb +0 -52
- data/lib/atmos/commands/user.rb +0 -74
- data/lib/atmos/config.rb +0 -208
- data/lib/atmos/exceptions.rb +0 -9
- data/lib/atmos/generator.rb +0 -199
- data/lib/atmos/generator_factory.rb +0 -93
- data/lib/atmos/ipc.rb +0 -132
- data/lib/atmos/ipc_actions/notify.rb +0 -27
- data/lib/atmos/ipc_actions/ping.rb +0 -19
- data/lib/atmos/logging.rb +0 -160
- data/lib/atmos/otp.rb +0 -61
- data/lib/atmos/provider_factory.rb +0 -19
- data/lib/atmos/providers/aws/account_manager.rb +0 -82
- data/lib/atmos/providers/aws/auth_manager.rb +0 -208
- data/lib/atmos/providers/aws/container_manager.rb +0 -116
- data/lib/atmos/providers/aws/provider.rb +0 -51
- data/lib/atmos/providers/aws/s3_secret_manager.rb +0 -49
- data/lib/atmos/providers/aws/user_manager.rb +0 -211
- data/lib/atmos/settings_hash.rb +0 -90
- data/lib/atmos/terraform_executor.rb +0 -267
- data/lib/atmos/ui.rb +0 -159
- data/lib/atmos/utils.rb +0 -50
- data/lib/atmos/version.rb +0 -3
@@ -0,0 +1,173 @@
|
|
1
|
+
require_relative '../atmos'
|
2
|
+
require 'highline'
|
3
|
+
require 'rainbow'
|
4
|
+
require 'yaml'
|
5
|
+
require 'open3'
|
6
|
+
require 'os'
|
7
|
+
require 'hashie'
|
8
|
+
|
9
|
+
module SimplyGenius
|
10
|
+
module Atmos
|
11
|
+
|
12
|
+
module OSDockerDetection
|
13
|
+
refine OS.singleton_class do
|
14
|
+
def docker?
|
15
|
+
@docker ||= File.exist?('/.dockerenv')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module UI
|
21
|
+
extend ActiveSupport::Concern
|
22
|
+
include GemLogger::LoggerSupport
|
23
|
+
using OSDockerDetection
|
24
|
+
|
25
|
+
def self.color_enabled=(val)
|
26
|
+
Rainbow.enabled = val
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.color_enabled
|
30
|
+
Rainbow.enabled
|
31
|
+
end
|
32
|
+
|
33
|
+
class Markup
|
34
|
+
|
35
|
+
def initialize(color = nil)
|
36
|
+
@color = color
|
37
|
+
@atmos_ui = HighLine.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def say(statement)
|
41
|
+
statement = @color ? Rainbow(statement).send(@color) : statement
|
42
|
+
@atmos_ui.say(statement)
|
43
|
+
end
|
44
|
+
|
45
|
+
def ask(question, answer_type=nil, &details)
|
46
|
+
question = @color ? Rainbow(question).send(@color) : question
|
47
|
+
@atmos_ui.ask(question, answer_type, &details)
|
48
|
+
end
|
49
|
+
|
50
|
+
def agree(question, character=nil, &details)
|
51
|
+
question = @color ? Rainbow(question).send(@color) : question
|
52
|
+
@atmos_ui.agree(question, character, &details)
|
53
|
+
end
|
54
|
+
|
55
|
+
def choose(*items, &details)
|
56
|
+
# TODO: figure out how to color menu
|
57
|
+
return @atmos_ui.choose(*items, &details)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
def warn
|
63
|
+
return Markup.new(:yellow)
|
64
|
+
end
|
65
|
+
|
66
|
+
def error
|
67
|
+
return Markup.new(:red)
|
68
|
+
end
|
69
|
+
|
70
|
+
def say(statement)
|
71
|
+
return Markup.new().say(statement)
|
72
|
+
end
|
73
|
+
|
74
|
+
def ask(question, answer_type=nil, &details)
|
75
|
+
return Markup.new().ask(question, answer_type, &details)
|
76
|
+
end
|
77
|
+
|
78
|
+
def agree(question, character=nil, &details)
|
79
|
+
return Markup.new().agree(question, character, &details)
|
80
|
+
end
|
81
|
+
|
82
|
+
def choose(*items, &details)
|
83
|
+
return Markup.new().choose(*items, &details)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Pretty display of hashes
|
87
|
+
def display(data)
|
88
|
+
data = Hashie.stringify_keys(data)
|
89
|
+
display = YAML.dump(data).sub(/\A---\n/, "").gsub(/^/, " ")
|
90
|
+
end
|
91
|
+
|
92
|
+
def notify(message:nil, title: nil, modal: false, **opts)
|
93
|
+
|
94
|
+
result = {
|
95
|
+
'stdout' => '',
|
96
|
+
'success' => ''
|
97
|
+
}
|
98
|
+
|
99
|
+
message = message.to_s
|
100
|
+
title = title.present? ? title.to_s : "Atmos Notification"
|
101
|
+
modal = ["true", "1"].include?(modal.to_s)
|
102
|
+
modal = false if Atmos.config["ui.notify.disable_modal"]
|
103
|
+
|
104
|
+
return result if Atmos.config["ui.notify.disable"].to_s == "true"
|
105
|
+
|
106
|
+
force_inline = opts[:inline].to_s == "true" || Atmos.config["ui.notify.force_inline"].to_s == "true"
|
107
|
+
|
108
|
+
command = Atmos.config["ui.notify.command"]
|
109
|
+
|
110
|
+
if command.present? && ! force_inline
|
111
|
+
|
112
|
+
raise ArgumentError.new("notify command must be a list") if ! command.is_a?(Array)
|
113
|
+
|
114
|
+
command = command.collect do |c|
|
115
|
+
c = c.gsub("{{title}}", title)
|
116
|
+
c = c.gsub("{{message}}", message)
|
117
|
+
c = c.gsub("{{modal}}", modal.to_s)
|
118
|
+
end
|
119
|
+
result.merge! run_ui_process(*command)
|
120
|
+
|
121
|
+
elsif OS.mac? && ! force_inline
|
122
|
+
display_method = modal ? "displayDialog" : "displayNotification"
|
123
|
+
|
124
|
+
dialogScript = <<~EOF
|
125
|
+
var app = Application.currentApplication();
|
126
|
+
app.includeStandardAdditions = true;
|
127
|
+
app.#{display_method}(
|
128
|
+
#{JSON.generate(message)}, {
|
129
|
+
withTitle: #{JSON.generate(title)},
|
130
|
+
buttons: ['OK'],
|
131
|
+
defaultButton: 1
|
132
|
+
})
|
133
|
+
EOF
|
134
|
+
|
135
|
+
result.merge! run_ui_process("osascript", "-l", "JavaScript", "-e", dialogScript)
|
136
|
+
|
137
|
+
elsif OS.linux? && ! OS.docker? && ! force_inline
|
138
|
+
# TODO: add a modal option
|
139
|
+
result.merge! run_ui_process("notify-send", title, message)
|
140
|
+
|
141
|
+
# TODO windows notifications?
|
142
|
+
# elseif OS.windows? && ! force_inline
|
143
|
+
|
144
|
+
else
|
145
|
+
|
146
|
+
logger.debug("Notifications are unsupported on this OS") unless force_inline
|
147
|
+
logger.info(Rainbow("\n***** #{title} *****\n#{message}\n").orange)
|
148
|
+
if modal
|
149
|
+
logger.info(Rainbow("Hit enter to continue\n").orange)
|
150
|
+
$stdin.gets
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
return result
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
def run_ui_process(*args)
|
161
|
+
stdout, status = Open3.capture2e(*args)
|
162
|
+
result = {'stdout' => stdout, 'success' => status.success?.to_s}
|
163
|
+
if ! status.success?
|
164
|
+
result['error'] = "Notification process failed"
|
165
|
+
logger.debug("Failed to run notification utility: #{stdout}")
|
166
|
+
end
|
167
|
+
return result
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative '../atmos'
|
2
|
+
|
3
|
+
module SimplyGenius
|
4
|
+
module Atmos
|
5
|
+
|
6
|
+
module Utils
|
7
|
+
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
include GemLogger::LoggerSupport
|
10
|
+
|
11
|
+
class SymbolizedMash < ::Hashie::Mash
|
12
|
+
include Hashie::Extensions::Mash::SymbolizeKeys
|
13
|
+
end
|
14
|
+
|
15
|
+
# remove leading whitespace using first non-empty line to determine how
|
16
|
+
# much space to remove from the rest. Skips empty lines
|
17
|
+
def clean_indent(str)
|
18
|
+
first = true
|
19
|
+
first_size = 0
|
20
|
+
str.lines.collect do |line|
|
21
|
+
if line =~ /^(\s*)\S/ # line has at least one non-whitespace character
|
22
|
+
if first
|
23
|
+
first_size = Regexp.last_match(0).size
|
24
|
+
first = false
|
25
|
+
end
|
26
|
+
line[(first_size - 1)..-1]
|
27
|
+
else
|
28
|
+
line
|
29
|
+
end
|
30
|
+
end.join()
|
31
|
+
end
|
32
|
+
|
33
|
+
# wraps to an 80 character limit by adding newlines
|
34
|
+
def wrap(str)
|
35
|
+
result = ""
|
36
|
+
count = 0
|
37
|
+
str.each do |c|
|
38
|
+
result << c
|
39
|
+
if count >= 78
|
40
|
+
result << "\n"
|
41
|
+
count = 0
|
42
|
+
else
|
43
|
+
count += 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
return result
|
47
|
+
end
|
48
|
+
|
49
|
+
extend self
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
@@ -16,20 +16,10 @@ global_name_prefix: "#{org}-#{atmos_env}-"
|
|
16
16
|
#
|
17
17
|
local_name_prefix:
|
18
18
|
|
19
|
-
# The recipes to use for all environments, override at environment level if
|
20
|
-
# need be. The recipes to use when bootstrapping each environment will be
|
21
|
-
# under the bootstrap key. These are kept separate to make it easy to tear
|
22
|
-
# down an environment without breaking terraform mid-destroy. Most new
|
23
|
-
# deployments will have all recipes under a single key (Default), but the use
|
24
|
-
# of multiple keys to segment your infrastructure is useful as it grows larger
|
25
|
-
#
|
26
|
-
recipes:
|
27
|
-
bootstrap:
|
28
|
-
default:
|
29
|
-
|
30
19
|
# Environment specific overrides. When adding new environments place them
|
31
20
|
# after the existing ones so that you don't end up with permission issues when
|
32
|
-
# bootstrapping the new account
|
21
|
+
# bootstrapping the new account. You can also add overrides for each
|
22
|
+
# environment in their corresponding yml file in config/atmos/environments/<env_name>.yml
|
33
23
|
#
|
34
24
|
environments:
|
35
25
|
ops:
|
@@ -41,6 +31,13 @@ environments:
|
|
41
31
|
#
|
42
32
|
is_dev: "#{ /dev|test|demo/.match?(atmos_env) }"
|
43
33
|
|
34
|
+
# A list of glob patterns for finding atmos yml files
|
35
|
+
# Patterns can be absolute (beginning with /), but if not are applied relative
|
36
|
+
# to the directory containing atmos.yml
|
37
|
+
#
|
38
|
+
config_sources:
|
39
|
+
- atmos/*.y{,a}ml
|
40
|
+
|
44
41
|
# Sources for atmos templates
|
45
42
|
# To circumvent the version lock and get the latest git master recipes, use the git
|
46
43
|
# location, e.g.:
|
@@ -50,4 +47,15 @@ template_sources:
|
|
50
47
|
- name: atmos-recipes
|
51
48
|
location: https://github.com/simplygenius/atmos-recipes/archive/v#{atmos_version}.zip#atmos-recipes-#{atmos_version}
|
52
49
|
#- name: atmos-pro-recipes
|
53
|
-
# location: https://
|
50
|
+
# location: https://YOUR_API_KEY@releases.simplygenius.com/recipes/v#{atmos_version}#atmos-pro-recipes-#{atmos_version}
|
51
|
+
|
52
|
+
# To get the atmos-pro gem, add the gem source like:
|
53
|
+
# gem sources -a https://YOUR_API_KEY@releases.simplygenius.com/gems/
|
54
|
+
# then install the gem:
|
55
|
+
# gem install simplygenius-atmos-pro
|
56
|
+
# then add simplygenius-atmos-pro to the plugins key below
|
57
|
+
#
|
58
|
+
# The list of plugin gems to load when running atmos
|
59
|
+
#
|
60
|
+
plugins:
|
61
|
+
# - simplygenius-atmos-pro
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# The recipes to use for all environments, override at environment level if
|
2
|
+
# need be. The recipes to use when bootstrapping each environment will be
|
3
|
+
# under the bootstrap key. These are kept separate to make it easy to tear
|
4
|
+
# down an environment without breaking terraform mid-destroy. Most new
|
5
|
+
# deployments will have all recipes under a single key (Default), but the use
|
6
|
+
# of multiple keys to segment your infrastructure is useful as it grows larger
|
7
|
+
#
|
8
|
+
recipes:
|
9
|
+
bootstrap:
|
10
|
+
default:
|
11
|
+
|
12
|
+
# Environment specific overrides for recipes. You can also put these where you put other
|
13
|
+
# overrides, but they are here as a convenience to keep recipe overrides close
|
14
|
+
# to the defaults defined above
|
15
|
+
#
|
16
|
+
environments:
|
@@ -6,6 +6,10 @@ var_prefix:
|
|
6
6
|
# Disable module fetch from convenience plan/apply commandss
|
7
7
|
disable_auto_modules: false
|
8
8
|
|
9
|
+
# Allows one to add a custom ruby load path list for extending atmos without
|
10
|
+
# having to publish a gem
|
11
|
+
load_path:
|
12
|
+
|
9
13
|
# Configure the mechanism that allows terraform to callback into atmos
|
10
14
|
ipc:
|
11
15
|
# Disables all IPC callbacks into atmos from terraform
|
@@ -20,6 +24,11 @@ otp:
|
|
20
24
|
# The file where otp secrets are stored
|
21
25
|
secret_file: ~/.atmos.yml
|
22
26
|
|
27
|
+
# Configure the template generator
|
28
|
+
generate:
|
29
|
+
# The file storing the record of each generated template
|
30
|
+
state_file: .atmos-templates.yml
|
31
|
+
|
23
32
|
# Configure the UI components
|
24
33
|
ui:
|
25
34
|
# Configures UI notifications
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simplygenius-atmos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Conway
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-09-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -459,45 +459,51 @@ files:
|
|
459
459
|
- TODO.md
|
460
460
|
- exe/atmos
|
461
461
|
- exe/atmos-docker
|
462
|
-
- lib/atmos.rb
|
463
|
-
- lib/atmos/cli.rb
|
464
|
-
- lib/atmos/commands/account.rb
|
465
|
-
- lib/atmos/commands/apply.rb
|
466
|
-
- lib/atmos/commands/auth_exec.rb
|
467
|
-
- lib/atmos/commands/base_command.rb
|
468
|
-
- lib/atmos/commands/bootstrap.rb
|
469
|
-
- lib/atmos/commands/container.rb
|
470
|
-
- lib/atmos/commands/destroy.rb
|
471
|
-
- lib/atmos/commands/generate.rb
|
472
|
-
- lib/atmos/commands/init.rb
|
473
|
-
- lib/atmos/commands/new.rb
|
474
|
-
- lib/atmos/commands/otp.rb
|
475
|
-
- lib/atmos/commands/plan.rb
|
476
|
-
- lib/atmos/commands/secret.rb
|
477
|
-
- lib/atmos/commands/terraform.rb
|
478
|
-
- lib/atmos/commands/user.rb
|
479
|
-
- lib/atmos/config.rb
|
480
|
-
- lib/atmos/exceptions.rb
|
481
|
-
- lib/atmos/generator.rb
|
482
|
-
- lib/atmos/
|
483
|
-
- lib/atmos/
|
484
|
-
- lib/atmos/ipc_actions/
|
485
|
-
- lib/atmos/
|
486
|
-
- lib/atmos/
|
487
|
-
- lib/atmos/
|
488
|
-
- lib/atmos/
|
489
|
-
- lib/atmos/
|
490
|
-
- lib/atmos/
|
491
|
-
- lib/atmos/
|
492
|
-
- lib/atmos/providers/aws/
|
493
|
-
- lib/atmos/providers/aws/
|
494
|
-
- lib/atmos/providers/aws/
|
495
|
-
- lib/atmos/
|
496
|
-
- lib/atmos/
|
497
|
-
- lib/atmos/
|
498
|
-
- lib/atmos/
|
499
|
-
- lib/atmos/
|
462
|
+
- lib/simplygenius/atmos.rb
|
463
|
+
- lib/simplygenius/atmos/cli.rb
|
464
|
+
- lib/simplygenius/atmos/commands/account.rb
|
465
|
+
- lib/simplygenius/atmos/commands/apply.rb
|
466
|
+
- lib/simplygenius/atmos/commands/auth_exec.rb
|
467
|
+
- lib/simplygenius/atmos/commands/base_command.rb
|
468
|
+
- lib/simplygenius/atmos/commands/bootstrap.rb
|
469
|
+
- lib/simplygenius/atmos/commands/container.rb
|
470
|
+
- lib/simplygenius/atmos/commands/destroy.rb
|
471
|
+
- lib/simplygenius/atmos/commands/generate.rb
|
472
|
+
- lib/simplygenius/atmos/commands/init.rb
|
473
|
+
- lib/simplygenius/atmos/commands/new.rb
|
474
|
+
- lib/simplygenius/atmos/commands/otp.rb
|
475
|
+
- lib/simplygenius/atmos/commands/plan.rb
|
476
|
+
- lib/simplygenius/atmos/commands/secret.rb
|
477
|
+
- lib/simplygenius/atmos/commands/terraform.rb
|
478
|
+
- lib/simplygenius/atmos/commands/user.rb
|
479
|
+
- lib/simplygenius/atmos/config.rb
|
480
|
+
- lib/simplygenius/atmos/exceptions.rb
|
481
|
+
- lib/simplygenius/atmos/generator.rb
|
482
|
+
- lib/simplygenius/atmos/ipc.rb
|
483
|
+
- lib/simplygenius/atmos/ipc_actions/notify.rb
|
484
|
+
- lib/simplygenius/atmos/ipc_actions/ping.rb
|
485
|
+
- lib/simplygenius/atmos/logging.rb
|
486
|
+
- lib/simplygenius/atmos/otp.rb
|
487
|
+
- lib/simplygenius/atmos/plugin.rb
|
488
|
+
- lib/simplygenius/atmos/plugin_manager.rb
|
489
|
+
- lib/simplygenius/atmos/plugins/output_filter.rb
|
490
|
+
- lib/simplygenius/atmos/plugins/prompt_notify.rb
|
491
|
+
- lib/simplygenius/atmos/provider_factory.rb
|
492
|
+
- lib/simplygenius/atmos/providers/aws/account_manager.rb
|
493
|
+
- lib/simplygenius/atmos/providers/aws/auth_manager.rb
|
494
|
+
- lib/simplygenius/atmos/providers/aws/container_manager.rb
|
495
|
+
- lib/simplygenius/atmos/providers/aws/provider.rb
|
496
|
+
- lib/simplygenius/atmos/providers/aws/s3_secret_manager.rb
|
497
|
+
- lib/simplygenius/atmos/providers/aws/user_manager.rb
|
498
|
+
- lib/simplygenius/atmos/settings_hash.rb
|
499
|
+
- lib/simplygenius/atmos/source_path.rb
|
500
|
+
- lib/simplygenius/atmos/template.rb
|
501
|
+
- lib/simplygenius/atmos/terraform_executor.rb
|
502
|
+
- lib/simplygenius/atmos/ui.rb
|
503
|
+
- lib/simplygenius/atmos/utils.rb
|
504
|
+
- lib/simplygenius/atmos/version.rb
|
500
505
|
- templates/new/config/atmos.yml
|
506
|
+
- templates/new/config/atmos/recipes.yml
|
501
507
|
- templates/new/config/atmos/runtime.yml
|
502
508
|
- templates/new/templates.yml
|
503
509
|
homepage: https://github.com/simplygenius/atmos
|
data/lib/atmos/cli.rb
DELETED
@@ -1,105 +0,0 @@
|
|
1
|
-
require_relative '../atmos'
|
2
|
-
require_relative '../atmos/ui'
|
3
|
-
require 'clamp'
|
4
|
-
require 'sigdump/setup'
|
5
|
-
|
6
|
-
Dir.glob(File.join(File.join(__dir__, 'commands'), '*.rb')) do |f|
|
7
|
-
require_relative "commands/#{File.basename(f).sub(/\.rb$/, "")}"
|
8
|
-
end
|
9
|
-
|
10
|
-
module Atmos
|
11
|
-
|
12
|
-
# The command line interface to atmos
|
13
|
-
class CLI < Clamp::Command
|
14
|
-
|
15
|
-
include GemLogger::LoggerSupport
|
16
|
-
|
17
|
-
def self.description
|
18
|
-
desc = <<-DESC
|
19
|
-
Atmos version #{Atmos::VERSION}
|
20
|
-
|
21
|
-
Runs The atmos command line application
|
22
|
-
|
23
|
-
e.g.
|
24
|
-
|
25
|
-
atmos --help
|
26
|
-
DESC
|
27
|
-
desc.split("\n").collect(&:strip).join("\n")
|
28
|
-
end
|
29
|
-
|
30
|
-
option ["-d", "--debug"],
|
31
|
-
:flag, "debug output\n",
|
32
|
-
default: false
|
33
|
-
|
34
|
-
option ["-c", "--[no-]color"],
|
35
|
-
:flag, "colorize output (or not)\n (default: $stdout.tty?)"
|
36
|
-
|
37
|
-
option ["-e", "--atmos-env"],
|
38
|
-
'ENV', "The atmos environment\n",
|
39
|
-
environment_variable: 'ATMOS_ENV', default: 'ops'
|
40
|
-
|
41
|
-
def default_color?
|
42
|
-
$stdout.tty?
|
43
|
-
end
|
44
|
-
|
45
|
-
option ["-l", "--[no-]log"],
|
46
|
-
:flag, "log to file in addition to terminal (or not)\n",
|
47
|
-
default: true
|
48
|
-
|
49
|
-
|
50
|
-
subcommand "new", "Sets up a new atmos project",
|
51
|
-
Atmos::Commands::New
|
52
|
-
subcommand "generate", "Generate recipes for the repository",
|
53
|
-
Atmos::Commands::Generate
|
54
|
-
subcommand "bootstrap", "Init cloud provider for use with atmos",
|
55
|
-
Atmos::Commands::Bootstrap
|
56
|
-
subcommand "init", "Run terraform init",
|
57
|
-
Atmos::Commands::Init
|
58
|
-
subcommand "plan", "Run terraform plan",
|
59
|
-
Atmos::Commands::Plan
|
60
|
-
subcommand "apply", "Run terraform apply",
|
61
|
-
Atmos::Commands::Apply
|
62
|
-
subcommand "destroy", "Run terraform destroy",
|
63
|
-
Atmos::Commands::Destroy
|
64
|
-
subcommand "terraform", "Run all other terraform commands",
|
65
|
-
Atmos::Commands::Terraform
|
66
|
-
subcommand "account", "Account management commands",
|
67
|
-
Atmos::Commands::Account
|
68
|
-
subcommand "user", "User management commands",
|
69
|
-
Atmos::Commands::User
|
70
|
-
subcommand "otp", "Otp tools",
|
71
|
-
Atmos::Commands::Otp
|
72
|
-
subcommand "secret", "Secret management commands",
|
73
|
-
Atmos::Commands::Secret
|
74
|
-
subcommand "auth_exec", "Authenticated exec",
|
75
|
-
Atmos::Commands::AuthExec
|
76
|
-
subcommand "container", "Container tools",
|
77
|
-
Atmos::Commands::Container
|
78
|
-
|
79
|
-
subcommand "version", "Display version" do
|
80
|
-
def execute
|
81
|
-
logger.info "Atmos Version #{Atmos::VERSION}"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
subcommand "config", "Display expanded config for atmos_env" do
|
86
|
-
def execute
|
87
|
-
logger.info YAML.dump(Atmos.config.to_h)
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
# hook into clamp lifecycle to force logging setup even when we are calling
|
92
|
-
# a subcommand
|
93
|
-
def parse(arguments)
|
94
|
-
super
|
95
|
-
if Atmos.config.nil?
|
96
|
-
Atmos.config = Atmos::Config.new(atmos_env)
|
97
|
-
log = Atmos.config.is_atmos_repo? && log? ? "atmos.log" : nil
|
98
|
-
Atmos::Logging.setup_logging(debug?, color?, log)
|
99
|
-
Atmos::UI.color_enabled = color?
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
end
|