ops_team 0.9.5 → 0.10.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: 68bef8a0a6e0fb892d9d5ef94f6487ee4eaa6ed8f07d3b5f5b874bd9f1170ad7
4
- data.tar.gz: 0b11cf35f0b0b3f656d5972f4a88e76ba3f84768006490174c93b9e11107f13d
3
+ metadata.gz: 047c3860b15eb79d392d3616d822530752746acee221a309b3ad0fbe35a7c4fa
4
+ data.tar.gz: db149bdce3d9777ec2416ba7489a0cea00bb268d8d82ce3c22ec4326b6a9c7e9
5
5
  SHA512:
6
- metadata.gz: 1305aa44e4043d677d34d7c74e5c429ae6a12afc5c5fd705e2db87d7ee14c25449bbb8b4eba52219dbcf2f8fa7dc77a6e51ce63559cfef0b8915652f3a1c0099
7
- data.tar.gz: afd4a2e9207b9359d2c3a5b7f41f44d9af3ea05cdce808683e7e6f455a6498fd642f08d7bc71d74c0a92bb15a29006b7ba1efcea80dae17709aacc86020cca10
6
+ metadata.gz: 3ee633e1ba692622711b0d9b6d2a5e4357dd0dbcfdad22567b858616328d2548a0ee8be45c9aa90517f17f15451dad2ff720cb02314829c0feab41164a4d5e4b
7
+ data.tar.gz: 7b03cdd354652f5c68ca1b430a1540136e08f33498a29021e4ed6fa9147779b82104c6ece6878d16b5c7530af1491f75aad23b7fe2c4db6ae0bf669f17276e5f
@@ -18,6 +18,7 @@ module Builtins
18
18
 
19
19
  def run
20
20
  subprocess = fork do
21
+ set_bglog_file_permissions
21
22
  run_ops(args)
22
23
  end
23
24
 
@@ -26,6 +27,10 @@ module Builtins
26
27
 
27
28
  private
28
29
 
30
+ def set_bglog_file_permissions
31
+ File.new(Background.log_filename, "w").chmod(0o600)
32
+ end
33
+
29
34
  def run_ops(args)
30
35
  Output.notice("Running '#{args.join(' ')}' with stderr and stdout redirected to '#{Background.log_filename}'")
31
36
  $stdout.sync = $stderr.sync = true
@@ -15,7 +15,12 @@ module Builtins
15
15
 
16
16
  def run
17
17
  Secrets.load if Options.get("exec.load_secrets")
18
- Kernel.exec(@args.join(" "))
18
+
19
+ if args.any?
20
+ Kernel.exec(args.join(" "))
21
+ else
22
+ Output.error("Usage: ops exec '<command>'")
23
+ end
19
24
  end
20
25
  end
21
26
  end
@@ -20,7 +20,7 @@ module Dependencies
20
20
  end
21
21
 
22
22
  def should_meet?
23
- system("which apk")
23
+ `uname`.chomp == "Linux" && system("which apk &>/dev/null")
24
24
  end
25
25
  end
26
26
  end
@@ -1,11 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'dependency'
4
+ require 'dependencies/helpers/apt_cache_policy'
4
5
 
5
6
  module Dependencies
6
7
  class Apt < Dependency
8
+ PACKAGE_NAME_SEPARATOR = "/"
9
+
7
10
  def met?
8
- execute("dpkg-query --show --showformat '${db:Status-Status}\n' #{name} | grep -q ^installed")
11
+ return apt_cache_policy.installed_version == package_version if package_version
12
+
13
+ apt_cache_policy.installed?
9
14
  end
10
15
 
11
16
  def meet
@@ -18,11 +23,27 @@ module Dependencies
18
23
  end
19
24
 
20
25
  def should_meet?
21
- `uname`.chomp == "Linux"
26
+ `uname`.chomp == "Linux" && system("which apt-get &>/dev/null")
22
27
  end
23
28
 
24
29
  private
25
30
 
31
+ def package_name
32
+ name_components[0]
33
+ end
34
+
35
+ def package_version
36
+ name_components[1]
37
+ end
38
+
39
+ def name_components
40
+ name.split(PACKAGE_NAME_SEPARATOR, 2)
41
+ end
42
+
43
+ def apt_cache_policy
44
+ @apt_cache_policy ||= Dependencies::Helpers::AptCachePolicy.new(package_name)
45
+ end
46
+
26
47
  def sudo_string
27
48
  return "" if ENV['USER'] == "root" || Options.get("apt.use_sudo") == false
28
49
 
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dependencies
4
+ module Helpers
5
+ class AptCachePolicy
6
+ INSTALLED_VERSION_REGEX = / Installed: ([-+.a-z0-9]+)/.freeze
7
+
8
+ attr_reader :name
9
+
10
+ def initialize(name)
11
+ @name = name
12
+ end
13
+
14
+ def installed_version
15
+ version_from_policy_version_line(installed_version_line)
16
+ end
17
+
18
+ def installed?
19
+ !!installed_version
20
+ end
21
+
22
+ private
23
+
24
+ def installed_version_line
25
+ apt_cache_lines.find { |line| line.match(/#{INSTALLED_VERSION_REGEX}/) }
26
+ end
27
+
28
+ def version_from_policy_version_line(line)
29
+ return nil if line.nil?
30
+
31
+ # E.g.:
32
+ # Installed: 7.52.1-5+deb9u7
33
+ match = line.match(/#{INSTALLED_VERSION_REGEX}/)
34
+
35
+ match.nil? ? nil : match[1]
36
+ end
37
+
38
+ def version_lines
39
+ @version_lines ||= begin
40
+ version_table_index = apt_cache_lines.find_index { |line| line.match?(/Version table:/) }
41
+
42
+ apt_cache_lines[version_table_index..-1].each_with_object([]) do |line, versions|
43
+ next unless line.match(/ *(\*\*\*)? .*/)
44
+
45
+ versions << line
46
+ end
47
+ end
48
+ end
49
+
50
+ def apt_cache_lines
51
+ @apt_cache_lines ||= `apt-cache policy #{name}`.split("\n")
52
+ end
53
+ end
54
+ end
55
+ end
@@ -18,8 +18,9 @@ module Dependencies
18
18
  def meet
19
19
  Secrets.load
20
20
 
21
- FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
21
+ Output.warn("\nNo passphrase set for SSH key '#{priv_key_name}'") if passphrase.nil? || passphrase.empty?
22
22
 
23
+ FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
23
24
  generate_key unless File.exist?(priv_key_name) && File.exist?(pub_key_name)
24
25
  add_key if success? && should_add_key?
25
26
  end
@@ -35,8 +36,6 @@ module Dependencies
35
36
  private
36
37
 
37
38
  def generate_key
38
- Output.warn("\nNo passphrase set for SSH key '#{priv_key_name}'") if passphrase.nil? || passphrase.empty?
39
-
40
39
  execute("ssh-keygen -b #{opt_key_size} -t #{opt_key_algo} -f #{priv_key_name} -q -N '#{passphrase}'")
41
40
  end
42
41
 
data/lib/ops.rb CHANGED
@@ -77,8 +77,16 @@ class Ops
77
77
  end
78
78
 
79
79
  def actions
80
- config["actions"].transform_values do |config|
81
- Action.new(config, @args)
80
+ @actions ||= begin
81
+ if config["actions"]
82
+ config["actions"]&.transform_values do |config|
83
+ Action.new(config, @args)
84
+ end
85
+ else
86
+ # only print this error if ops.yml had something in it
87
+ Output.warn("'ops.yml' has no 'actions' defined.") if config.any?
88
+ {}
89
+ end
82
90
  end
83
91
  end
84
92
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'ops_team'
5
- s.version = '0.9.5'
5
+ s.version = '0.10.0'
6
6
  s.authors = [
7
7
  'nickthecook@gmail.com'
8
8
  ]
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  'lib/builtins/*',
18
18
  'lib/builtins/helpers/*',
19
19
  'lib/dependencies/*',
20
+ 'lib/dependencies/helpers/*',
20
21
  'loader.rb',
21
22
  'ops_team.gemspec'
22
23
  ]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ops_team
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.5
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - nickthecook@gmail.com
@@ -166,6 +166,7 @@ files:
166
166
  - lib/dependencies/dir.rb
167
167
  - lib/dependencies/docker.rb
168
168
  - lib/dependencies/gem.rb
169
+ - lib/dependencies/helpers/apt_cache_policy.rb
169
170
  - lib/dependencies/sshkey.rb
170
171
  - lib/dependency.rb
171
172
  - lib/environment.rb