ops_team 0.9.9 → 0.10.4
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/lib/app_config.rb +3 -2
 - data/lib/builtins/help.rb +2 -0
 - data/lib/builtins/init.rb +8 -2
 - data/lib/dependencies/apk.rb +1 -1
 - data/lib/dependencies/apt.rb +24 -3
 - data/lib/dependencies/helpers/apt_cache_policy.rb +43 -0
 - data/lib/environment.rb +5 -0
 - data/lib/ops.rb +6 -1
 - data/lib/secrets.rb +15 -1
 - data/ops_team.gemspec +2 -1
 - metadata +2 -1
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 6f2b052b1a1dfd1e4cc30acca43495993be28499f2b1fa9eb8e587da57931d3a
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 27b21a20f77b1a0bf416f3d3a56be4142baa0b7553b3161e0b916da61b0f3422
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 67f1395a225c91a2ee619ecd1eb6eb26e16ca05bafb5f82916508875a7b58c0eafe40be120f83ec2b55a42aa3695bcb91cf1b1ca5973c521029bd377f9c02c86
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: cf644c0878ce56c6f11c6e45719044a72aa71a566bca492c5f51966436ef25010ec19dd6c5d8f5a0f4cd408177a114975f4e3160b27977bda3360db4ce456282
         
     | 
    
        data/lib/app_config.rb
    CHANGED
    
    | 
         @@ -1,6 +1,8 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            class AppConfig
         
     | 
| 
      
 4 
     | 
    
         
            +
            	class ParsingError < StandardError; end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
       4 
6 
     | 
    
         
             
            	class << self
         
     | 
| 
       5 
7 
     | 
    
         
             
            		def load
         
     | 
| 
       6 
8 
     | 
    
         
             
            			new(app_config_path).load
         
     | 
| 
         @@ -36,8 +38,7 @@ class AppConfig 
     | 
|
| 
       36 
38 
     | 
    
         
             
            	def config
         
     | 
| 
       37 
39 
     | 
    
         
             
            		@config ||= file_contents ? YAML.safe_load(file_contents) : {}
         
     | 
| 
       38 
40 
     | 
    
         
             
            	rescue YAML::SyntaxError => e
         
     | 
| 
       39 
     | 
    
         
            -
            		 
     | 
| 
       40 
     | 
    
         
            -
            		{}
         
     | 
| 
      
 41 
     | 
    
         
            +
            		raise ParsingError, "Error parsing config data: #{e}"
         
     | 
| 
       41 
42 
     | 
    
         
             
            	end
         
     | 
| 
       42 
43 
     | 
    
         | 
| 
       43 
44 
     | 
    
         
             
            	def file_contents
         
     | 
    
        data/lib/builtins/help.rb
    CHANGED
    
    
    
        data/lib/builtins/init.rb
    CHANGED
    
    | 
         @@ -32,12 +32,18 @@ module Builtins 
     | 
|
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
            		private
         
     | 
| 
       34 
34 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            		def  
     | 
| 
      
 35 
     | 
    
         
            +
            		def template_name
         
     | 
| 
       36 
36 
     | 
    
         
             
            			@args[0]
         
     | 
| 
       37 
37 
     | 
    
         
             
            		end
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
            		def template_path
         
     | 
| 
       40 
     | 
    
         
            -
            			 
     | 
| 
      
 40 
     | 
    
         
            +
            			return template_name if template_name && File.exist?(template_name)
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            			builtin_template_path
         
     | 
| 
      
 43 
     | 
    
         
            +
            		end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            		def builtin_template_path
         
     | 
| 
      
 46 
     | 
    
         
            +
            			format(OPS_YML_TEMPLATE, template_name: template_name || DEFAULT_TEMPLATE_NAME)
         
     | 
| 
       41 
47 
     | 
    
         
             
            		end
         
     | 
| 
       42 
48 
     | 
    
         | 
| 
       43 
49 
     | 
    
         
             
            		def template_name_list
         
     | 
    
        data/lib/dependencies/apk.rb
    CHANGED
    
    
    
        data/lib/dependencies/apt.rb
    CHANGED
    
    | 
         @@ -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 
     | 
    
         
            -
            			 
     | 
| 
      
 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,13 +23,29 @@ module Dependencies 
     | 
|
| 
       18 
23 
     | 
    
         
             
            		end
         
     | 
| 
       19 
24 
     | 
    
         | 
| 
       20 
25 
     | 
    
         
             
            		def should_meet?
         
     | 
| 
       21 
     | 
    
         
            -
            			`uname`.chomp == "Linux" && system("which apt-get 
     | 
| 
      
 26 
     | 
    
         
            +
            			`uname`.chomp == "Linux" && system("which apt-get")
         
     | 
| 
       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 
     | 
    
         
            -
            			return "" if ENV['USER'] == "root" || Options.get("apt.use_sudo") == false
         
     | 
| 
      
 48 
     | 
    
         
            +
            			return "" if ENV['USER'] == "root" || `whoami` == "root" || Options.get("apt.use_sudo") == false
         
     | 
| 
       28 
49 
     | 
    
         | 
| 
       29 
50 
     | 
    
         
             
            			"sudo "
         
     | 
| 
       30 
51 
     | 
    
         
             
            		end
         
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 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 apt_cache_lines
         
     | 
| 
      
 39 
     | 
    
         
            +
            				@apt_cache_lines ||= `apt-cache policy #{name}`.split("\n")
         
     | 
| 
      
 40 
     | 
    
         
            +
            			end
         
     | 
| 
      
 41 
     | 
    
         
            +
            		end
         
     | 
| 
      
 42 
     | 
    
         
            +
            	end
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/environment.rb
    CHANGED
    
    | 
         @@ -6,6 +6,7 @@ class Environment 
     | 
|
| 
       6 
6 
     | 
    
         
             
            	end
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
            	def set_variables
         
     | 
| 
      
 9 
     | 
    
         
            +
            		set_ops_variables
         
     | 
| 
       9 
10 
     | 
    
         
             
            		set_environment_aliases
         
     | 
| 
       10 
11 
     | 
    
         
             
            		set_configured_variables
         
     | 
| 
       11 
12 
     | 
    
         
             
            	end
         
     | 
| 
         @@ -18,6 +19,10 @@ class Environment 
     | 
|
| 
       18 
19 
     | 
    
         | 
| 
       19 
20 
     | 
    
         
             
            	private
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
      
 22 
     | 
    
         
            +
            	def set_ops_variables
         
     | 
| 
      
 23 
     | 
    
         
            +
            		ENV["OPS_YML_DIR"] = Dir.pwd
         
     | 
| 
      
 24 
     | 
    
         
            +
            	end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
       21 
26 
     | 
    
         
             
            	def set_environment_aliases
         
     | 
| 
       22 
27 
     | 
    
         
             
            		environment_aliases.each do |alias_name|
         
     | 
| 
       23 
28 
     | 
    
         
             
            			ENV[alias_name] = environment
         
     | 
    
        data/lib/ops.rb
    CHANGED
    
    | 
         @@ -18,6 +18,7 @@ class Ops 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
            	INVALID_SYNTAX_EXIT_CODE = 64
         
     | 
| 
       20 
20 
     | 
    
         
             
            	UNKNOWN_ACTION_EXIT_CODE = 65
         
     | 
| 
      
 21 
     | 
    
         
            +
            	ERROR_LOADING_APP_CONFIG_EXIT_CODE = 66
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
       22 
23 
     | 
    
         
             
            	class << self
         
     | 
| 
       23 
24 
     | 
    
         
             
            		def project_name
         
     | 
| 
         @@ -60,6 +61,9 @@ class Ops 
     | 
|
| 
       60 
61 
     | 
    
         | 
| 
       61 
62 
     | 
    
         
             
            		Output.notice("Running '#{action}' from #{CONFIG_FILE} in environment '#{ENV['environment']}'...")
         
     | 
| 
       62 
63 
     | 
    
         
             
            		action.run
         
     | 
| 
      
 64 
     | 
    
         
            +
            	rescue AppConfig::ParsingError => e
         
     | 
| 
      
 65 
     | 
    
         
            +
            		Output.error("Error parsing app config: #{e}")
         
     | 
| 
      
 66 
     | 
    
         
            +
            		exit(ERROR_LOADING_APP_CONFIG_EXIT_CODE)
         
     | 
| 
       63 
67 
     | 
    
         
             
            	end
         
     | 
| 
       64 
68 
     | 
    
         | 
| 
       65 
69 
     | 
    
         
             
            	def builtin
         
     | 
| 
         @@ -94,7 +98,8 @@ class Ops 
     | 
|
| 
       94 
98 
     | 
    
         
             
            		@config ||= begin
         
     | 
| 
       95 
99 
     | 
    
         
             
            			Output.warn("File '#{CONFIG_FILE}' does not exist.") unless File.exist?(CONFIG_FILE)
         
     | 
| 
       96 
100 
     | 
    
         
             
            			YAML.load_file(CONFIG_FILE)
         
     | 
| 
       97 
     | 
    
         
            -
            		rescue StandardError
         
     | 
| 
      
 101 
     | 
    
         
            +
            		rescue StandardError => e
         
     | 
| 
      
 102 
     | 
    
         
            +
            			Output.warn("Error parsing '#{CONFIG_FILE}': #{e}")
         
     | 
| 
       98 
103 
     | 
    
         
             
            			{}
         
     | 
| 
       99 
104 
     | 
    
         
             
            		end
         
     | 
| 
       100 
105 
     | 
    
         
             
            	end
         
     | 
    
        data/lib/secrets.rb
    CHANGED
    
    | 
         @@ -1,6 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require 'json'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'open3'
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
6 
     | 
    
         
             
            require 'output'
         
     | 
| 
       6 
7 
     | 
    
         
             
            require 'app_config'
         
     | 
| 
         @@ -38,6 +39,19 @@ class Secrets < AppConfig 
     | 
|
| 
       38 
39 
     | 
    
         
             
            	end
         
     | 
| 
       39 
40 
     | 
    
         | 
| 
       40 
41 
     | 
    
         
             
            	def file_contents
         
     | 
| 
       41 
     | 
    
         
            -
            		@file_contents ||=  
     | 
| 
      
 42 
     | 
    
         
            +
            		@file_contents ||= begin
         
     | 
| 
      
 43 
     | 
    
         
            +
            			@filename.match(/\.ejson$/) ? ejson_contents : super
         
     | 
| 
      
 44 
     | 
    
         
            +
            		end
         
     | 
| 
      
 45 
     | 
    
         
            +
            	end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            	def ejson_contents
         
     | 
| 
      
 48 
     | 
    
         
            +
            		@ejson_contents ||= begin
         
     | 
| 
      
 49 
     | 
    
         
            +
            			out, err, _status = Open3.capture3("ejson decrypt #{@filename}")
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
            			# TODO: err is only nil in testing, but I can't figure out why the stubbing isn't working
         
     | 
| 
      
 52 
     | 
    
         
            +
            			raise ParsingError, "Error decrypting EJSON file: #{err}" unless err.nil? || err.empty?
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            			out
         
     | 
| 
      
 55 
     | 
    
         
            +
            		end
         
     | 
| 
       42 
56 
     | 
    
         
             
            	end
         
     | 
| 
       43 
57 
     | 
    
         
             
            end
         
     | 
    
        data/ops_team.gemspec
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            Gem::Specification.new do |s|
         
     | 
| 
       4 
4 
     | 
    
         
             
            	s.name = 'ops_team'
         
     | 
| 
       5 
     | 
    
         
            -
            	s.version = '0. 
     | 
| 
      
 5 
     | 
    
         
            +
            	s.version = '0.10.4'
         
     | 
| 
       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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.10.4
         
     | 
| 
       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
         
     |