terraform-wrapper 1.3.0 → 1.3.2
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/Gemfile +1 -1
 - data/Rakefile +2 -2
 - data/lib/terraform-wrapper/shared/backends/aws.rb +61 -64
 - data/lib/terraform-wrapper/shared/backends/azure.rb +46 -54
 - data/lib/terraform-wrapper/shared/backends/common.rb +25 -31
 - data/lib/terraform-wrapper/shared/backends/local.rb +38 -36
 - data/lib/terraform-wrapper/version.rb +3 -5
 - data/lib/terraform-wrapper.rb +35 -30
 - data/terraform-wrapper.gemspec +16 -14
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0be894eaa86b7493c61971a31851c37cff0f34083c74d4341c83ff4c0e3e851f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 64670c333712e79c96ad88701b746937b5e2f1197e1c8e3c23221106ac6bc82d
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 509c3ec3deaafc95f8d511f60568e454bc1a0317bfc40abdbe1603a9edaebf590da5261dc0ce779c05e56ad6f7d05b44cb3f2297765eae324b510d1b58320518
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: e437dd53cad70112cb681da581d6d074808df723f8fb27905b0ccd529204e12e200dc71511c86e332e6561221d394edf2ae831243f0893e3ff46f55b33e6f438
         
     | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -4,7 +4,7 @@ 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            require  
     | 
| 
      
 7 
     | 
    
         
            +
            require 'bundler/gem_tasks'
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
         @@ -13,7 +13,7 @@ task default: %i[] 
     | 
|
| 
       13 
13 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
            begin
         
     | 
| 
       16 
     | 
    
         
            -
              require  
     | 
| 
      
 16 
     | 
    
         
            +
              require 'rspec/core/rake_task'
         
     | 
| 
       17 
17 
     | 
    
         
             
              RSpec::Core::RakeTask.new(:spec)
         
     | 
| 
       18 
18 
     | 
    
         
             
            rescue LoadError
         
     | 
| 
       19 
19 
     | 
    
         
             
            end
         
     | 
| 
         @@ -1,108 +1,109 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module TerraformWrapper
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 4 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
              module Shared
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 7 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
       11 
9 
     | 
    
         
             
                module Backends
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
       15 
12 
     | 
    
         
             
                  class AWS < Common
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 13 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       18 
14 
     | 
    
         | 
| 
       19 
15 
     | 
    
         
             
                    include TerraformWrapper::Shared::Logging
         
     | 
| 
       20 
16 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 17 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    @@default_class =  
     | 
| 
      
 19 
     | 
    
         
            +
                    @@default_class = 'terraform-state'
         
     | 
| 
       24 
20 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 21 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       26 
22 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                    @@type =  
     | 
| 
      
 23 
     | 
    
         
            +
                    @@type = 'aws'
         
     | 
| 
       28 
24 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 25 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       30 
26 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                    attr_reader :bucket
         
     | 
| 
       32 
     | 
    
         
            -
                    attr_reader :encrypt
         
     | 
| 
       33 
     | 
    
         
            -
                    attr_reader :key
         
     | 
| 
       34 
     | 
    
         
            -
                    attr_reader :region
         
     | 
| 
      
 27 
     | 
    
         
            +
                    attr_reader :bucket, :encrypt, :key, :region
         
     | 
| 
       35 
28 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 29 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       37 
30 
     | 
    
         | 
| 
       38 
31 
     | 
    
         
             
                    def initialize(options:, variables:)
         
     | 
| 
       39 
32 
     | 
    
         
             
                      construct(options: options, variables: variables)
         
     | 
| 
       40 
33 
     | 
    
         
             
                    end
         
     | 
| 
       41 
34 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 35 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       43 
36 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
                    def hash 
     | 
| 
       45 
     | 
    
         
            -
                      result =  
     | 
| 
      
 37 
     | 
    
         
            +
                    def hash
         
     | 
| 
      
 38 
     | 
    
         
            +
                      result = {}
         
     | 
| 
       46 
39 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                      result[ 
     | 
| 
       48 
     | 
    
         
            -
                      result[ 
     | 
| 
       49 
     | 
    
         
            -
                      result[ 
     | 
| 
       50 
     | 
    
         
            -
                      result[ 
     | 
| 
      
 40 
     | 
    
         
            +
                      result['bucket']  = @bucket
         
     | 
| 
      
 41 
     | 
    
         
            +
                      result['region']  = @region
         
     | 
| 
      
 42 
     | 
    
         
            +
                      result['key']     = @key
         
     | 
| 
      
 43 
     | 
    
         
            +
                      result['encrypt'] = @encrypt.to_s
         
     | 
| 
       51 
44 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                      result[ 
     | 
| 
       53 
     | 
    
         
            -
                      result[ 
     | 
| 
      
 45 
     | 
    
         
            +
                      result['kms_key_id'] = @kms  unless @kms.nil?
         
     | 
| 
      
 46 
     | 
    
         
            +
                      result['role_arn']   = @role unless @role.nil?
         
     | 
| 
       54 
47 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                       
     | 
| 
      
 48 
     | 
    
         
            +
                      result
         
     | 
| 
       56 
49 
     | 
    
         
             
                    end
         
     | 
| 
       57 
50 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 51 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       59 
52 
     | 
    
         | 
| 
       60 
53 
     | 
    
         
             
                    private
         
     | 
| 
       61 
54 
     | 
    
         | 
| 
       62 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 55 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       63 
56 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
                    def specific 
     | 
| 
      
 57 
     | 
    
         
            +
                    def specific
         
     | 
| 
       65 
58 
     | 
    
         
             
                      kms  = nil
         
     | 
| 
       66 
59 
     | 
    
         
             
                      role = nil
         
     | 
| 
       67 
60 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                      logger.fatal("AWS backend mandatory option 'bucket' has not been set!") unless @options.key?( 
     | 
| 
       69 
     | 
    
         
            -
                      logger.fatal("AWS backend mandatory option 'region' has not been set!") unless @options.key?( 
     | 
| 
      
 61 
     | 
    
         
            +
                      logger.fatal("AWS backend mandatory option 'bucket' has not been set!") unless @options.key?('bucket')
         
     | 
| 
      
 62 
     | 
    
         
            +
                      logger.fatal("AWS backend mandatory option 'region' has not been set!") unless @options.key?('region')
         
     | 
| 
       70 
63 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                      bucket = @options[ 
     | 
| 
      
 64 
     | 
    
         
            +
                      bucket = @options['bucket']
         
     | 
| 
       72 
65 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       74 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 66 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket name must be a string!') unless bucket.is_a?(String)
         
     | 
| 
      
 67 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket name must not be blank!') if bucket.strip.empty?
         
     | 
| 
       75 
68 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
                      region = @options[ 
     | 
| 
      
 69 
     | 
    
         
            +
                      region = @options['region']
         
     | 
| 
       77 
70 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       79 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 71 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket region must be a string!') unless region.is_a?(String)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket region must not be blank!') if region.strip.empty?
         
     | 
| 
       80 
73 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                      key = @options.key?( 
     | 
| 
      
 74 
     | 
    
         
            +
                      key = @options.key?('key') ? @options['key'] : File.join('%<service>s', '%<config>s', "%<component>s#{@@ext}")
         
     | 
| 
       82 
75 
     | 
    
         | 
| 
       83 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       84 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 76 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket key must be a string!') unless key.is_a?(String)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket key must not be blank!') if key.strip.empty?
         
     | 
| 
       85 
78 
     | 
    
         | 
| 
       86 
     | 
    
         
            -
                      encrypt = @options.key?( 
     | 
| 
      
 79 
     | 
    
         
            +
                      encrypt = @options.key?('encrypt') ? @options['encrypt'] : true
         
     | 
| 
       87 
80 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 81 
     | 
    
         
            +
                      logger.fatal('AWS backend S3 bucket encryption enabled must be a Boolean!') unless [true,
         
     | 
| 
      
 82 
     | 
    
         
            +
                                                                                                          false].include?(encrypt)
         
     | 
| 
       89 
83 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
                      if @options.key?( 
     | 
| 
       91 
     | 
    
         
            -
                        kms = @options[ 
     | 
| 
      
 84 
     | 
    
         
            +
                      if @options.key?('kms')
         
     | 
| 
      
 85 
     | 
    
         
            +
                        kms = @options['kms']
         
     | 
| 
       92 
86 
     | 
    
         | 
| 
       93 
     | 
    
         
            -
                         
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
      
 87 
     | 
    
         
            +
                        unless kms.is_a?(String)
         
     | 
| 
      
 88 
     | 
    
         
            +
                          logger.fatal('AWS backend S3 bucket encryption KMS key ARN must be a string if specified!')
         
     | 
| 
      
 89 
     | 
    
         
            +
                        end
         
     | 
| 
      
 90 
     | 
    
         
            +
                        if kms.strip.empty?
         
     | 
| 
      
 91 
     | 
    
         
            +
                          logger.fatal('AWS backend S3 bucket encryption KMS key ARN must not be blank if specified!')
         
     | 
| 
      
 92 
     | 
    
         
            +
                        end
         
     | 
| 
       95 
93 
     | 
    
         
             
                      end
         
     | 
| 
       96 
94 
     | 
    
         | 
| 
       97 
     | 
    
         
            -
                      if @options.key?( 
     | 
| 
       98 
     | 
    
         
            -
                        role = @options[ 
     | 
| 
      
 95 
     | 
    
         
            +
                      if @options.key?('role')
         
     | 
| 
      
 96 
     | 
    
         
            +
                        role = @options['role']
         
     | 
| 
       99 
97 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
                        logger.fatal( 
     | 
| 
       101 
     | 
    
         
            -
                        logger.fatal( 
     | 
| 
      
 98 
     | 
    
         
            +
                        logger.fatal('AWS backend role to assume ARN must be a string if specified!') unless role.is_a?(String)
         
     | 
| 
      
 99 
     | 
    
         
            +
                        logger.fatal('AWS backend role to assume ARN must not be blank if specified!') if role.strip.empty?
         
     | 
| 
       102 
100 
     | 
    
         
             
                      end
         
     | 
| 
       103 
101 
     | 
    
         | 
| 
       104 
     | 
    
         
            -
                      @variables.core.keys.map{ |sym| sym.to_s }.each do |core|
         
     | 
| 
       105 
     | 
    
         
            -
                         
     | 
| 
      
 102 
     | 
    
         
            +
                      @variables.core.keys.map { |sym| sym.to_s }.each do |core|
         
     | 
| 
      
 103 
     | 
    
         
            +
                        unless bucket.include?("%<#{core}>s") || key.include?("%<#{core}>s") ||
         
     | 
| 
      
 104 
     | 
    
         
            +
                               bucket.include?("%{#{core}}") || key.include?("%{#{core}}")
         
     | 
| 
      
 105 
     | 
    
         
            +
                          logger.fatal("AWS backend S3 bucket name or key must include %<#{core}>s.")
         
     | 
| 
      
 106 
     | 
    
         
            +
                        end
         
     | 
| 
       106 
107 
     | 
    
         
             
                      end
         
     | 
| 
       107 
108 
     | 
    
         | 
| 
       108 
109 
     | 
    
         
             
                      begin
         
     | 
| 
         @@ -111,8 +112,8 @@ module TerraformWrapper 
     | 
|
| 
       111 
112 
     | 
    
         
             
                        key    = key    % @variables.identifiers
         
     | 
| 
       112 
113 
     | 
    
         
             
                        kms    = kms    % @variables.identifiers unless kms.nil?
         
     | 
| 
       113 
114 
     | 
    
         
             
                        role   = role   % @variables.identifiers unless role.nil?
         
     | 
| 
       114 
     | 
    
         
            -
                      rescue
         
     | 
| 
       115 
     | 
    
         
            -
                        logger.fatal( 
     | 
| 
      
 115 
     | 
    
         
            +
                      rescue StandardError
         
     | 
| 
      
 116 
     | 
    
         
            +
                        logger.fatal('AWS backend options contain identifiers that are not included in the configuration file!')
         
     | 
| 
       116 
117 
     | 
    
         
             
                      end
         
     | 
| 
       117 
118 
     | 
    
         | 
| 
       118 
119 
     | 
    
         
             
                      logger.fatal("Key: #{key} is too long for backend of type: #{@@type}") if key.length > 1024
         
     | 
| 
         @@ -125,20 +126,16 @@ module TerraformWrapper 
     | 
|
| 
       125 
126 
     | 
    
         
             
                      @role    = role
         
     | 
| 
       126 
127 
     | 
    
         
             
                    end
         
     | 
| 
       127 
128 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
      
 129 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       130 
130 
     | 
    
         
             
                  end
         
     | 
| 
       131 
131 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
      
 132 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       134 
133 
     | 
    
         
             
                end
         
     | 
| 
       135 
134 
     | 
    
         | 
| 
       136 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
      
 135 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       138 
136 
     | 
    
         
             
              end
         
     | 
| 
       139 
137 
     | 
    
         | 
| 
       140 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       141 
     | 
    
         
            -
             
     | 
| 
      
 138 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       142 
139 
     | 
    
         
             
            end
         
     | 
| 
       143 
140 
     | 
    
         | 
| 
       144 
141 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
         @@ -1,82 +1,78 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module TerraformWrapper
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 4 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
              module Shared
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 7 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
       11 
9 
     | 
    
         
             
                module Backends
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
       15 
12 
     | 
    
         
             
                  class Azure < Common
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 13 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       18 
14 
     | 
    
         | 
| 
       19 
15 
     | 
    
         
             
                    include TerraformWrapper::Shared::Logging
         
     | 
| 
       20 
16 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 17 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    @@type =  
     | 
| 
      
 19 
     | 
    
         
            +
                    @@type = 'azure'
         
     | 
| 
       24 
20 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 21 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       26 
22 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                    attr_reader :account
         
     | 
| 
       28 
     | 
    
         
            -
                    attr_reader :container
         
     | 
| 
       29 
     | 
    
         
            -
                    attr_reader :group
         
     | 
| 
       30 
     | 
    
         
            -
                    attr_reader :key
         
     | 
| 
      
 23 
     | 
    
         
            +
                    attr_reader :account, :container, :group, :key
         
     | 
| 
       31 
24 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 25 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       33 
26 
     | 
    
         | 
| 
       34 
27 
     | 
    
         
             
                    def initialize(options:, variables:)
         
     | 
| 
       35 
28 
     | 
    
         
             
                      construct(options: options, variables: variables)
         
     | 
| 
       36 
29 
     | 
    
         
             
                    end
         
     | 
| 
       37 
30 
     | 
    
         | 
| 
       38 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 31 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       39 
32 
     | 
    
         | 
| 
       40 
     | 
    
         
            -
                    def hash 
     | 
| 
       41 
     | 
    
         
            -
                       
     | 
| 
       42 
     | 
    
         
            -
                         
     | 
| 
       43 
     | 
    
         
            -
                         
     | 
| 
       44 
     | 
    
         
            -
                         
     | 
| 
       45 
     | 
    
         
            -
                         
     | 
| 
      
 33 
     | 
    
         
            +
                    def hash
         
     | 
| 
      
 34 
     | 
    
         
            +
                      {
         
     | 
| 
      
 35 
     | 
    
         
            +
                        'container_name' => @container,
         
     | 
| 
      
 36 
     | 
    
         
            +
                        'key' => @key,
         
     | 
| 
      
 37 
     | 
    
         
            +
                        'resource_group_name' => @group,
         
     | 
| 
      
 38 
     | 
    
         
            +
                        'storage_account_name' => @account
         
     | 
| 
       46 
39 
     | 
    
         
             
                      }
         
     | 
| 
       47 
40 
     | 
    
         
             
                    end
         
     | 
| 
       48 
41 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 42 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       50 
43 
     | 
    
         | 
| 
       51 
44 
     | 
    
         
             
                    private
         
     | 
| 
       52 
45 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 46 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       54 
47 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
                    def specific 
     | 
| 
       56 
     | 
    
         
            -
                      logger.fatal("Azure backend mandatory option 'group' has not been set!") unless @options.key?( 
     | 
| 
      
 48 
     | 
    
         
            +
                    def specific
         
     | 
| 
      
 49 
     | 
    
         
            +
                      logger.fatal("Azure backend mandatory option 'group' has not been set!") unless @options.key?('group')
         
     | 
| 
       57 
50 
     | 
    
         | 
| 
       58 
     | 
    
         
            -
                      group = @options[ 
     | 
| 
      
 51 
     | 
    
         
            +
                      group = @options['group']
         
     | 
| 
       59 
52 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       61 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 53 
     | 
    
         
            +
                      logger.fatal('Azure backend group must be a string!') unless group.is_a?(String)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      logger.fatal('Azure backend group must not be blank!') if group.strip.empty?
         
     | 
| 
       62 
55 
     | 
    
         | 
| 
       63 
     | 
    
         
            -
                      account = @options.key?( 
     | 
| 
      
 56 
     | 
    
         
            +
                      account = @options.key?('account') ? @options['account'] : group + 'tf'
         
     | 
| 
       64 
57 
     | 
    
         | 
| 
       65 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       66 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 58 
     | 
    
         
            +
                      logger.fatal('Azure backend storage account must be a string!') unless account.is_a?(String)
         
     | 
| 
      
 59 
     | 
    
         
            +
                      logger.fatal('Azure backend storage account must not be blank!') if account.strip.empty?
         
     | 
| 
       67 
60 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                      container = @options.key?( 
     | 
| 
      
 61 
     | 
    
         
            +
                      container = @options.key?('container') ? @options['container'] : 'default'
         
     | 
| 
       69 
62 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       71 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 63 
     | 
    
         
            +
                      logger.fatal('Azure backend storage account container must be a string!') unless container.is_a?(String)
         
     | 
| 
      
 64 
     | 
    
         
            +
                      logger.fatal('Azure backend storage account container must not be blank!') if container.strip.empty?
         
     | 
| 
       72 
65 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
                      key = @options.key?( 
     | 
| 
      
 66 
     | 
    
         
            +
                      key = @options.key?('key') ? @options['key'] : File.join('%<service>s', '%<config>s', "%<component>s#{@@ext}")
         
     | 
| 
       74 
67 
     | 
    
         | 
| 
       75 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
       76 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 68 
     | 
    
         
            +
                      logger.fatal('Azure backend storage account key must be a string!') unless key.is_a?(String)
         
     | 
| 
      
 69 
     | 
    
         
            +
                      logger.fatal('Azure backend storage account key must not be blank!') if key.strip.empty?
         
     | 
| 
       77 
70 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
                      @variables.core.keys.map{ |sym| sym.to_s }.each do |core|
         
     | 
| 
       79 
     | 
    
         
            -
                         
     | 
| 
      
 71 
     | 
    
         
            +
                      @variables.core.keys.map { |sym| sym.to_s }.each do |core|
         
     | 
| 
      
 72 
     | 
    
         
            +
                        unless container.include?("%<#{core}>s") || key.include?("%<#{core}>s") ||
         
     | 
| 
      
 73 
     | 
    
         
            +
                               container.include?("%{#{core}}") || key.include?("%{#{core}}")
         
     | 
| 
      
 74 
     | 
    
         
            +
                          logger.fatal("Azure backend container or key must include %<#{core}>s.")
         
     | 
| 
      
 75 
     | 
    
         
            +
                        end
         
     | 
| 
       80 
76 
     | 
    
         
             
                      end
         
     | 
| 
       81 
77 
     | 
    
         | 
| 
       82 
78 
     | 
    
         
             
                      begin
         
     | 
| 
         @@ -84,14 +80,14 @@ module TerraformWrapper 
     | 
|
| 
       84 
80 
     | 
    
         
             
                        account   = account   % @variables.identifiers
         
     | 
| 
       85 
81 
     | 
    
         
             
                        container = container % @variables.identifiers
         
     | 
| 
       86 
82 
     | 
    
         
             
                        key       = key       % @variables.identifiers
         
     | 
| 
       87 
     | 
    
         
            -
                      rescue
         
     | 
| 
       88 
     | 
    
         
            -
                        logger.fatal( 
     | 
| 
      
 83 
     | 
    
         
            +
                      rescue StandardError
         
     | 
| 
      
 84 
     | 
    
         
            +
                        logger.fatal('Azure backend options contain identifiers that are not included in the configuration file!')
         
     | 
| 
       89 
85 
     | 
    
         
             
                      end
         
     | 
| 
       90 
86 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
                      if key.length > 1024 
     | 
| 
      
 87 
     | 
    
         
            +
                      if key.length > 1024
         
     | 
| 
       92 
88 
     | 
    
         
             
                        logger.fatal("Key: #{key} is too long for backend of type: #{@@type}")
         
     | 
| 
       93 
     | 
    
         
            -
                       
     | 
| 
       94 
     | 
    
         
            -
                        logger.warn("Key for backend of type: #{@@type} exceeds 256 characters. This will not work with the Azure Storage Emulator. If key is not being overriden, consider using less identifiers.") 
     | 
| 
      
 89 
     | 
    
         
            +
                      elsif key.length > 256
         
     | 
| 
      
 90 
     | 
    
         
            +
                        logger.warn("Key for backend of type: #{@@type} exceeds 256 characters. This will not work with the Azure Storage Emulator. If key is not being overriden, consider using less identifiers.")
         
     | 
| 
       95 
91 
     | 
    
         
             
                      end
         
     | 
| 
       96 
92 
     | 
    
         | 
| 
       97 
93 
     | 
    
         
             
                      @group     = group
         
     | 
| 
         @@ -100,20 +96,16 @@ module TerraformWrapper 
     | 
|
| 
       100 
96 
     | 
    
         
             
                      @key       = key
         
     | 
| 
       101 
97 
     | 
    
         
             
                    end
         
     | 
| 
       102 
98 
     | 
    
         | 
| 
       103 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
      
 99 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       105 
100 
     | 
    
         
             
                  end
         
     | 
| 
       106 
101 
     | 
    
         | 
| 
       107 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
      
 102 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       109 
103 
     | 
    
         
             
                end
         
     | 
| 
       110 
104 
     | 
    
         | 
| 
       111 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
      
 105 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       113 
106 
     | 
    
         
             
              end
         
     | 
| 
       114 
107 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
      
 108 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       117 
109 
     | 
    
         
             
            end
         
     | 
| 
       118 
110 
     | 
    
         | 
| 
       119 
111 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
         @@ -1,58 +1,56 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module TerraformWrapper
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 4 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
              module Shared
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 7 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
       11 
9 
     | 
    
         
             
                module Backends
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
       15 
12 
     | 
    
         
             
                  class Common
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 13 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       18 
14 
     | 
    
         | 
| 
       19 
15 
     | 
    
         
             
                    include TerraformWrapper::Shared::Logging
         
     | 
| 
       20 
16 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 17 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    @@ext =  
     | 
| 
      
 19 
     | 
    
         
            +
                    @@ext = '.tfstate'
         
     | 
| 
       24 
20 
     | 
    
         
             
                    @@type
         
     | 
| 
       25 
21 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 22 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       27 
23 
     | 
    
         | 
| 
       28 
24 
     | 
    
         
             
                    @options
         
     | 
| 
       29 
25 
     | 
    
         
             
                    @variables
         
     | 
| 
       30 
26 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 27 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       32 
28 
     | 
    
         | 
| 
       33 
29 
     | 
    
         
             
                    def initialize(options:, variables:)
         
     | 
| 
       34 
     | 
    
         
            -
                      logger.fatal( 
     | 
| 
      
 30 
     | 
    
         
            +
                      logger.fatal('This class should not be used directly! Please create a backend-specific class instead!')
         
     | 
| 
       35 
31 
     | 
    
         
             
                    end
         
     | 
| 
       36 
32 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 33 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       38 
34 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                    def hash 
     | 
| 
      
 35 
     | 
    
         
            +
                    def hash
         
     | 
| 
       40 
36 
     | 
    
         
             
                      logger.fatal("The backend specific class should override the 'hash' method to return a hash of parameters for Terraform to set!")
         
     | 
| 
       41 
37 
     | 
    
         
             
                    end
         
     | 
| 
       42 
38 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 39 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       44 
40 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                    def type 
     | 
| 
       46 
     | 
    
         
            -
                       
     | 
| 
      
 41 
     | 
    
         
            +
                    def type
         
     | 
| 
      
 42 
     | 
    
         
            +
                      unless @@type.is_a?(String)
         
     | 
| 
      
 43 
     | 
    
         
            +
                        logger.fatal("The backend specific class should set the 'type' class variable to a string!")
         
     | 
| 
      
 44 
     | 
    
         
            +
                      end
         
     | 
| 
       47 
45 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                       
     | 
| 
      
 46 
     | 
    
         
            +
                      @@type
         
     | 
| 
       49 
47 
     | 
    
         
             
                    end
         
     | 
| 
       50 
48 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 49 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       52 
50 
     | 
    
         | 
| 
       53 
51 
     | 
    
         
             
                    private
         
     | 
| 
       54 
52 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 53 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       56 
54 
     | 
    
         | 
| 
       57 
55 
     | 
    
         
             
                    def construct(options:, variables:)
         
     | 
| 
       58 
56 
     | 
    
         
             
                      @options   = options
         
     | 
| 
         @@ -61,26 +59,22 @@ module TerraformWrapper 
     | 
|
| 
       61 
59 
     | 
    
         
             
                      specific
         
     | 
| 
       62 
60 
     | 
    
         
             
                    end
         
     | 
| 
       63 
61 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 62 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       65 
63 
     | 
    
         | 
| 
       66 
     | 
    
         
            -
                    def specific 
     | 
| 
      
 64 
     | 
    
         
            +
                    def specific
         
     | 
| 
       67 
65 
     | 
    
         
             
                      logger.fatal("The backend specific class should override the 'specific' method to include backend specific validation and setup, or simply return 'true' if it is not required.")
         
     | 
| 
       68 
66 
     | 
    
         
             
                    end
         
     | 
| 
       69 
67 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       72 
69 
     | 
    
         
             
                  end
         
     | 
| 
       73 
70 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
      
 71 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       76 
72 
     | 
    
         
             
                end
         
     | 
| 
       77 
73 
     | 
    
         | 
| 
       78 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       80 
75 
     | 
    
         
             
              end
         
     | 
| 
       81 
76 
     | 
    
         | 
| 
       82 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 77 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       84 
78 
     | 
    
         
             
            end
         
     | 
| 
       85 
79 
     | 
    
         | 
| 
       86 
80 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
         @@ -1,89 +1,91 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module TerraformWrapper
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 4 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
              module Shared
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 7 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       10 
8 
     | 
    
         | 
| 
       11 
9 
     | 
    
         
             
                module Backends
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 10 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
       15 
12 
     | 
    
         
             
                  class Local < Common
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 13 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       18 
14 
     | 
    
         | 
| 
       19 
15 
     | 
    
         
             
                    include TerraformWrapper::Shared::Logging
         
     | 
| 
       20 
16 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 17 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    @@type =  
     | 
| 
      
 19 
     | 
    
         
            +
                    @@type = 'local'
         
     | 
| 
       24 
20 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 21 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       26 
22 
     | 
    
         | 
| 
       27 
23 
     | 
    
         
             
                    attr_reader :path
         
     | 
| 
       28 
24 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 25 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       30 
26 
     | 
    
         | 
| 
       31 
27 
     | 
    
         
             
                    def initialize(options:, variables:)
         
     | 
| 
       32 
28 
     | 
    
         
             
                      construct(options: options, variables: variables)
         
     | 
| 
       33 
29 
     | 
    
         
             
                    end
         
     | 
| 
       34 
30 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 31 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       36 
32 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                    def hash 
     | 
| 
       38 
     | 
    
         
            -
                       
     | 
| 
       39 
     | 
    
         
            -
                         
     | 
| 
      
 33 
     | 
    
         
            +
                    def hash
         
     | 
| 
      
 34 
     | 
    
         
            +
                      {
         
     | 
| 
      
 35 
     | 
    
         
            +
                        'path' => @path
         
     | 
| 
       40 
36 
     | 
    
         
             
                      }
         
     | 
| 
       41 
37 
     | 
    
         
             
                    end
         
     | 
| 
       42 
38 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 39 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       44 
40 
     | 
    
         | 
| 
       45 
41 
     | 
    
         
             
                    private
         
     | 
| 
       46 
42 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 43 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    def specific
         
     | 
| 
      
 46 
     | 
    
         
            +
                      path = if @options.key?('path')
         
     | 
| 
      
 47 
     | 
    
         
            +
                               @options['path']
         
     | 
| 
      
 48 
     | 
    
         
            +
                             else
         
     | 
| 
      
 49 
     | 
    
         
            +
                               File.join(Dir.pwd, 'state', 'terraform', '%<config>s',
         
     | 
| 
      
 50 
     | 
    
         
            +
                                         "%<component>s#{@@ext}")
         
     | 
| 
      
 51 
     | 
    
         
            +
                             end
         
     | 
| 
       48 
52 
     | 
    
         | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                       
     | 
| 
      
 53 
     | 
    
         
            +
                      logger.fatal('Local backend path must be a string!') unless path.is_a?(String)
         
     | 
| 
      
 54 
     | 
    
         
            +
                      logger.fatal('Local backend path must not be blank!') if path.strip.empty?
         
     | 
| 
       51 
55 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                       
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
                      @variables.core.keys.map { |sym| sym.to_s }.each do |core|
         
     | 
| 
      
 57 
     | 
    
         
            +
                        next if (core == 'service') && path.include?(Dir.pwd)
         
     | 
| 
       54 
58 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                         
     | 
| 
      
 59 
     | 
    
         
            +
                        unless path.include?("%<#{core}>s") || path.include?("%{#{core}}")
         
     | 
| 
      
 60 
     | 
    
         
            +
                          logger.fatal("Local backend path must include %<#{core}>s.")
         
     | 
| 
      
 61 
     | 
    
         
            +
                        end
         
     | 
| 
       58 
62 
     | 
    
         
             
                      end
         
     | 
| 
       59 
63 
     | 
    
         | 
| 
       60 
64 
     | 
    
         
             
                      begin
         
     | 
| 
       61 
65 
     | 
    
         
             
                        path = path % @variables.identifiers
         
     | 
| 
       62 
     | 
    
         
            -
                      rescue
         
     | 
| 
       63 
     | 
    
         
            -
                        logger.fatal( 
     | 
| 
      
 66 
     | 
    
         
            +
                      rescue StandardError
         
     | 
| 
      
 67 
     | 
    
         
            +
                        logger.fatal('Local backend options contain identifiers that are not included in the configuration file!')
         
     | 
| 
       64 
68 
     | 
    
         
             
                      end
         
     | 
| 
       65 
69 
     | 
    
         | 
| 
       66 
70 
     | 
    
         
             
                      directory = File.dirname(path)
         
     | 
| 
       67 
71 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
                      logger.fatal("Failed to create state directory: #{directory}") unless ::TerraformWrapper.create_directory( 
     | 
| 
      
 72 
     | 
    
         
            +
                      logger.fatal("Failed to create state directory: #{directory}") unless ::TerraformWrapper.create_directory(
         
     | 
| 
      
 73 
     | 
    
         
            +
                        directory: directory, purpose: 'state'
         
     | 
| 
      
 74 
     | 
    
         
            +
                      )
         
     | 
| 
       69 
75 
     | 
    
         | 
| 
       70 
76 
     | 
    
         
             
                      @path = path
         
     | 
| 
       71 
77 
     | 
    
         
             
                    end
         
     | 
| 
       72 
78 
     | 
    
         | 
| 
       73 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
      
 79 
     | 
    
         
            +
                    ###############################################################################
         
     | 
| 
       75 
80 
     | 
    
         
             
                  end
         
     | 
| 
       76 
81 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
                  ###############################################################################
         
     | 
| 
       79 
83 
     | 
    
         
             
                end
         
     | 
| 
       80 
84 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
      
 85 
     | 
    
         
            +
                ###############################################################################
         
     | 
| 
       83 
86 
     | 
    
         
             
              end
         
     | 
| 
       84 
87 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
      
 88 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       87 
89 
     | 
    
         
             
            end
         
     | 
| 
       88 
90 
     | 
    
         | 
| 
       89 
91 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
         @@ -1,13 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            module TerraformWrapper
         
     | 
| 
      
 4 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              VERSION = "1.3.0"
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 6 
     | 
    
         
            +
              VERSION = '1.3.2'
         
     | 
| 
       10 
7 
     | 
    
         | 
| 
      
 8 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       11 
9 
     | 
    
         
             
            end
         
     | 
| 
       12 
10 
     | 
    
         | 
| 
       13 
11 
     | 
    
         
             
            ###############################################################################
         
     | 
    
        data/lib/terraform-wrapper.rb
    CHANGED
    
    | 
         @@ -11,46 +11,52 @@ require_relative 'terraform-wrapper/common' 
     | 
|
| 
       11 
11 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
13 
     | 
    
         
             
            module TerraformWrapper
         
     | 
| 
      
 14 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              @logger = TerraformWrapper::Shared::Logging.logger_for("TerraformWrapper")
         
     | 
| 
      
 16 
     | 
    
         
            +
              @logger = TerraformWrapper::Shared::Logging.logger_for('TerraformWrapper')
         
     | 
| 
       18 
17 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 18 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       20 
19 
     | 
    
         | 
| 
       21 
20 
     | 
    
         
             
              @logger.info("Terraform Wrapper for Ruby - version: #{TerraformWrapper::VERSION}")
         
     | 
| 
       22 
21 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
      
 22 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       24 
23 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
              def self.deployment_tasks(component:, options:  
     | 
| 
      
 24 
     | 
    
         
            +
              def self.deployment_tasks(component:, service:, options: {})
         
     | 
| 
       26 
25 
     | 
    
         
             
                @logger.info("Building tasks for service: #{service}, component: #{component}...")
         
     | 
| 
       27 
26 
     | 
    
         | 
| 
       28 
     | 
    
         
            -
                @logger.fatal( 
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                binary_options =  
     | 
| 
       31 
     | 
    
         
            -
                binary_options[ 
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                code_options 
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                 
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                config_options 
     | 
| 
       41 
     | 
    
         
            -
                config_options[ 
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                config_options[ 
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                 
     | 
| 
      
 27 
     | 
    
         
            +
                @logger.fatal('Options must be specified as a hash!') unless options.is_a?(Hash)
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                binary_options = {}
         
     | 
| 
      
 30 
     | 
    
         
            +
                binary_options['base'] =
         
     | 
| 
      
 31 
     | 
    
         
            +
                  options.key?('binary-base') ? options['binary-base'] : File.join(Dir.pwd, 'vendor', 'terraform')
         
     | 
| 
      
 32 
     | 
    
         
            +
                binary_options['version'] =
         
     | 
| 
      
 33 
     | 
    
         
            +
                  options.key?('binary-version') ? options['binary-version'] : Shared::Latest.instance.version
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                code_options = {}
         
     | 
| 
      
 36 
     | 
    
         
            +
                code_options['base'] = options.key?('code-base') ? options['code-base'] : File.join(Dir.pwd, 'terraform')
         
     | 
| 
      
 37 
     | 
    
         
            +
                code_options['name'] = component
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                config_options = {}
         
     | 
| 
      
 40 
     | 
    
         
            +
                config_options['auth-azure'] =
         
     | 
| 
      
 41 
     | 
    
         
            +
                  options.key?('config-auth-azure') ? options['config-auth-azure'] : false
         
     | 
| 
      
 42 
     | 
    
         
            +
                config_options['auth-azure-options'] =
         
     | 
| 
      
 43 
     | 
    
         
            +
                  options.key?('config-auth-azure-options') ? options['config-auth-azure-options'] : {}
         
     | 
| 
      
 44 
     | 
    
         
            +
                config_options['base'] =
         
     | 
| 
      
 45 
     | 
    
         
            +
                  options.key?('config-base') ? options['config-base'] : File.join(Dir.pwd, 'config')
         
     | 
| 
      
 46 
     | 
    
         
            +
                config_options['backend'] =
         
     | 
| 
      
 47 
     | 
    
         
            +
                  options.key?('config-backend') ? options['config-backend'] : 'local'
         
     | 
| 
      
 48 
     | 
    
         
            +
                config_options['backend-options'] =
         
     | 
| 
      
 49 
     | 
    
         
            +
                  options.key?('config-backend-options') ? options['config-backend-options'] : {}
         
     | 
| 
      
 50 
     | 
    
         
            +
                config_options['service'] = service
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                provider_options = {}
         
     | 
| 
      
 53 
     | 
    
         
            +
                provider_options['platforms'] = options.key?('provider-platforms') ? options['provider-platforms'] : []
         
     | 
| 
       48 
54 
     | 
    
         | 
| 
       49 
55 
     | 
    
         
             
                provider = TerraformWrapper::Shared::Provider.new(options: provider_options)
         
     | 
| 
       50 
56 
     | 
    
         
             
                binary   = TerraformWrapper::Shared::Binary.new(options: binary_options, provider: provider)
         
     | 
| 
       51 
57 
     | 
    
         
             
                code     = TerraformWrapper::Shared::Code.new(options: code_options)
         
     | 
| 
       52 
58 
     | 
    
         | 
| 
       53 
     | 
    
         
            -
                tasks =  
     | 
| 
      
 59 
     | 
    
         
            +
                tasks = []
         
     | 
| 
       54 
60 
     | 
    
         
             
                tasks << TerraformWrapper::Tasks::Apply.new(binary: binary, code: code, options: config_options)
         
     | 
| 
       55 
61 
     | 
    
         
             
                tasks << TerraformWrapper::Tasks::Binary.new(binary: binary)
         
     | 
| 
       56 
62 
     | 
    
         
             
                tasks << TerraformWrapper::Tasks::Clean.new(code: code)
         
     | 
| 
         @@ -62,11 +68,10 @@ module TerraformWrapper 
     | 
|
| 
       62 
68 
     | 
    
         
             
                tasks << TerraformWrapper::Tasks::Taint.new(binary: binary, code: code, options: config_options)
         
     | 
| 
       63 
69 
     | 
    
         
             
                tasks << TerraformWrapper::Tasks::Upgrade.new(binary: binary, code: code)
         
     | 
| 
       64 
70 
     | 
    
         
             
                tasks << TerraformWrapper::Tasks::Validate.new(binary: binary, code: code)
         
     | 
| 
       65 
     | 
    
         
            -
                 
     | 
| 
      
 71 
     | 
    
         
            +
                tasks
         
     | 
| 
       66 
72 
     | 
    
         
             
              end
         
     | 
| 
       67 
73 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
            ###############################################################################
         
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
      
 74 
     | 
    
         
            +
              ###############################################################################
         
     | 
| 
       70 
75 
     | 
    
         
             
            end
         
     | 
| 
       71 
76 
     | 
    
         | 
| 
       72 
77 
     | 
    
         
             
            ###############################################################################
         
     | 
    
        data/terraform-wrapper.gemspec
    CHANGED
    
    | 
         @@ -4,33 +4,35 @@ 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            require_relative  
     | 
| 
      
 7 
     | 
    
         
            +
            require_relative 'lib/terraform-wrapper/version'
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
            ###############################################################################
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            Gem::Specification.new do |spec|
         
     | 
| 
       12 
     | 
    
         
            -
              spec.name        =  
     | 
| 
      
 12 
     | 
    
         
            +
              spec.name        = 'terraform-wrapper'
         
     | 
| 
       13 
13 
     | 
    
         
             
              spec.version     = TerraformWrapper::VERSION
         
     | 
| 
       14 
     | 
    
         
            -
              spec.authors     = [ 
     | 
| 
       15 
     | 
    
         
            -
              spec.email       = [ 
     | 
| 
      
 14 
     | 
    
         
            +
              spec.authors     = ['Richard Lees']
         
     | 
| 
      
 15 
     | 
    
         
            +
              spec.email       = ['git0@bitservices.io']
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
     | 
    
         
            -
              spec.summary     =  
     | 
| 
       18 
     | 
    
         
            -
              spec.description =  
     | 
| 
       19 
     | 
    
         
            -
              spec.homepage    =  
     | 
| 
       20 
     | 
    
         
            -
              spec.license     =  
     | 
| 
      
 17 
     | 
    
         
            +
              spec.summary     = 'A ruby wrapper for managing Terraform binaries and remote state.'
         
     | 
| 
      
 18 
     | 
    
         
            +
              spec.description = 'A ruby wrapper for managing Terraform binaries and remote state. Each Terraform command (plan, apply, etc) is wrapped so that the correct binary is used and remote state referenced.'
         
     | 
| 
      
 19 
     | 
    
         
            +
              spec.homepage    = 'https://gitlab.com/bitservices/ruby/terraform-wrapper/'
         
     | 
| 
      
 20 
     | 
    
         
            +
              spec.license     = 'MIT'
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
              spec.required_ruby_version = Gem::Requirement.new( 
     | 
| 
      
 22 
     | 
    
         
            +
              spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
              spec.metadata[ 
     | 
| 
       25 
     | 
    
         
            -
              spec.metadata[ 
     | 
| 
      
 24 
     | 
    
         
            +
              spec.metadata['homepage_uri']    = spec.homepage
         
     | 
| 
      
 25 
     | 
    
         
            +
              spec.metadata['source_code_uri'] = spec.homepage
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
27 
     | 
    
         
             
              spec.files = Dir.chdir(File.expand_path(__dir__)) do
         
     | 
| 
       28 
     | 
    
         
            -
                `git ls-files -z`.split("\x0").reject  
     | 
| 
      
 28 
     | 
    
         
            +
                `git ls-files -z`.split("\x0").reject do |f|
         
     | 
| 
      
 29 
     | 
    
         
            +
                  f.match(%r{\A(?:archlinux|test|spec|features)/}) or f.match(/\Aavatar(?:_group)?\.png\z/)
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
       29 
31 
     | 
    
         
             
              end
         
     | 
| 
       30 
32 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
              spec.bindir        =  
     | 
| 
      
 33 
     | 
    
         
            +
              spec.bindir        = 'exe'
         
     | 
| 
       32 
34 
     | 
    
         
             
              spec.executables   = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
         
     | 
| 
       33 
     | 
    
         
            -
              spec.require_paths = [ 
     | 
| 
      
 35 
     | 
    
         
            +
              spec.require_paths = ['lib']
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
              spec.add_dependency 'rake', '~> 13.0'
         
     | 
| 
       36 
38 
     | 
    
         
             
              spec.add_dependency 'rubyzip', '~> 2.3'
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: terraform-wrapper
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 1.3. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.3.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Richard Lees
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2022- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2022-12-08 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: rake
         
     | 
| 
         @@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       126 
126 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       127 
127 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       128 
128 
     | 
    
         
             
            requirements: []
         
     | 
| 
       129 
     | 
    
         
            -
            rubygems_version: 3.3. 
     | 
| 
      
 129 
     | 
    
         
            +
            rubygems_version: 3.3.26
         
     | 
| 
       130 
130 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       131 
131 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       132 
132 
     | 
    
         
             
            summary: A ruby wrapper for managing Terraform binaries and remote state.
         
     |