Class: Putpaws::Provision::ProvisionConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/putpaws/provision/provision_config.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data, path_prefix: '.putpaws') ⇒ ProvisionConfig

Returns a new instance of ProvisionConfig.



28
29
30
31
# File 'lib/putpaws/provision/provision_config.rb', line 28

def initialize(data, path_prefix: '.putpaws')
  @data = data
  @path_prefix = path_prefix
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



27
28
29
# File 'lib/putpaws/provision/provision_config.rb', line 27

def data
  @data
end

#path_prefixObject (readonly)

Returns the value of attribute path_prefix.



27
28
29
# File 'lib/putpaws/provision/provision_config.rb', line 27

def path_prefix
  @path_prefix
end

Class Method Details

.dir_for(service_name, path_prefix: '.putpaws') ⇒ Object



9
10
11
# File 'lib/putpaws/provision/provision_config.rb', line 9

def self.dir_for(service_name, path_prefix: '.putpaws')
  Pathname.new(path_prefix).join('provisioning', service_name)
end

.load(service_name, path_prefix: '.putpaws') ⇒ Object



20
21
22
23
24
25
# File 'lib/putpaws/provision/provision_config.rb', line 20

def self.load(service_name, path_prefix: '.putpaws')
  path = dir_for(service_name, path_prefix: path_prefix).join('provision.json')
  raise "provision.json not found for #{service_name}. Please run `putpaws ready` first." unless path.exist?
  data = JSON.parse(File.read(path), symbolize_names: true)
  new(data, path_prefix: path_prefix)
end

.services(path_prefix: '.putpaws') ⇒ Object



13
14
15
16
17
18
# File 'lib/putpaws/provision/provision_config.rb', line 13

def self.services(path_prefix: '.putpaws')
  Dir.glob(Pathname.new(path_prefix).join('provisioning', '*', 'provision.json').to_s)
    .map{|p| File.basename(File.dirname(p))}
    .reject{|name| name == 'presets'}
    .sort
end

Instance Method Details

#account_idObject



95
96
97
# File 'lib/putpaws/provision/provision_config.rb', line 95

def 
  Util.(base[:ecr_repository_arn])
end

#baseObject



49
50
51
# File 'lib/putpaws/provision/provision_config.rb', line 49

def base
  data[:base] || {}
end

#build_log_groupObject



134
135
136
# File 'lib/putpaws/provision/provision_config.rb', line 134

def build_log_group
  "/aws/codebuild/#{service_name}"
end

#build_project_nameObject



138
139
140
# File 'lib/putpaws/provision/provision_config.rb', line 138

def build_project_name
  service_name
end

#cluster_nameObject



126
127
128
# File 'lib/putpaws/provision/provision_config.rb', line 126

def cluster_name
  Util.blank?(overrides[:cluster_name]) ? service_name : overrides[:cluster_name]
end

#devopsObject



61
62
63
# File 'lib/putpaws/provision/provision_config.rb', line 61

def devops
  data[:devops] || {}
end

#devops_settingsObject



91
92
93
# File 'lib/putpaws/provision/provision_config.rb', line 91

def devops_settings
  preset.devops_defaults.merge(devops.reject{|_, v| v.nil?})
end

#dirObject



65
66
67
# File 'lib/putpaws/provision/provision_config.rb', line 65

def dir
  self.class.dir_for(service_name, path_prefix: path_prefix)
end

#ecr_image_uri(tag: nil) ⇒ Object



99
100
101
# File 'lib/putpaws/provision/provision_config.rb', line 99

def ecr_image_uri(tag: nil)
  "#{Util.ecr_repository_uri(base[:ecr_repository_arn])}:#{tag || settings[:image_tag] || 'latest'}"
end

#log_groupObject



130
131
132
# File 'lib/putpaws/provision/provision_config.rb', line 130

def log_group
  "/ecs/#{service_name}"
end

#overridesObject



57
58
59
# File 'lib/putpaws/provision/provision_config.rb', line 57

def overrides
  data[:overrides] || {}
end

#policies_dirObject



69
70
71
# File 'lib/putpaws/provision/provision_config.rb', line 69

def policies_dir
  dir.join('policies')
end

#presetObject



41
42
43
44
45
46
47
# File 'lib/putpaws/provision/provision_config.rb', line 41

def preset
  @preset ||= begin
    p = Preset.find(data[:preset], path_prefix: path_prefix)
    raise "Preset not found: #{data[:preset]}" unless p
    p
  end
end

#regionObject



37
38
39
# File 'lib/putpaws/provision/provision_config.rb', line 37

def region
  data[:region]
end

#resolved_secretsObject

#ssm_parameter_prefix placeholders resolved, values as full parameter paths.



108
109
110
111
112
# File 'lib/putpaws/provision/provision_config.rb', line 108

def resolved_secrets
  (settings[:secrets] || {}).map{|name, path|
    [name.to_s, path.to_s.gsub('{ssm_parameter_prefix}', ssm_parameter_prefix.to_s)]
  }.to_h
end

#rolesObject



53
54
55
# File 'lib/putpaws/provision/provision_config.rb', line 53

def roles
  data[:roles] || {}
end

#secret_parameter_arnsObject



114
115
116
117
118
# File 'lib/putpaws/provision/provision_config.rb', line 114

def secret_parameter_arns
  resolved_secrets.values.map{|path|
    "arn:aws:ssm:#{region}:#{account_id}:parameter#{path}"
  }
end

#service_container_nameObject



150
151
152
153
# File 'lib/putpaws/provision/provision_config.rb', line 150

def service_container_name
  entry = preset.task_definitions.detect{|t| t[:suffix] == preset.service_task_definition}
  (entry && entry[:container_name]) || 'app'
end

#service_nameObject



33
34
35
# File 'lib/putpaws/provision/provision_config.rb', line 33

def service_name
  data[:service_name]
end

#service_task_definition_familyObject



146
147
148
# File 'lib/putpaws/provision/provision_config.rb', line 146

def service_task_definition_family
  task_definition_family(preset.service_task_definition)
end

#settingsObject

preset defaults <- provision.json overrides (nil values ignored). env/secrets hashes are merged by key.



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/putpaws/provision/provision_config.rb', line 75

def settings
  @settings ||= begin
    merged = preset.defaults.dup
    overrides.each do |k, v|
      next if v.nil?
      next if k == :cluster_name
      if v.is_a?(Hash) && merged[k].is_a?(Hash)
        merged[k] = merged[k].merge(v)
      else
        merged[k] = v
      end
    end
    merged
  end
end

#sg_nameObject

naming conventions (service_name prefix) =====


122
123
124
# File 'lib/putpaws/provision/provision_config.rb', line 122

def sg_name
  service_name
end

#ssm_parameter_prefixObject



103
104
105
# File 'lib/putpaws/provision/provision_config.rb', line 103

def ssm_parameter_prefix
  base[:ssm_parameter_prefix]
end

#task_definition_family(suffix) ⇒ Object



142
143
144
# File 'lib/putpaws/provision/provision_config.rb', line 142

def task_definition_family(suffix)
  "#{service_name}-#{suffix}"
end