lono 8.0.0.pre.rc4 → 8.0.0.pre.rc6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 963246c282376afe61a61f60ad1ec0ccb17ee194420d972802868f8574fbc97a
4
- data.tar.gz: 3e8b4c478d5ee57744ff05ad45023592dffab08825a5af2e044a8656680b0512
3
+ metadata.gz: 4174a1ff12f805e84ba1b591670dae875d71bf5c64db1eedbe3fb68828d660a9
4
+ data.tar.gz: bf622dc807debfa1c6705585b200bf9db62d70fb0fd6e03b7948bc24ec332b7f
5
5
  SHA512:
6
- metadata.gz: f8ea0aa2e31ea1dad60b69d7993ef1b6eb9781c1ee0d04770ed2a1eb0fec9387703e79b95faf1a04918685d147ff884a7f712420891dbb50f9091bdf3439fa9b
7
- data.tar.gz: f73dd80095b287c9be478a68c4de4181fdd0657153d69dc0c72145497555a7c542096e8bd0fb5b85877589251d878cd2dee7cace277614917dcab383991de30f
6
+ metadata.gz: 94b6af96b63ac0e94a02ba51341a077225a89486f6f3150bfe3739f9bba578df33240b12a051acf47cf43eee7e279bbcdade90f15c84eeab6eaf3eccfb3c3329
7
+ data.tar.gz: 3e6ccd7c6678af23ae7e8f300f01923b49c509c43e0b6384fe17eb7336193a6c2fd50005d04d3167d8791c722f6f97126233ce0f451da2ce4d9a408032dcfdb5
@@ -0,0 +1 @@
1
+ github: boltops-tools
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Change Log
2
2
 
3
+ ## [8.0.0.rc6] - 2024-04-22
4
+
5
+ * allow require files in helpers folder that are not helpers
6
+ * join with single item list that uses get_att
7
+
8
+ ## [8.0.0.rc5] - 2022-04-29
9
+
10
+ * #76 fix plan: upload template to s3
11
+ * #75 user_data helper improvements
12
+ * Improve lono error reported to use with better call line backtrace
13
+ * load helpers before variables so they're available in vars files
14
+ * vpc helper returns object
15
+
3
16
  ## [8.0.0.rc4] - 2022-03-19
4
17
 
5
18
  Notable:
data/README.md CHANGED
@@ -66,9 +66,9 @@ output("Instance")
66
66
  output("SecurityGroup", get_att("SecurityGroup.GroupId"))
67
67
  ```
68
68
 
69
- ### Lono Cfn Deploy
69
+ ### Lono Up
70
70
 
71
- Lono provides a `lono cfn` lifecycle command that allows you to launch stacks quickly. The `lono up` generates and launches the CloudFormation stack. If you are in a lono project and have a `demo` lono blueprint. To create a stack run:
71
+ The `lono up` command deploys the CloudFormation stack.
72
72
 
73
73
  $ lono up demo
74
74
 
@@ -3,8 +3,8 @@ class Lono::Builder
3
3
  include DslEvaluator
4
4
 
5
5
  def load_context
6
+ load_helpers # load helpers before variable so user custom helpers are available in vars files
6
7
  load_variables
7
- load_helpers
8
8
  end
9
9
 
10
10
  # Variables in base.rb are overridden by their environment specific variables
@@ -2,12 +2,25 @@ module Lono::Builder::Dsl::Helpers
2
2
  module Ec2
3
3
  extend Memoist
4
4
 
5
+ # Returns vpc object
6
+ def vpc(name)
7
+ filters = name == "default" ?
8
+ [name: "isDefault", values: ["true"]] :
9
+ [name: "tag:Name", values: [name]]
10
+ resp = ec2.describe_vpcs(filters: filters)
11
+ resp.vpcs.first
12
+ end
13
+ memoize :vpc
14
+
5
15
  def default_vpc
6
- resp = ec2.describe_vpcs(filters: [name: "isDefault", values: ["true"]])
7
- vpc = resp.vpcs.first
16
+ vpc = vpc("default")
8
17
  vpc ? vpc.vpc_id : "no default vpc found"
9
18
  end
10
- memoize :default_vpc
19
+
20
+ def default_vpc_cidr
21
+ vpc = vpc("default")
22
+ vpc.cidr_block
23
+ end
11
24
 
12
25
  def default_subnets
13
26
  return "no default subnets because no default vpc found" if default_vpc == "no default vpc found"
@@ -1,66 +1,48 @@
1
1
  module Lono::Builder::Dsl::Helpers
2
2
  module TemplateFile
3
3
  extend Memoist
4
+ include Lono::Utils::CallLine
4
5
  include Lono::Utils::Pretty
5
6
 
7
+ # Do not memoize :template_file - it'll hide the template_file_missing error
6
8
  def template_file(path)
7
- path = "#{@blueprint.root}/#{path}"
9
+ path = "#{@blueprint.root}/#{path}" unless path.starts_with?('/')
8
10
  if File.exist?(path)
9
- render_file(path)
11
+ RenderMePretty.result(path, context: self)
10
12
  else
11
13
  template_file_missing(path)
12
14
  end
13
15
  end
14
- # do not memoize :template_file - it'll hide the template_file_missing error
16
+ alias_method :render_file, :template_file
17
+ alias_method :render_path, :template_file
18
+ alias_method :user_data, :template_file
19
+ alias_method :content, :template_file
20
+
15
21
 
16
22
  # Caller lines are different for OSes:
17
23
  #
18
24
  # windows: "C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/lono-1.1.1/lib/lono/builder.rb:34:in `build'"
19
25
  # linux: "/home/ec2-user/.rvm/gems/ruby-3.0.3/gems/lono-1.1.1/lib/lono/compiler/dsl/syntax/mod.rb:4:in `<module:Mod>'"
20
26
  #
21
- class TempleFileNotFoundError < StandardError; end
22
27
  def template_file_missing(path)
23
- message = "ERROR: path #{pretty_path(path)} not found"
24
- caller_line = caller.find { |l| l =~ %r{/blueprints/} }
25
- logger.error message.color(:red)
26
- logger.error "Called from:"
27
- logger.error " #{pretty_path(caller_line)}"
28
- # Raise an error so Dsl::Evaluator#template_evaluation_error provides user friendly info
29
- raise TempleFileNotFoundError.new
30
- end
31
-
32
- def render_file(path)
33
- if File.exist?(path)
34
- RenderMePretty.result(path, context: self)
35
- else
36
- lines = caller.select { |l| l.include?(Lono.root.to_s) }
37
- caller_line = pretty_path(lines.first)
38
- message =<<~EOL
39
- WARN: #{pretty_path(path)} does not exist
40
- Called from: #{caller_line}
41
- EOL
42
- logger.info message.color(:yellow)
43
- message
44
- end
28
+ logger.warn "WARN: File path not found: #{pretty_path(path)}".color(:yellow)
29
+ call_line = lono_call_line
30
+ DslEvaluator.print_code(call_line) # returns true right now
31
+ ""
45
32
  end
46
- alias_method :render_path, :render_file
47
33
 
48
34
  def user_data_script
49
- unless @user_data_script
50
- script_example = pretty_path("#{@blueprint.root}/template/user_data.sh")
35
+ path = @user_data_script || @user_data_script_path
36
+ unless path
37
+ # script_example = pretty_path("#{@blueprint.root}/template/bootstrap.sh")
38
+ script_example = "bootstrap.sh"
51
39
  return <<~EOL
52
- # @user_data_script variable not set. IE: @user_data_script = "#{script_example}"
40
+ # @user_data_script_path variable not set. IE: @user_data_script_path = "#{script_example}"
53
41
  # Also, make sure that "#{script_example}" exists.
54
42
  EOL
55
43
  end
56
-
57
- if File.exist?(@user_data_script)
58
- render_file(@user_data_script)
59
- else
60
- message = "WARN: #{@user_data_script} not found"
61
- logger.info message.color(:yellow)
62
- "# #{message}"
63
- end
44
+ user_data(path)
64
45
  end
46
+ alias_method :user_data_script_path, :user_data_script
65
47
  end
66
48
  end
@@ -108,6 +108,12 @@ module Lono::Builder::Dsl::Syntax
108
108
 
109
109
  def join(delimiter, *list)
110
110
  list = list.flatten
111
+ if list.size == 1 # IE: join(",", get_att("Vpc.Ipv6CidrBlocks"))
112
+ first = list.first
113
+ if first.is_a?(Hash) && first.keys.first == "Fn::GetAtt"
114
+ list = first
115
+ end
116
+ end
111
117
  { "Fn::Join" => [delimiter, list] }
112
118
  end
113
119
 
@@ -2,10 +2,12 @@ class Lono::Builder
2
2
  class Param < Lono::CLI::Base
3
3
  attr_reader :env_path, :base_path # set when build is called
4
4
  include Lono::Builder::Dsl::Syntax
5
+ include Lono::Builder::Context
5
6
  # Overriding output resource DSL method
6
7
  alias_method :output, :stack_output
7
8
 
8
9
  def build
10
+ load_context
9
11
  logger.info "Building parameters"
10
12
 
11
13
  contents = []
@@ -3,7 +3,7 @@ class Lono::Cfn::Deploy
3
3
  def check!
4
4
  status = stack_status
5
5
  unless status =~ /_COMPLETE$/ || status == "UPDATE_ROLLBACK_FAILED"
6
- logger.info "Cannot create run operation on stack #{@stack} is not in an updatable state. Stack status: #{status}".color(:red)
6
+ logger.info "Cannot run operation on stack #{@stack} is not in an updatable state. Stack status: #{status}".color(:red)
7
7
  quit 1
8
8
  end
9
9
  end
@@ -59,7 +59,6 @@ module Lono::Cfn
59
59
  opts = Opts.new(@blueprint, "create_stack", iam, options)
60
60
  opts.show
61
61
  options = opts.values
62
- upload_all
63
62
  cfn.create_stack(options)
64
63
  end
65
64
 
@@ -70,33 +69,11 @@ module Lono::Cfn
70
69
  end
71
70
 
72
71
  operable.check!
73
- upload_all # important to call before plan.for_update.
74
- # plan.for_update creates the changeset and requires the template to already be uploaded to s3
75
72
  changeset = plan.for_update
76
73
  !changeset.changed? || @sure || sure?("Are you sure you want to update the #{@stack} stack?")
77
74
  changeset.execute_change_set
78
75
  end
79
76
 
80
- def upload_all
81
- upload_templates
82
- upload_files
83
- end
84
-
85
- def upload_templates
86
- Lono::Builder::Template::Upload.new(@options).run
87
- end
88
-
89
- # Upload files right before create_stack or execute_change_set
90
- # Its better to upload here as part of a deploy vs a build
91
- # IE: lono build should try not to do a remote write to s3 if possible
92
- def upload_files
93
- # Files built and compressed in
94
- # Lono::Builder::Dsl::Finalizer::Files::Build#build_files
95
- Lono::Files.files.each do |file| # using singular file, but is like a "file_list"
96
- file.upload
97
- end
98
- end
99
-
100
77
  def create?
101
78
  !stack_exists?(@stack)
102
79
  end
data/lib/lono/cfn/plan.rb CHANGED
@@ -10,6 +10,7 @@ module Lono::Cfn
10
10
  end
11
11
 
12
12
  def for_update
13
+ upload_all
13
14
  # Allow passing down of the build object from Cfn::Deploy so build.all only runs once.
14
15
  # Fallback to creating new build object but still pass one build object instance down.
15
16
  @options[:build] ||= build
@@ -24,11 +25,35 @@ module Lono::Cfn
24
25
  end
25
26
 
26
27
  def for_create
28
+ upload_all
27
29
  New.new(@options).run
28
30
  end
29
31
 
30
32
  def for_delete
31
33
  Delete.new(@options).run
32
34
  end
35
+
36
+ # important to call before for_update and for_create
37
+ # since changeset requires the template to already be uploaded to s3
38
+ def upload_all
39
+ upload_templates
40
+ upload_files
41
+ end
42
+
43
+ def upload_templates
44
+ Lono::Builder::Template::Upload.new(@options).run
45
+ end
46
+
47
+ # Upload files right before create_stack or execute_change_set
48
+ # Its better to upload here as part of a deploy vs a build
49
+ # IE: lono build should try not to do a remote write to s3 if possible
50
+ def upload_files
51
+ # Files built and compressed in
52
+ # Lono::Builder::Dsl::Finalizer::Files::Build#build_files
53
+ Lono::Files.files.each do |file| # using singular file, but is like a "file_list"
54
+ file.upload
55
+ end
56
+ end
57
+
33
58
  end
34
59
  end
@@ -26,7 +26,9 @@ class Object
26
26
  # path: app/blueprints/demo/helpers/outputs.rb
27
27
  # module_name: Outputs
28
28
  require path
29
- self.class.send :include, module_name.constantize
29
+ if path.include?("_helper.rb")
30
+ self.class.send :include, module_name.constantize
31
+ end
30
32
  end
31
33
  end
32
34
  end
@@ -77,7 +77,7 @@ module Lono::Layering
77
77
  # Interface method: layers = pre_layers + main_layers + post_layers
78
78
  # Simple layering is default. Can set with:
79
79
  #
80
- # config.layering.mode = "simple" # simple of full
80
+ # config.layering.mode = "simple" # simple or full
81
81
  #
82
82
  def main_layers
83
83
  if Lono.config.layering.mode == "simple"
@@ -120,7 +120,6 @@ module Lono::Layering
120
120
  logger.info " #{pretty_path(path)}" if File.exist?(path)
121
121
  end
122
122
  end
123
- logger.debug ""
124
123
  @@shown_layers[@type] = true
125
124
  end
126
125
 
@@ -0,0 +1,9 @@
1
+ module Lono::Utils
2
+ module CallLine
3
+ include Pretty
4
+
5
+ def lono_call_line
6
+ caller.find { |l| l.include?(Lono.root.to_s) }
7
+ end
8
+ end
9
+ end
data/lib/lono/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lono
2
- VERSION = "8.0.0-rc4"
2
+ VERSION = "8.0.0-rc6"
3
3
  end
@@ -2,10 +2,5 @@ source "https://rubygems.org"
2
2
 
3
3
  # gem "lono", "~> <%= Lono::VERSION %>"
4
4
 
5
- if ENV['C9_USER']
6
- gem "lono", path: "~/boltops-tools/lono"
7
- gem "rspec-lono", path: "~/boltops-tools/rspec-lono"
8
- else
9
- gem "lono", git: "https://github.com/boltops-tools/lono", branch: "v8"
10
- gem "rspec-lono", git: "https://github.com/boltops-tools/rspec-lono", branch: "master"
11
- end
5
+ gem "lono", git: "https://github.com/boltops-tools/lono", branch: "master"
6
+ gem "rspec-lono", git: "https://github.com/boltops-tools/rspec-lono", branch: "master"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lono
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.0.pre.rc4
4
+ version: 8.0.0.pre.rc6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-20 00:00:00.000000000 Z
11
+ date: 2024-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -487,6 +487,7 @@ files:
487
487
  - ".cody/acceptance/role.rb"
488
488
  - ".cody/shared/script/install.sh"
489
489
  - ".cody/shared/script/install/lono.sh"
490
+ - ".github/FUNDING.yml"
490
491
  - ".github/ISSUE_TEMPLATE.md"
491
492
  - ".github/ISSUE_TEMPLATE/bug_report.md"
492
493
  - ".github/ISSUE_TEMPLATE/documentation.md"
@@ -765,6 +766,7 @@ files:
765
766
  - lib/lono/seeder.rb
766
767
  - lib/lono/user_data.rb
767
768
  - lib/lono/utils.rb
769
+ - lib/lono/utils/call_line.rb
768
770
  - lib/lono/utils/logging.rb
769
771
  - lib/lono/utils/pretty.rb
770
772
  - lib/lono/utils/quit.rb
@@ -807,7 +809,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
807
809
  - !ruby/object:Gem::Version
808
810
  version: 1.3.1
809
811
  requirements: []
810
- rubygems_version: 3.2.32
812
+ rubygems_version: 3.4.19
811
813
  signing_key:
812
814
  specification_version: 4
813
815
  summary: 'Lono: The CloudFormation Framework'