simplygenius-atmos 0.7.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 +7 -0
- data/CHANGELOG.md +2 -0
- data/LICENSE +13 -0
- data/README.md +212 -0
- data/exe/atmos +4 -0
- data/exe/atmos-docker +12 -0
- data/lib/atmos.rb +12 -0
- data/lib/atmos/cli.rb +105 -0
- data/lib/atmos/commands/account.rb +65 -0
- data/lib/atmos/commands/apply.rb +20 -0
- data/lib/atmos/commands/auth_exec.rb +29 -0
- data/lib/atmos/commands/base_command.rb +12 -0
- data/lib/atmos/commands/bootstrap.rb +72 -0
- data/lib/atmos/commands/container.rb +58 -0
- data/lib/atmos/commands/destroy.rb +18 -0
- data/lib/atmos/commands/generate.rb +90 -0
- data/lib/atmos/commands/init.rb +18 -0
- data/lib/atmos/commands/new.rb +18 -0
- data/lib/atmos/commands/otp.rb +54 -0
- data/lib/atmos/commands/plan.rb +20 -0
- data/lib/atmos/commands/secret.rb +87 -0
- data/lib/atmos/commands/terraform.rb +52 -0
- data/lib/atmos/commands/user.rb +74 -0
- data/lib/atmos/config.rb +208 -0
- data/lib/atmos/exceptions.rb +9 -0
- data/lib/atmos/generator.rb +199 -0
- data/lib/atmos/generator_factory.rb +93 -0
- data/lib/atmos/ipc.rb +132 -0
- data/lib/atmos/ipc_actions/notify.rb +27 -0
- data/lib/atmos/ipc_actions/ping.rb +19 -0
- data/lib/atmos/logging.rb +160 -0
- data/lib/atmos/otp.rb +61 -0
- data/lib/atmos/provider_factory.rb +19 -0
- data/lib/atmos/providers/aws/account_manager.rb +82 -0
- data/lib/atmos/providers/aws/auth_manager.rb +208 -0
- data/lib/atmos/providers/aws/container_manager.rb +116 -0
- data/lib/atmos/providers/aws/provider.rb +51 -0
- data/lib/atmos/providers/aws/s3_secret_manager.rb +49 -0
- data/lib/atmos/providers/aws/user_manager.rb +211 -0
- data/lib/atmos/settings_hash.rb +90 -0
- data/lib/atmos/terraform_executor.rb +267 -0
- data/lib/atmos/ui.rb +159 -0
- data/lib/atmos/utils.rb +50 -0
- data/lib/atmos/version.rb +3 -0
- data/templates/new/config/atmos.yml +50 -0
- data/templates/new/config/atmos/runtime.yml +43 -0
- data/templates/new/templates.yml +1 -0
- metadata +526 -0
data/lib/atmos/ui.rb
ADDED
@@ -0,0 +1,159 @@
|
|
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 OSDockerDetection
|
10
|
+
refine OS.singleton_class do
|
11
|
+
def docker?
|
12
|
+
@docker ||= File.exist?('/.dockerenv')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module Atmos
|
18
|
+
module UI
|
19
|
+
extend ActiveSupport::Concern
|
20
|
+
include GemLogger::LoggerSupport
|
21
|
+
using OSDockerDetection
|
22
|
+
|
23
|
+
def self.color_enabled=(val)
|
24
|
+
Rainbow.enabled = val
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.color_enabled
|
28
|
+
Rainbow.enabled
|
29
|
+
end
|
30
|
+
|
31
|
+
class Markup
|
32
|
+
|
33
|
+
def initialize(color = nil)
|
34
|
+
@color = color
|
35
|
+
@atmos_ui = HighLine.new
|
36
|
+
end
|
37
|
+
|
38
|
+
def say(statement)
|
39
|
+
statement = @color ? Rainbow(statement).send(@color) : statement
|
40
|
+
@atmos_ui.say(statement)
|
41
|
+
end
|
42
|
+
|
43
|
+
def ask(question, answer_type=nil, &details)
|
44
|
+
s = @color ? Rainbow(question).send(@color) : question
|
45
|
+
@atmos_ui.ask(question, answer_type, &details)
|
46
|
+
end
|
47
|
+
|
48
|
+
def agree(question, character=nil, &details)
|
49
|
+
s = @color ? Rainbow(question).send(@color) : question
|
50
|
+
@atmos_ui.agree(question, character, &details)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
def warn
|
56
|
+
return Markup.new(:yellow)
|
57
|
+
end
|
58
|
+
|
59
|
+
def error
|
60
|
+
return Markup.new(:red)
|
61
|
+
end
|
62
|
+
|
63
|
+
def say(statement)
|
64
|
+
return Markup.new().say(statement)
|
65
|
+
end
|
66
|
+
|
67
|
+
def ask(question, answer_type=nil, &details)
|
68
|
+
return Markup.new().ask(question, answer_type, &details)
|
69
|
+
end
|
70
|
+
|
71
|
+
def agree(question, character=nil, &details)
|
72
|
+
return Markup.new().agree(question, character, &details)
|
73
|
+
end
|
74
|
+
|
75
|
+
# Pretty display of hashes
|
76
|
+
def display(data)
|
77
|
+
data = Hashie.stringify_keys(data)
|
78
|
+
display = YAML.dump(data).sub(/\A---\n/, "").gsub(/^/, " ")
|
79
|
+
end
|
80
|
+
|
81
|
+
def notify(message:nil, title: nil, modal: false, **opts)
|
82
|
+
|
83
|
+
result = {
|
84
|
+
'stdout' => '',
|
85
|
+
'success' => ''
|
86
|
+
}
|
87
|
+
|
88
|
+
message = message.to_s
|
89
|
+
title = title.present? ? title.to_s : "Atmos Notification"
|
90
|
+
modal = ["true", "1"].include?(modal.to_s)
|
91
|
+
modal = false if Atmos.config["ui.notify.disable_modal"]
|
92
|
+
|
93
|
+
return result if Atmos.config["ui.notify.disable"].to_s == "true"
|
94
|
+
|
95
|
+
force_inline = Atmos.config["ui.notify.force_inline"].to_s == "true"
|
96
|
+
command = Atmos.config["ui.notify.command"]
|
97
|
+
|
98
|
+
if command.present? && ! force_inline
|
99
|
+
|
100
|
+
raise ArgumentError.new("notify command must be a list") if ! command.is_a?(Array)
|
101
|
+
|
102
|
+
command = command.collect do |c|
|
103
|
+
c = c.gsub("{{title}}", title)
|
104
|
+
c = c.gsub("{{message}}", message)
|
105
|
+
c = c.gsub("{{modal}}", modal.to_s)
|
106
|
+
end
|
107
|
+
result.merge! run_ui_process(*command)
|
108
|
+
|
109
|
+
elsif OS.mac? && ! force_inline
|
110
|
+
display_method = modal ? "displayDialog" : "displayNotification"
|
111
|
+
|
112
|
+
dialogScript = <<~EOF
|
113
|
+
var app = Application.currentApplication();
|
114
|
+
app.includeStandardAdditions = true;
|
115
|
+
app.#{display_method}(
|
116
|
+
#{JSON.generate(message)}, {
|
117
|
+
withTitle: #{JSON.generate(title)},
|
118
|
+
buttons: ['OK'],
|
119
|
+
defaultButton: 1
|
120
|
+
})
|
121
|
+
EOF
|
122
|
+
|
123
|
+
result.merge! run_ui_process("osascript", "-l", "JavaScript", "-e", dialogScript)
|
124
|
+
|
125
|
+
elsif OS.linux? && ! OS.docker? && ! force_inline
|
126
|
+
# TODO: add a modal option
|
127
|
+
result.merge! run_ui_process("notify-send", title, message)
|
128
|
+
|
129
|
+
# TODO windows notifications?
|
130
|
+
# elseif OS.windows? && ! force_inline
|
131
|
+
|
132
|
+
else
|
133
|
+
|
134
|
+
logger.debug("Notifications are unsupported on this OS")
|
135
|
+
logger.info(Rainbow("\n***** #{title} *****\n#{message}\n").orange)
|
136
|
+
if modal
|
137
|
+
logger.info(Rainbow("Hit enter to continue\n").orange)
|
138
|
+
$stdin.gets
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
return result
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
def run_ui_process(*args)
|
149
|
+
stdout, status = Open3.capture2e(*args)
|
150
|
+
result = {'stdout' => stdout, 'success' => status.success?.to_s}
|
151
|
+
if ! status.success?
|
152
|
+
result['error'] = "Notification process failed"
|
153
|
+
logger.debug("Failed to run notification utility: #{stdout}")
|
154
|
+
end
|
155
|
+
return result
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
end
|
data/lib/atmos/utils.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require_relative '../atmos'
|
2
|
+
|
3
|
+
module Atmos
|
4
|
+
module Utils
|
5
|
+
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
include GemLogger::LoggerSupport
|
8
|
+
|
9
|
+
class SymbolizedMash < ::Hashie::Mash
|
10
|
+
include Hashie::Extensions::Mash::SymbolizeKeys
|
11
|
+
end
|
12
|
+
|
13
|
+
# remove leading whitespace using first non-empty line to determine how
|
14
|
+
# much space to remove from the rest. Skips empty lines
|
15
|
+
def clean_indent(str)
|
16
|
+
first = true
|
17
|
+
first_size = 0
|
18
|
+
str.lines.collect do |line|
|
19
|
+
if line =~ /^(\s*)\S/ # line has at least one non-whitespace character
|
20
|
+
if first
|
21
|
+
first_size = Regexp.last_match(0).size
|
22
|
+
first = false
|
23
|
+
end
|
24
|
+
line[(first_size - 1)..-1]
|
25
|
+
else
|
26
|
+
line
|
27
|
+
end
|
28
|
+
end.join()
|
29
|
+
end
|
30
|
+
|
31
|
+
# wraps to an 80 character limit by adding newlines
|
32
|
+
def wrap(str)
|
33
|
+
result = ""
|
34
|
+
count = 0
|
35
|
+
str.each do |c|
|
36
|
+
result << c
|
37
|
+
if count >= 78
|
38
|
+
result << "\n"
|
39
|
+
count = 0
|
40
|
+
else
|
41
|
+
count += 1
|
42
|
+
end
|
43
|
+
end
|
44
|
+
return result
|
45
|
+
end
|
46
|
+
|
47
|
+
extend self
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# The short name of your organization
|
2
|
+
#
|
3
|
+
org:
|
4
|
+
|
5
|
+
# The email address for receiving ops related alert emails
|
6
|
+
#
|
7
|
+
ops_email:
|
8
|
+
|
9
|
+
# The global name prefix for disambiguating resource names that have a global
|
10
|
+
# scope (e.g. s3 bucket names)
|
11
|
+
#
|
12
|
+
global_name_prefix: "#{org}-#{atmos_env}-"
|
13
|
+
|
14
|
+
# The local name prefix for disambiguating resource names that have a local
|
15
|
+
# scope (e.g. when running multiple environments in the same account)
|
16
|
+
#
|
17
|
+
local_name_prefix:
|
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
|
+
# Environment specific overrides. When adding new environments place them
|
31
|
+
# after the existing ones so that you don't end up with permission issues when
|
32
|
+
# bootstrapping the new account
|
33
|
+
#
|
34
|
+
environments:
|
35
|
+
ops:
|
36
|
+
account_id:
|
37
|
+
|
38
|
+
# A convenience for allowing other config statements to easily test if we are
|
39
|
+
# running in a development environment, for example:
|
40
|
+
# {is_dev ? 'dev val' : 'prod val'}
|
41
|
+
#
|
42
|
+
is_dev: "#{ /dev|test|demo/.match?(atmos_env) }"
|
43
|
+
|
44
|
+
# Sources for atmos templates
|
45
|
+
#
|
46
|
+
template_sources:
|
47
|
+
- name: atmos-recipes
|
48
|
+
location: https://github.com/simplygenius/atmos-recipes.git
|
49
|
+
# - name: atmos-pro-recipes
|
50
|
+
# location: https://github.com:simplygenius/atmos-pro-recipes.git
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Optional configuration for controlling the behavior of the atmos runtime
|
2
|
+
|
3
|
+
# Sets a prefix on the root keys when passed into terraform as a var value
|
4
|
+
var_prefix:
|
5
|
+
|
6
|
+
# Disable module fetch from convenience plan/apply commandss
|
7
|
+
disable_auto_modules: false
|
8
|
+
|
9
|
+
# Configure the mechanism that allows terraform to callback into atmos
|
10
|
+
ipc:
|
11
|
+
# Disables all IPC callbacks into atmos from terraform
|
12
|
+
disable: false
|
13
|
+
# Configures the notify IP callback
|
14
|
+
notify:
|
15
|
+
# Disable notify callbacks
|
16
|
+
disable: false
|
17
|
+
|
18
|
+
# Configure the integrated otp mechanism
|
19
|
+
otp:
|
20
|
+
# The file where otp secrets are stored
|
21
|
+
secret_file: ~/.atmos.yml
|
22
|
+
|
23
|
+
# Configure the UI components
|
24
|
+
ui:
|
25
|
+
# Configures UI notifications
|
26
|
+
notify:
|
27
|
+
# Disable notifications
|
28
|
+
disable: false
|
29
|
+
# Force notifications to never be modal
|
30
|
+
disable_modal: false
|
31
|
+
# Set a custom command for notifications, embedded {{title|message|modal}}
|
32
|
+
# will be replaced with the value passed from terraform
|
33
|
+
command:
|
34
|
+
# Force notifications inline in atmos' stdout output rather than launching
|
35
|
+
# a GUI notification
|
36
|
+
force_inline: false
|
37
|
+
|
38
|
+
# Configure terraform execution details
|
39
|
+
terraform:
|
40
|
+
# By default, all terraform plugins are placed in a directory so they can be
|
41
|
+
# reused across all envs/groups. This can be disabled here (you can also
|
42
|
+
# override using the terraform cli options for plugins)
|
43
|
+
disable_shared_plugins: false
|
@@ -0,0 +1 @@
|
|
1
|
+
description: Directory layout and files used to initialize a new atmos repository
|
metadata
ADDED
@@ -0,0 +1,526 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simplygenius-atmos
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.7.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Conway
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.14'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.7'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: coveralls
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.8'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.8'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: test_construct
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.0.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 2.0.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 4.0.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 4.0.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.3.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.3.0
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pry
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: pry-byebug
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: activesupport
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: gem_logger
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: logging
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: sigdump
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :runtime
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: clamp
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :runtime
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: thor
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :runtime
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: highline
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :runtime
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: rainbow
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :runtime
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
- !ruby/object:Gem::Dependency
|
266
|
+
name: git
|
267
|
+
requirement: !ruby/object:Gem::Requirement
|
268
|
+
requirements:
|
269
|
+
- - ">="
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '0'
|
272
|
+
type: :runtime
|
273
|
+
prerelease: false
|
274
|
+
version_requirements: !ruby/object:Gem::Requirement
|
275
|
+
requirements:
|
276
|
+
- - ">="
|
277
|
+
- !ruby/object:Gem::Version
|
278
|
+
version: '0'
|
279
|
+
- !ruby/object:Gem::Dependency
|
280
|
+
name: rubyzip
|
281
|
+
requirement: !ruby/object:Gem::Requirement
|
282
|
+
requirements:
|
283
|
+
- - ">="
|
284
|
+
- !ruby/object:Gem::Version
|
285
|
+
version: '0'
|
286
|
+
type: :runtime
|
287
|
+
prerelease: false
|
288
|
+
version_requirements: !ruby/object:Gem::Requirement
|
289
|
+
requirements:
|
290
|
+
- - ">="
|
291
|
+
- !ruby/object:Gem::Version
|
292
|
+
version: '0'
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: hashie
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - ">="
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '0'
|
300
|
+
type: :runtime
|
301
|
+
prerelease: false
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
303
|
+
requirements:
|
304
|
+
- - ">="
|
305
|
+
- !ruby/object:Gem::Version
|
306
|
+
version: '0'
|
307
|
+
- !ruby/object:Gem::Dependency
|
308
|
+
name: climate_control
|
309
|
+
requirement: !ruby/object:Gem::Requirement
|
310
|
+
requirements:
|
311
|
+
- - ">="
|
312
|
+
- !ruby/object:Gem::Version
|
313
|
+
version: '0'
|
314
|
+
type: :runtime
|
315
|
+
prerelease: false
|
316
|
+
version_requirements: !ruby/object:Gem::Requirement
|
317
|
+
requirements:
|
318
|
+
- - ">="
|
319
|
+
- !ruby/object:Gem::Version
|
320
|
+
version: '0'
|
321
|
+
- !ruby/object:Gem::Dependency
|
322
|
+
name: aws-sdk-core
|
323
|
+
requirement: !ruby/object:Gem::Requirement
|
324
|
+
requirements:
|
325
|
+
- - ">="
|
326
|
+
- !ruby/object:Gem::Version
|
327
|
+
version: '0'
|
328
|
+
type: :runtime
|
329
|
+
prerelease: false
|
330
|
+
version_requirements: !ruby/object:Gem::Requirement
|
331
|
+
requirements:
|
332
|
+
- - ">="
|
333
|
+
- !ruby/object:Gem::Version
|
334
|
+
version: '0'
|
335
|
+
- !ruby/object:Gem::Dependency
|
336
|
+
name: aws-sdk-iam
|
337
|
+
requirement: !ruby/object:Gem::Requirement
|
338
|
+
requirements:
|
339
|
+
- - ">="
|
340
|
+
- !ruby/object:Gem::Version
|
341
|
+
version: '0'
|
342
|
+
type: :runtime
|
343
|
+
prerelease: false
|
344
|
+
version_requirements: !ruby/object:Gem::Requirement
|
345
|
+
requirements:
|
346
|
+
- - ">="
|
347
|
+
- !ruby/object:Gem::Version
|
348
|
+
version: '0'
|
349
|
+
- !ruby/object:Gem::Dependency
|
350
|
+
name: aws-sdk-organizations
|
351
|
+
requirement: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - ">="
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '0'
|
356
|
+
type: :runtime
|
357
|
+
prerelease: false
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - ">="
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: '0'
|
363
|
+
- !ruby/object:Gem::Dependency
|
364
|
+
name: aws-sdk-s3
|
365
|
+
requirement: !ruby/object:Gem::Requirement
|
366
|
+
requirements:
|
367
|
+
- - ">="
|
368
|
+
- !ruby/object:Gem::Version
|
369
|
+
version: '0'
|
370
|
+
type: :runtime
|
371
|
+
prerelease: false
|
372
|
+
version_requirements: !ruby/object:Gem::Requirement
|
373
|
+
requirements:
|
374
|
+
- - ">="
|
375
|
+
- !ruby/object:Gem::Version
|
376
|
+
version: '0'
|
377
|
+
- !ruby/object:Gem::Dependency
|
378
|
+
name: aws-sdk-ecr
|
379
|
+
requirement: !ruby/object:Gem::Requirement
|
380
|
+
requirements:
|
381
|
+
- - ">="
|
382
|
+
- !ruby/object:Gem::Version
|
383
|
+
version: '0'
|
384
|
+
type: :runtime
|
385
|
+
prerelease: false
|
386
|
+
version_requirements: !ruby/object:Gem::Requirement
|
387
|
+
requirements:
|
388
|
+
- - ">="
|
389
|
+
- !ruby/object:Gem::Version
|
390
|
+
version: '0'
|
391
|
+
- !ruby/object:Gem::Dependency
|
392
|
+
name: aws-sdk-ecs
|
393
|
+
requirement: !ruby/object:Gem::Requirement
|
394
|
+
requirements:
|
395
|
+
- - ">="
|
396
|
+
- !ruby/object:Gem::Version
|
397
|
+
version: '0'
|
398
|
+
type: :runtime
|
399
|
+
prerelease: false
|
400
|
+
version_requirements: !ruby/object:Gem::Requirement
|
401
|
+
requirements:
|
402
|
+
- - ">="
|
403
|
+
- !ruby/object:Gem::Version
|
404
|
+
version: '0'
|
405
|
+
- !ruby/object:Gem::Dependency
|
406
|
+
name: os
|
407
|
+
requirement: !ruby/object:Gem::Requirement
|
408
|
+
requirements:
|
409
|
+
- - ">="
|
410
|
+
- !ruby/object:Gem::Version
|
411
|
+
version: '0'
|
412
|
+
type: :runtime
|
413
|
+
prerelease: false
|
414
|
+
version_requirements: !ruby/object:Gem::Requirement
|
415
|
+
requirements:
|
416
|
+
- - ">="
|
417
|
+
- !ruby/object:Gem::Version
|
418
|
+
version: '0'
|
419
|
+
- !ruby/object:Gem::Dependency
|
420
|
+
name: rotp
|
421
|
+
requirement: !ruby/object:Gem::Requirement
|
422
|
+
requirements:
|
423
|
+
- - ">="
|
424
|
+
- !ruby/object:Gem::Version
|
425
|
+
version: '0'
|
426
|
+
type: :runtime
|
427
|
+
prerelease: false
|
428
|
+
version_requirements: !ruby/object:Gem::Requirement
|
429
|
+
requirements:
|
430
|
+
- - ">="
|
431
|
+
- !ruby/object:Gem::Version
|
432
|
+
version: '0'
|
433
|
+
- !ruby/object:Gem::Dependency
|
434
|
+
name: clipboard
|
435
|
+
requirement: !ruby/object:Gem::Requirement
|
436
|
+
requirements:
|
437
|
+
- - ">="
|
438
|
+
- !ruby/object:Gem::Version
|
439
|
+
version: '0'
|
440
|
+
type: :runtime
|
441
|
+
prerelease: false
|
442
|
+
version_requirements: !ruby/object:Gem::Requirement
|
443
|
+
requirements:
|
444
|
+
- - ">="
|
445
|
+
- !ruby/object:Gem::Version
|
446
|
+
version: '0'
|
447
|
+
description: Atmos provides a terraform scaffold for creating cloud system architectures
|
448
|
+
email:
|
449
|
+
- matt@simplygenius.com
|
450
|
+
executables:
|
451
|
+
- atmos
|
452
|
+
- atmos-docker
|
453
|
+
extensions: []
|
454
|
+
extra_rdoc_files: []
|
455
|
+
files:
|
456
|
+
- CHANGELOG.md
|
457
|
+
- LICENSE
|
458
|
+
- README.md
|
459
|
+
- exe/atmos
|
460
|
+
- exe/atmos-docker
|
461
|
+
- lib/atmos.rb
|
462
|
+
- lib/atmos/cli.rb
|
463
|
+
- lib/atmos/commands/account.rb
|
464
|
+
- lib/atmos/commands/apply.rb
|
465
|
+
- lib/atmos/commands/auth_exec.rb
|
466
|
+
- lib/atmos/commands/base_command.rb
|
467
|
+
- lib/atmos/commands/bootstrap.rb
|
468
|
+
- lib/atmos/commands/container.rb
|
469
|
+
- lib/atmos/commands/destroy.rb
|
470
|
+
- lib/atmos/commands/generate.rb
|
471
|
+
- lib/atmos/commands/init.rb
|
472
|
+
- lib/atmos/commands/new.rb
|
473
|
+
- lib/atmos/commands/otp.rb
|
474
|
+
- lib/atmos/commands/plan.rb
|
475
|
+
- lib/atmos/commands/secret.rb
|
476
|
+
- lib/atmos/commands/terraform.rb
|
477
|
+
- lib/atmos/commands/user.rb
|
478
|
+
- lib/atmos/config.rb
|
479
|
+
- lib/atmos/exceptions.rb
|
480
|
+
- lib/atmos/generator.rb
|
481
|
+
- lib/atmos/generator_factory.rb
|
482
|
+
- lib/atmos/ipc.rb
|
483
|
+
- lib/atmos/ipc_actions/notify.rb
|
484
|
+
- lib/atmos/ipc_actions/ping.rb
|
485
|
+
- lib/atmos/logging.rb
|
486
|
+
- lib/atmos/otp.rb
|
487
|
+
- lib/atmos/provider_factory.rb
|
488
|
+
- lib/atmos/providers/aws/account_manager.rb
|
489
|
+
- lib/atmos/providers/aws/auth_manager.rb
|
490
|
+
- lib/atmos/providers/aws/container_manager.rb
|
491
|
+
- lib/atmos/providers/aws/provider.rb
|
492
|
+
- lib/atmos/providers/aws/s3_secret_manager.rb
|
493
|
+
- lib/atmos/providers/aws/user_manager.rb
|
494
|
+
- lib/atmos/settings_hash.rb
|
495
|
+
- lib/atmos/terraform_executor.rb
|
496
|
+
- lib/atmos/ui.rb
|
497
|
+
- lib/atmos/utils.rb
|
498
|
+
- lib/atmos/version.rb
|
499
|
+
- templates/new/config/atmos.yml
|
500
|
+
- templates/new/config/atmos/runtime.yml
|
501
|
+
- templates/new/templates.yml
|
502
|
+
homepage: https://github.com/simplygenius/atmos
|
503
|
+
licenses:
|
504
|
+
- Apache-2.0
|
505
|
+
metadata: {}
|
506
|
+
post_install_message:
|
507
|
+
rdoc_options: []
|
508
|
+
require_paths:
|
509
|
+
- lib
|
510
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
511
|
+
requirements:
|
512
|
+
- - ">="
|
513
|
+
- !ruby/object:Gem::Version
|
514
|
+
version: '0'
|
515
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
516
|
+
requirements:
|
517
|
+
- - ">="
|
518
|
+
- !ruby/object:Gem::Version
|
519
|
+
version: '0'
|
520
|
+
requirements: []
|
521
|
+
rubyforge_project:
|
522
|
+
rubygems_version: 2.7.6
|
523
|
+
signing_key:
|
524
|
+
specification_version: 4
|
525
|
+
summary: Atmos provides a terraform scaffold for creating cloud system architectures
|
526
|
+
test_files: []
|