Module: Lono::Template::Helper
- Included in:
- Context, Dsl::Builder, Dsl::Builder::Base
- Defined in:
- lib/lono/template/helper.rb
Overview
This is included into Lono::Template::Context. It has access to the original thor CLI options via @options.
Instance Method Summary collapse
- #current_region ⇒ Object
-
#extract_scripts(options = {}) ⇒ Object
Bash code that is meant to included in user-data.
-
#indent(text, indentation_amount) ⇒ Object
add indentation.
-
#partial(path, vars = {}, options = {}) ⇒ Object
The partial’s path is a relative path.
- #partial_exist?(path) ⇒ Boolean
- #scripts_name ⇒ Object
- #scripts_s3_path ⇒ Object
- #template_params(param_name) ⇒ Object
- #template_s3_path(template_name) ⇒ Object
-
#user_data(path, vars = {}, options = {}) ⇒ Object
Adjust the partial path so that it will use app/user_data.
Instance Method Details
#current_region ⇒ Object
111 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 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/lono/template/helper.rb', line 111 def current_region region = Aws.config[:region] region ||= ENV['AWS_REGION'] return region if region default_region = 'us-east-1' # fallback if default not found in ~/.aws/config if ENV['AWS_PROFILE'] path = "#{ENV['HOME']}/.aws/config" if File.exist?(path) lines = IO.readlines(path) capture_default, capture_current = false, false lines.each do | line| if line.include?('[default]') capture_default = true # next line next end if capture_default && line.match(/region = /) # over default from above default_region = line.split(' = ').last.strip capture_default = false end md = line.match(/\[profile (.*)\]/) if md && md[1] == ENV['AWS_PROFILE'] capture_current = true next end if capture_current && line.match(/region = /) region = line.split(' = ').last.strip capture_current = false end end end region ||= default_region return region if region end 'us-east-1' # default end |
#extract_scripts(options = {}) ⇒ Object
Bash code that is meant to included in user-data
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 |
# File 'lib/lono/template/helper.rb', line 11 def extract_scripts(={}) settings = setting.data["extract_scripts"] || {} = settings.merge() # defaults also here in case they are removed from settings to = [:to] || "/opt" user = [:as] || "ec2-user" if Dir.glob("#{Lono.config.scripts_path}/*").empty? puts "WARN: you are using the extract_scripts helper method but you do not have any app/scripts.".color(:yellow) calling_line = caller[0].split(':')[0..1].join(':') puts "Called from: #{calling_line}" return "" end <<-BASH_CODE # Generated from the lono extract_scripts helper. # Downloads scripts from s3, extract them, and setup. mkdir -p #{to} aws s3 cp #{scripts_s3_path} #{to}/ ( cd #{to} tar zxf #{to}/#{scripts_name} chmod -R a+x #{to}/scripts chown -R #{user}:#{user} #{to}/scripts ) BASH_CODE end |
#indent(text, indentation_amount) ⇒ Object
add indentation
99 100 101 102 103 |
# File 'lib/lono/template/helper.rb', line 99 def indent(text, indentation_amount) text.split("\n").map do |line| " " * indentation_amount + line end.join("\n") end |
#partial(path, vars = {}, options = {}) ⇒ Object
The partial’s path is a relative path.
Example: Given file in app/partials/iam/docker.yml
<%= partial("iam/docker", {}, indent: 10) %>
<%= partial("iam/docker.yml", {}, indent: 10) %>
If the user specifies the extension then use that instead of auto-adding the detected format.
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/lono/template/helper.rb', line 85 def partial(path,vars={}, ={}) path = [:user_data] ? user_data_path_for(path) : partial_path_for(path) path = auto_add_format(path) instance_variables!(vars) result = render_path(path) result = indent(result, [:indent]) if [:indent] result + "\n" end |
#partial_exist?(path) ⇒ Boolean
105 106 107 108 109 |
# File 'lib/lono/template/helper.rb', line 105 def partial_exist?(path) path = partial_path_for(path) path = auto_add_format(path) path && File.exist?(path) end |
#scripts_name ⇒ Object
39 40 41 |
# File 'lib/lono/template/helper.rb', line 39 def scripts_name File.basename(scripts_s3_path) end |
#scripts_s3_path ⇒ Object
43 44 45 46 |
# File 'lib/lono/template/helper.rb', line 43 def scripts_s3_path upload = Lono::Script::Upload.new(@blueprint) upload.s3_dest end |
#template_params(param_name) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/lono/template/helper.rb', line 55 def template_params(param_name) = { allow_not_exists: true }.merge(@options) ["param"] = param_name generator = Lono::Param::Generator.new(@blueprint, ) # do not generate because lono cfn calling logic already generated it we only need the values params = generator.params # Returns Array in underscore keys format # convert Array to simplified hash structure params.inject({}) do |h, param| h.merge(param[:parameter_key] => param[:parameter_value]) end end |
#template_s3_path(template_name) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/lono/template/helper.rb', line 48 def template_s3_path(template_name) # high jacking Upload for useful s3_https_url method template_path = "output/#{@blueprint}/templates/#{template_name}.yml" upload = Lono::Template::Upload.new(@blueprint, @options) upload.s3_https_url(template_path) end |
#user_data(path, vars = {}, options = {}) ⇒ Object
Adjust the partial path so that it will use app/user_data
70 71 72 73 |
# File 'lib/lono/template/helper.rb', line 70 def user_data(path,vars={}, ={}) .merge!(user_data: true) partial(path,vars, ) end |