Module: Covalence::S3

Defined in:
lib/covalence/core/state_stores/s3.rb

Defined Under Namespace

Classes: Client

Constant Summary collapse

REGION =

AWS ennvironment variables #####

AWS_ACCESS_KEY_ID – AWS access key. AWS_SECRET_ACCESS_KEY – AWS secret key. Access and secret key variables override

credentials stored in credential and config files.

AWS_REGION – AWS region. This variable overrides the default region of the in-use

profile, if set.
ENV['AWS_REGION']

Class Method Summary collapse

Class Method Details

.get_state_store(params, workspace_enabled = false) ⇒ Object

Return configuration for remote state store.



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/covalence/core/state_stores/s3.rb', line 77

def self.get_state_store(params, workspace_enabled=false)
  raise "State store parameters must be a Hash" unless params.is_a?(Hash)
  required_params = [
    'bucket',
    'name'
  ]
  required_params.each do |param|
    raise "Missing '#{param}' store parameter" unless params.has_key?(param)
  end

  config = <<-CONF
terraform {
  backend "s3" {
CONF

  if !params.has_key?('key')
    Covalence::LOGGER.debug "'key' parameter not specified. Inferring value from 'name' parameter."

    if workspace_enabled
      config += "    key = \"terraform.tfstate\"\n"
    else
      config += "    key = \"#{params['name']}/terraform.tfstate\"\n"
    end
  end

  if !params.has_key?('workspace_key_prefix')
    if workspace_enabled
      Covalence::LOGGER.debug "'workspace_key_prefix' parameter not specified. Inferring value from 'name' parameter."
      config += "    workspace_key_prefix = \"#{params['name']}\"\n"
    end
  end

  params.each do |k,v|
    next if k == 'name'

    v = Covalence::Helpers::ShellInterpolation.parse_shell(v) if v.to_s.include?("$(")
    config += "    #{k} = \"#{v}\"\n"
  end

  config += "  }\n}\n"

  return config
end

.has_state_store?Boolean

end

Returns:

  • (Boolean)


135
136
137
# File 'lib/covalence/core/state_stores/s3.rb', line 135

def self.has_state_store?
  return true
end

.lookup(type, params) ⇒ Object

Key lookups



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/covalence/core/state_stores/s3.rb', line 140

def self.lookup(type, params)
  raise "Lookup parameters must be a Hash" unless params.is_a?(Hash)

  case
  when type == 'key' || type == 'state'
    required_params = [
      'bucket',
      'document',
      'key'
    ]
    required_params.each do |param|
      raise "Missing '#{param}' lookup parameter" unless params.has_key?(param)
    end
    raise "Missing 'key' lookup parameter" unless params.has_key? 'key'
    client = S3::Client.new(region: REGION)
    client.get_key(params['bucket'],params['document'],params['key'])
  end
end