ops_team 0.15.0 → 0.18.0

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: d3beee0325741d140b711ee3f939306452b176b9be9f7d9094c1e578ed780373
4
- data.tar.gz: 33aef85445dd2494967e246c1b4ebfe7433d76b9b09512756cb2a086321438cd
3
+ metadata.gz: 1fe720771051eb12c4f6786c7a9409d8e2ab01e592abb7959349ceba74f47eed
4
+ data.tar.gz: d2fdd069587db893f74d599abf875d15dcad4a09c19b94169496527ba462c77f
5
5
  SHA512:
6
- metadata.gz: b0d69fca7b243d34d4c14cf53d8b10942b212cd53fd897c136079d9883e939670f3b74c3383df547d6c2f9a7c1d25f0ce4ba11e3337e566cdab010a6ebe81ef9
7
- data.tar.gz: 96e25352e3b8b337a53632e560e1f494c38d2fc09b0b314c4a4e6e07aec92324b52051ac0c5235a4ab8d394247683890230dd5b29fe86b8ec26102af0482c559
6
+ metadata.gz: 48f067fd6e9379a1b40830defed7652301786020310137c1be4349e8abb5ab45eae478084b6614d807e10db6738531fb1f169c44146445fed77c1b517eabdba5
7
+ data.tar.gz: 32d83b0e2cf94f4178f577b3fbc2b9d232bd10f1de3370f5d516fac9e98f86abe1401749428a486c1f436d0d4646ad332f88701e889ac75764e432978f634000
@@ -5,12 +5,18 @@ require 'secrets'
5
5
  # represents one action to be performed in the shell
6
6
  # can assemble a command line from a command and args
7
7
  class Action
8
+ class NotAllowedInEnvError < StandardError; end
9
+
8
10
  def initialize(config, args)
9
11
  @config = config
10
12
  @args = args
11
13
  end
12
14
 
13
15
  def run
16
+ unless allowed_in_current_env?
17
+ raise NotAllowedInEnvError, "Action not allowed in #{Environment.environment} environment."
18
+ end
19
+
14
20
  Secrets.load if load_secrets?
15
21
 
16
22
  Kernel.exec(to_s)
@@ -55,4 +61,20 @@ class Action
55
61
  def load_secrets?
56
62
  @config["load_secrets"]
57
63
  end
64
+
65
+ def not_in_envs
66
+ @config["not_in_envs"] || []
67
+ end
68
+
69
+ def in_envs
70
+ @config["in_envs"] || []
71
+ end
72
+
73
+ def allowed_in_current_env?
74
+ return false if not_in_envs.include?(Environment.environment)
75
+
76
+ return false if in_envs.any? && !in_envs.include?(Environment.environment)
77
+
78
+ true
79
+ end
58
80
  end
@@ -28,11 +28,15 @@ class ActionList
28
28
 
29
29
  private
30
30
 
31
+ def actions_list
32
+ @actions_list ||= []
33
+ end
34
+
31
35
  def process_action_list
32
36
  @actions = {}
33
37
  @aliases = {}
34
38
 
35
- @actions_list.each do |name, config|
39
+ actions_list.each do |name, config|
36
40
  action = Action.new(config, @args)
37
41
 
38
42
  @actions[name] = action
@@ -49,21 +49,29 @@ module Builtins
49
49
  end
50
50
 
51
51
  def keys_for(env)
52
- config_keys_for(env) | secrets_keys_for(env)
52
+ tagged_config_keys_for(env) + tagged_secrets_keys_for(env)
53
53
  end
54
54
 
55
- def config_keys_for(env)
56
- (config_for(env)["environment"]&.keys || []).map do |key|
55
+ def tagged_config_keys_for(env)
56
+ config_keys_for(env).map do |key|
57
57
  "[CONFIG] #{key}"
58
58
  end
59
59
  end
60
60
 
61
- def secrets_keys_for(env)
62
- (secrets_for(env)["environment"]&.keys || []).map do |key|
61
+ def tagged_secrets_keys_for(env)
62
+ secrets_keys_for(env).map do |key|
63
63
  "[SECRET] #{key}"
64
64
  end
65
65
  end
66
66
 
67
+ def config_keys_for(env)
68
+ (config_for(env)["environment"]&.keys || []) - ignored_keys
69
+ end
70
+
71
+ def secrets_keys_for(env)
72
+ (secrets_for(env)["environment"]&.keys || []) - ignored_keys
73
+ end
74
+
67
75
  def config_for(env)
68
76
  YAML.load_file(config_path_for(env))
69
77
  end
@@ -111,6 +119,10 @@ module Builtins
111
119
  def secrets_path_for(env)
112
120
  Secrets.config_path_for(env)
113
121
  end
122
+
123
+ def ignored_keys
124
+ Options.get("envdiff.ignored_keys") || []
125
+ end
114
126
  end
115
127
 
116
128
  Envdiff = EnvDiff
@@ -54,12 +54,18 @@ module Builtins
54
54
  def actions
55
55
  return [] unless @config["actions"]
56
56
 
57
- @config["actions"].map do |name, value|
58
- format("%<name>-35s %<desc>s",
59
- name: name.yellow,
60
- desc: value["description"] || value["command"]
57
+ @config["actions"].map do |name, action_config|
58
+ format("%<name>-40s %<desc>s",
59
+ name: "#{name.yellow} #{alias_string_for(action_config)}",
60
+ desc: action_config["description"] || action_config["command"]
61
61
  )
62
62
  end.sort
63
63
  end
64
+
65
+ def alias_string_for(action_config)
66
+ return "[#{action_config["alias"]}]" if action_config["alias"]
67
+
68
+ ""
69
+ end
64
70
  end
65
71
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'version'
4
+ require 'secrets'
5
+ require 'app_config'
4
6
 
5
7
  class Environment
6
8
  class << self
@@ -26,6 +28,8 @@ class Environment
26
28
  def set_ops_variables
27
29
  ENV["OPS_YML_DIR"] = Dir.pwd
28
30
  ENV["OPS_VERSION"] = Version.version.to_s
31
+ ENV["OPS_SECRETS_FILE"] = Secrets.config_path_for(Environment.environment)
32
+ ENV["OPS_CONFIG_FILE"] = AppConfig.config_path_for(Environment.environment)
29
33
  end
30
34
 
31
35
  def set_environment_aliases
data/lib/ops.rb CHANGED
@@ -29,6 +29,7 @@ class Ops
29
29
  MIN_VERSION_NOT_MET_EXIT_CODE = 67
30
30
  ACTION_CONFIG_ERROR_EXIT_CODE = 68
31
31
  BUILTIN_SYNTAX_ERROR_EXIT_CODE = 69
32
+ ACTION_NOT_ALLOWED_IN_ENV_EXIT_CODE = 70
32
33
 
33
34
  RECOMMEND_HELP_TEXT = "Run 'ops help' for a list of builtins and actions."
34
35
 
@@ -115,6 +116,9 @@ class Ops
115
116
  rescue AppConfig::ParsingError => e
116
117
  Output.error("Error parsing app config: #{e}")
117
118
  exit(ERROR_LOADING_APP_CONFIG_EXIT_CODE)
119
+ rescue Action::NotAllowedInEnvError => e
120
+ Output.error("Error running action #{@action_name}: #{e}")
121
+ exit(ACTION_NOT_ALLOWED_IN_ENV_EXIT_CODE)
118
122
  end
119
123
 
120
124
  def do_before_all
@@ -161,8 +165,12 @@ class Ops
161
165
 
162
166
  def config
163
167
  @config ||= begin
164
- Output.warn("File '#{CONFIG_FILE}' does not exist.") unless File.exist?(CONFIG_FILE)
165
- YAML.load_file(CONFIG_FILE)
168
+ if File.exist?(CONFIG_FILE)
169
+ YAML.load_file(CONFIG_FILE)
170
+ else
171
+ Output.warn("File '#{CONFIG_FILE}' does not exist.") unless @action_name == "init"
172
+ {}
173
+ end
166
174
  rescue StandardError => e
167
175
  Output.warn("Error parsing '#{CONFIG_FILE}': #{e}")
168
176
  {}
@@ -170,7 +178,7 @@ class Ops
170
178
  end
171
179
 
172
180
  def env_vars
173
- @config.dig("options", "environment") || {}
181
+ config.dig("options", "environment") || {}
174
182
  end
175
183
 
176
184
  def environment
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '0.15.0'
5
+ s.version = '0.18.0'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
  date: 2020-08-12 00:00:00.000000000 Z
@@ -130,8 +130,8 @@ dependencies:
130
130
  - - ">="
131
131
  - !ruby/object:Gem::Version
132
132
  version: 1.1.6
133
- description:
134
- email:
133
+ description:
134
+ email:
135
135
  executables:
136
136
  - ops
137
137
  extensions: []
@@ -187,7 +187,7 @@ homepage: https://github.com/nickthecook/ops
187
187
  licenses:
188
188
  - GPL-3.0-only
189
189
  metadata: {}
190
- post_install_message:
190
+ post_install_message:
191
191
  rdoc_options: []
192
192
  require_paths:
193
193
  - lib
@@ -203,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
203
  version: '0'
204
204
  requirements: []
205
205
  rubygems_version: 3.0.3
206
- signing_key:
206
+ signing_key:
207
207
  specification_version: 4
208
208
  summary: ops_team handles basic operations tasks for your project, driven by YAML
209
209
  config