Class: Biosphere::Deployment
- Inherits:
-
Object
- Object
- Biosphere::Deployment
- Defined in:
- lib/biosphere/deployment.rb
Instance Attribute Summary collapse
-
#_settings ⇒ Object
readonly
Returns the value of attribute _settings.
-
#export ⇒ Object
readonly
Returns the value of attribute export.
-
#feature_manifests ⇒ Object
readonly
Returns the value of attribute feature_manifests.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#node ⇒ Object
Returns the value of attribute node.
-
#resources ⇒ Object
readonly
Returns the value of attribute resources.
-
#state ⇒ Object
Returns the value of attribute state.
-
#target_groups ⇒ Object
readonly
Returns the value of attribute target_groups.
Instance Method Summary collapse
- #add_resource_to_target_group(resource_type, resource_name, target_group) ⇒ Object
- #delayed(&block) ⇒ Object
- #evaluate_outputs(outputs) ⇒ Object
- #evaluate_resources ⇒ Object
- #id_of(type, name) ⇒ Object
-
#initialize(*args) ⇒ Deployment
constructor
A new instance of Deployment.
- #load_outputs(tfstate_filename) ⇒ Object
- #output(name, value, &block) ⇒ Object
- #output_of(type, name, *values) ⇒ Object
- #provider(name, spec = {}) ⇒ Object
- #register(deployment) ⇒ Object
- #resource(type, name, target_group = nil, &block) ⇒ Object
- #setup(settings) ⇒ Object
- #to_json(pretty = false) ⇒ Object
- #variable(name, value) ⇒ Object
Constructor Details
#initialize(*args) ⇒ Deployment
Returns a new instance of Deployment.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/biosphere/deployment.rb', line 10 def initialize(*args) @parent = nil @name = "" if args[0].kind_of?(::Biosphere::Deployment) || args[0].kind_of?(::Biosphere::Suite) @parent = args.shift end if args[0].kind_of?(String) @name = args.shift end settings = {} @_settings = {} if args[0].kind_of?(Hash) settings = args.shift @_settings = settings elsif args[0].kind_of?(::Biosphere::Settings) @_settings = args.shift settings = @_settings.settings @feature_manifests = @_settings.feature_manifests end @export = { "provider" => {}, "resource" => {}, "variable" => {}, "output" => {} } settings[:deployment_name] = @name if @parent.is_a?(::Biosphere::Suite) @parent.register(self) elsif @parent @node = @parent.node @state = @parent.state @export = @parent.export @parent.register(self) else @node = Node.new end @delayed = [] @resources = [] @actions = {} @deployments = [] @outputs = [] @target_groups = {} if @feature_manifests node[:feature_manifests] = @feature_manifests end self.setup(settings) end |
Instance Attribute Details
#_settings ⇒ Object (readonly)
Returns the value of attribute _settings.
8 9 10 |
# File 'lib/biosphere/deployment.rb', line 8 def _settings @_settings end |
#export ⇒ Object (readonly)
Returns the value of attribute export.
8 9 10 |
# File 'lib/biosphere/deployment.rb', line 8 def export @export end |
#feature_manifests ⇒ Object (readonly)
Returns the value of attribute feature_manifests.
8 9 10 |
# File 'lib/biosphere/deployment.rb', line 8 def feature_manifests @feature_manifests end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
8 9 10 |
# File 'lib/biosphere/deployment.rb', line 8 def name @name end |
#node ⇒ Object
Returns the value of attribute node.
9 10 11 |
# File 'lib/biosphere/deployment.rb', line 9 def node @node end |
#resources ⇒ Object (readonly)
Returns the value of attribute resources.
8 9 10 |
# File 'lib/biosphere/deployment.rb', line 8 def resources @resources end |
#state ⇒ Object
Returns the value of attribute state.
9 10 11 |
# File 'lib/biosphere/deployment.rb', line 9 def state @state end |
#target_groups ⇒ Object (readonly)
Returns the value of attribute target_groups.
8 9 10 |
# File 'lib/biosphere/deployment.rb', line 8 def target_groups @target_groups end |
Instance Method Details
#add_resource_to_target_group(resource_type, resource_name, target_group) ⇒ Object
69 70 71 72 |
# File 'lib/biosphere/deployment.rb', line 69 def add_resource_to_target_group(resource_type, resource_name, target_group) name = resource_type + "." + resource_name (@target_groups[target_group] ||= []) << name end |
#delayed(&block) ⇒ Object
105 106 107 108 109 110 |
# File 'lib/biosphere/deployment.rb', line 105 def delayed(&block) delayed_call = { :block => block } @delayed << delayed_call end |
#evaluate_outputs(outputs) ⇒ Object
164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/biosphere/deployment.rb', line 164 def evaluate_outputs(outputs) # Call first sub-deployments @deployments.each do |deployment| deployment.evaluate_outputs(outputs) end @outputs.each do |output| value = outputs[output[:resource_name]] instance_exec(self.name, output[:name], value["value"], value, &output[:block]) end end |
#evaluate_resources ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/biosphere/deployment.rb', line 191 def evaluate_resources() # Call first sub-deployments @deployments.each do |deployment| deployment.evaluate_resources() end # Then all delayed calls @delayed.each do |delayed_call| proxy = ResourceProxy.new(self) proxy.instance_eval(&delayed_call[:block]) end # And finish with our own resources @resources.each do |resource| proxy = ResourceProxy.new(self) if resource[:block] proxy.instance_eval(&resource[:block]) end @export["resource"][resource[:type].to_s][resource[:name].to_s] = proxy.output end end |
#id_of(type, name) ⇒ Object
215 216 217 |
# File 'lib/biosphere/deployment.rb', line 215 def id_of(type,name) "${#{type}.#{name}.id}" end |
#load_outputs(tfstate_filename) ⇒ Object
177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/biosphere/deployment.rb', line 177 def load_outputs(tfstate_filename) begin tf_state = JSON.parse(File.read(tfstate_filename)) rescue SystemCallError puts "Couldn't read Terraform statefile, can't continue" exit end outputs = tf_state["modules"].first["outputs"] evaluate_outputs(outputs) end |
#output(name, value, &block) ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/biosphere/deployment.rb', line 142 def output(name, value, &block) if self.name resource_name = self.name + "_" + name else resource_name = name end @export["output"][resource_name] = { "value" => value } if block_given? output = { :name => name, :resource_name => resource_name, :block => block } @outputs << output end end |
#output_of(type, name, *values) ⇒ Object
219 220 221 222 223 224 |
# File 'lib/biosphere/deployment.rb', line 219 def output_of(type, name, *values) if self.name name = self.name + "_" + name end "${#{type}.#{name}.#{values.join(".")}}" end |
#provider(name, spec = {}) ⇒ Object
101 102 103 |
# File 'lib/biosphere/deployment.rb', line 101 def provider(name, spec={}) @export["provider"][name.to_s] = spec end |
#register(deployment) ⇒ Object
91 92 93 |
# File 'lib/biosphere/deployment.rb', line 91 def register(deployment) @deployments << deployment end |
#resource(type, name, target_group = nil, &block) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/biosphere/deployment.rb', line 112 def resource(type, name, target_group = nil, &block) if self.name name = self.name + "_" + name end @export["resource"][type.to_s] ||= {} if @export["resource"][type.to_s][name.to_s] throw "Tried to create a resource of type #{type} called '#{name}' when one already exists" end spec = {} resource = { :name => name, :type => type, :location => caller[0] + "a" } if target_group add_resource_to_target_group(type, name, target_group) end if block_given? resource[:block] = block else #STDERR.puts("WARNING: No block set for resource call '#{type}', '#{name}' at #{caller[0]}") end @resources << resource end |
#setup(settings) ⇒ Object
74 75 |
# File 'lib/biosphere/deployment.rb', line 74 def setup(settings) end |
#to_json(pretty = false) ⇒ Object
226 227 228 229 230 231 232 |
# File 'lib/biosphere/deployment.rb', line 226 def to_json(pretty=false) if pretty return JSON.pretty_generate(@export) else return JSON.generate(@export) end end |
#variable(name, value) ⇒ Object
95 96 97 98 99 |
# File 'lib/biosphere/deployment.rb', line 95 def variable(name, value) @export["variable"][name] = { "default" => value } end |