Module: Lono::Template::Helper
- Included in:
- Context
- 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
- #check_s3_folder_settings! ⇒ Object
- #current_region ⇒ Object
-
#extract_scripts(options = {}) ⇒ Object
Bash code that is meant to included in user-data.
- #file_s3_key(name) ⇒ Object
-
#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
#check_s3_folder_settings! ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/lono/template/helper.rb', line 41 def check_s3_folder_settings! return if setting.s3_folder puts "Helper method called that requires the s3_folder to be set at:" lines = caller.reject { |l| l =~ %r{lib/lono} } # hide internal lono trace puts " #{lines[0]}" puts "Please configure your settings.yml with an s3_folder.".colorize(:red) puts "Detected AWS_PROFILE #{ENV['AWS_PROFILE'].inspect}" exit 1 end |
#current_region ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/lono/template/helper.rb', line 133 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 38 39 |
# File 'lib/lono/template/helper.rb', line 11 def extract_scripts(={}) check_s3_folder_settings! 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.".colorize(: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 |
#file_s3_key(name) ⇒ Object
125 126 127 128 129 130 131 |
# File 'lib/lono/template/helper.rb', line 125 def file_s3_key(name) s3_folder = setting.s3_folder return nil unless s3_folder uploader = Lono::FileUploader.new uploader.md5_key("#{Lono.root}/app/files/#{name}") end |
#indent(text, indentation_amount) ⇒ Object
add indentation
113 114 115 116 117 |
# File 'lib/lono/template/helper.rb', line 113 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.
99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/lono/template/helper.rb', line 99 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
119 120 121 122 123 |
# File 'lib/lono/template/helper.rb', line 119 def partial_exist?(path) path = partial_path_for(path) path = auto_add_format(path) path && File.exist?(path) end |
#scripts_name ⇒ Object
53 54 55 |
# File 'lib/lono/template/helper.rb', line 53 def scripts_name File.basename(scripts_s3_path) end |
#scripts_s3_path ⇒ Object
57 58 59 60 |
# File 'lib/lono/template/helper.rb', line 57 def scripts_s3_path upload = Lono::Script::Upload.new upload.s3_dest end |
#template_params(param_name) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/lono/template/helper.rb', line 70 def template_params(param_name) = { allow_no_file: true }.merge(@options) generator = Lono::Param::Generator.new(param_name, ) # 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
62 63 64 65 66 67 68 |
# File 'lib/lono/template/helper.rb', line 62 def template_s3_path(template_name) check_s3_folder_settings! # high jacking Upload for useful s3_https_url method template_path = "#{template_name}.yml" upload = Lono::Template::Upload.new(@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
84 85 86 87 |
# File 'lib/lono/template/helper.rb', line 84 def user_data(path,vars={}, ={}) .merge!(user_data: true) partial(path,vars, ) end |