awx 0.6.8 → 0.6.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d63dfca777da31742b37438fadf3f0509242778
4
- data.tar.gz: 055e37ab8992197e991510cdd6fa2ed5d70fc935
3
+ metadata.gz: 16021b5064f0049ca45a3b69fdf7dabc825b2dad
4
+ data.tar.gz: 474f2e36b2c3ee7e025f31baa95772712feab355
5
5
  SHA512:
6
- metadata.gz: aa01ec9ffa346f05363cf32d456b993bb3d24115e61f5c742aed3ae640030b6c408d9e1f1eeda55507a2cad481473091245d21fd41849c9887a5a31350dcea24
7
- data.tar.gz: 35812f1698392104fb8fc6a2c677ae3063c39f97e4a31df30eb80d375ae43e2d734fa2302b48a5c100d2b41e84135d43a4697e90693a735cba63738f5ce1b326
6
+ metadata.gz: 4e1bc9ede728cb476302200bc63d547a2c3cd37310b16aa349502f5bb980e1f551b47a0732b6be360c407a9d33f556f0584c48931bed46e9099cca63223f2a91
7
+ data.tar.gz: 26b34761934c99f5ba5c0ad3503893e5905938f0b06fab463d6a57c0cbebb82b3c5171292e99fb9d0b927db6f1c74804bbee11fbc0d3ec2e62d3cdcc75d668fb
data/lib/aws/aws_cli.rb CHANGED
@@ -66,7 +66,7 @@ module App
66
66
 
67
67
  # Create a CloudFormation Stack.
68
68
  # @return string (StackID)
69
- def self.cloudformation_stack_create(region, stack_name, s3_url, params: nil, tags: nil, capabilities: [], term_protect: false, term_script: false, timeout: nil)
69
+ def self.cloudformation_stack_create(region, stack_name, s3_url, params: nil, tags: nil, capabilities: [], term_protect: false, term_script: false, timeout: nil, open_chrome: true)
70
70
  params = params.nil? ? '' : " --parameters '#{params.gsub("'", "\\'")}'"
71
71
  tags = tags.nil? ? '' : " --tags '#{tags.gsub("'", "\\'")}'"
72
72
  capabilities = !capabilities.any? ? '' : " --capabilities #{capabilities.join(' ')}"
@@ -80,7 +80,7 @@ module App
80
80
  if stack_send.has_key?('StackId')
81
81
  Blufin::Terminal::success('Template was accepted by AWS.', ["\x1B[38;5;240mStackId \xe2\x80\x94 \x1B[38;5;40m#{stack_send['StackId']}"])
82
82
  stack_url = "https://#{region}.console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks?filter=active&tab=events&stackId=#{URI::encode(stack_send['StackId'])}"
83
- system("/usr/bin/open -a '/Applications/Google Chrome.app' '#{stack_url}'")
83
+ system("/usr/bin/open -a '/Applications/Google Chrome.app' '#{stack_url}'") if open_chrome
84
84
  else
85
85
  Blufin::Terminal::error("Key not found in response: #{Blufin::Terminal::format_invalid('StackId')}", stack_send.inspect, true)
86
86
  end
@@ -14,6 +14,8 @@ module App
14
14
  PROFILES = 'Profiles'
15
15
  CLOUDFORMATION = 'CloudFormation'
16
16
  SSH_KEYS = 'SSHKeys'
17
+ PROJECTS = 'Projects'
18
+ DEPLOYMENTS = 'Deployments'
17
19
 
18
20
  # Reads the config data and decides what profile to use.
19
21
  # @return void
@@ -55,8 +57,8 @@ module App
55
57
  cloudformation_template_path = @@profile[CLOUDFORMATION]['Templates']['Local']['Path']
56
58
  errors << "Path not found: #{Blufin::Terminal::format_invalid(cloudformation_template_path)}" unless Blufin::Files::path_exists(cloudformation_template_path)
57
59
  end
58
- s3_region = @@profile[CLOUDFORMATION]['Uploads']['S3Bucket']['Region']
59
- default_regions = @@profile[CLOUDFORMATION]['Defaults']['Regions']
60
+ s3_region = @@profile[CLOUDFORMATION]['Uploads']['S3Bucket']['Region']
61
+ default_regions = @@profile[CLOUDFORMATION]['Defaults']['Regions']
60
62
  errors << "Invalid region: #{Blufin::Terminal::format_invalid(s3_region)}" unless App::AWS::VALID_REGIONS.include?(s3_region)
61
63
  errors << "Need atleast 1 default region for: #{Blufin::Terminal::format_invalid('Profiles[].CloudFormation.Defaults.Regions')}" if default_regions.nil? || !default_regions.any?
62
64
  default_regions.each do |default_region|
data/lib/awx.rb CHANGED
@@ -29,6 +29,8 @@ module App
29
29
  App::AWSProfile::init(Blufin::Config::get)
30
30
  end
31
31
 
32
+ profile = App::AWSProfile::get_profile
33
+
32
34
  Convoy::App.create do |awx|
33
35
 
34
36
  awx.version AWX_VERSION
@@ -45,7 +47,7 @@ TEMPLATE
45
47
  awx.description 'An abstraction layer built around the AWS-cli (written by: Albert Rannetsperger)'
46
48
 
47
49
  # c - CLOUD FORMATION
48
- if ARGV[0] != 'setup' && ARGV[0] != 'x' && App::AWSProfile::get_profile.has_key?(App::AWSProfile::CLOUDFORMATION)
50
+ if ARGV[0] != 'setup' && ARGV[0] != 'x' && profile.has_key?(App::AWSProfile::CLOUDFORMATION)
49
51
  awx.command :cloudformation, :aliases => [:c] do |awx_cloudformation|
50
52
  awx_cloudformation.summary 'Create, list and delete cloud-formation stacks'
51
53
  # c - CLOUD FORMATION CREATE
@@ -93,7 +95,7 @@ TEMPLATE
93
95
  end
94
96
 
95
97
  # d - DEPLOY (DEPRECATED)
96
- if ARGV[0] != 'setup' && ARGV[0] != 'x' && (App::AWSProfile::get_profile.has_key?('Projects'))
98
+ if ARGV[0] != 'setup' && ARGV[0] != 'x' && (profile.has_key?('Projects'))
97
99
  awx.command :deploy_deprecated, :aliases => [:d] do |deploy_deprecated|
98
100
  deploy_deprecated.summary "Deploy application(s) to AWS #{Blufin::Terminal::format_invalid('@deprecated')}"
99
101
  deploy_deprecated.options do |opts|
@@ -106,7 +108,7 @@ TEMPLATE
106
108
  end
107
109
 
108
110
  # i - INFRASTRUCTURE
109
- if ARGV[0] != 'setup' && ARGV[0] != 'x' && (App::AWSProfile::get_profile.has_key?('Projects')) && (App::AWSProfile::get_profile.has_key?('Deployments'))
111
+ if ARGV[0] != 'setup' && ARGV[0] != 'x' && (profile.has_key?('Projects')) && (profile.has_key?('Deployments'))
110
112
  awx.command :infrastructure, :aliases => [:i] do |infrastructure|
111
113
  infrastructure.summary 'View, modify & deploy application(s) to pre-defined infrastructure'
112
114
  infrastructure.action do |opts, args|
@@ -137,12 +139,12 @@ TEMPLATE
137
139
  end
138
140
 
139
141
  # s - SSH
140
- awx.command :ssh, :aliases => [:s] do |ssh|
141
- ssh.summary 'SSH into EC2 instances'
142
- ssh.action do |opts, args|
143
- AppCommand::SSH.new(opts, args).execute
144
- end
142
+ awx.command :ssh, :aliases => [:s] do |ssh|
143
+ ssh.summary 'SSH into EC2 instances'
144
+ ssh.action do |opts, args|
145
+ AppCommand::SSH.new(opts, args).execute
145
146
  end
147
+ end
146
148
 
147
149
  # S - SWITCH
148
150
  if ARGV[0] != 'setup' && ARGV[0] != 'x' && App::AWSProfile::get_profile_names.length > 1 && !App::AWSProfile::get_credentials.nil?
@@ -156,21 +158,34 @@ TEMPLATE
156
158
  end
157
159
 
158
160
  # u - UPLOAD
159
- if ARGV[0] != 'setup' && ARGV[0] != 'x' && (App::AWSProfile::get_profile.has_key?(App::AWSProfile::CLOUDFORMATION) || App::AWSProfile::get_profile.has_key?('Projects'))
161
+ if ARGV[0] != 'setup' && ARGV[0] != 'x' && (
162
+ (profile.has_key?(App::AWSProfile::DEPLOYMENTS) && profile[App::AWSProfile::DEPLOYMENTS].has_key?('Local')) ||
163
+ (profile.has_key?(App::AWSProfile::PROJECTS) && profile[App::AWSProfile::PROJECTS].has_key?('Local')) ||
164
+ (profile.has_key?(App::AWSProfile::CLOUDFORMATION) && profile[App::AWSProfile::CLOUDFORMATION]['Templates'].has_key?('Local')))
160
165
  awx.command :upload, :aliases => [:u] do |upload|
161
166
  upload.summary 'Upload configuration(s) to S3'
167
+ # d - UPLOAD DEPLOYMENTS
168
+ if profile.has_key?(App::AWSProfile::DEPLOYMENTS) && profile[App::AWSProfile::DEPLOYMENTS].has_key?('Local')
169
+ upload.command :deployments, :aliases => [:d] do |upload_deployments|
170
+ upload_deployments.summary 'Upload Deployments'
171
+ upload_deployments.action do |opts, args|
172
+ args = args.unshift(AppCommand::Upload::DEPLOYMENTS)
173
+ AppCommand::Upload.new(opts, args).execute
174
+ end
175
+ end
176
+ end
162
177
  # p - UPLOAD PROJECTS
163
- if App::AWSProfile::get_profile.has_key?('Projects')
178
+ if profile.has_key?(App::AWSProfile::PROJECTS) && profile[App::AWSProfile::PROJECTS].has_key?('Local')
164
179
  upload.command :projects, :aliases => [:p] do |upload_projects|
165
180
  upload_projects.summary 'Upload Projects'
166
181
  upload_projects.action do |opts, args|
167
- args = args.unshift(AppCommand::Upload::PROJECTS)
182
+ args = args.unshift(App::AWSProfile::PROJECTS)
168
183
  AppCommand::Upload.new(opts, args).execute
169
184
  end
170
185
  end
171
186
  end
172
- # t - UPLOAD TEMPLATE
173
- if App::AWSProfile::get_profile.has_key?(App::AWSProfile::CLOUDFORMATION)
187
+ # t - UPLOAD TEMPLATES
188
+ if profile.has_key?(App::AWSProfile::CLOUDFORMATION) && profile[App::AWSProfile::CLOUDFORMATION]['Templates'].has_key?('Local')
174
189
  upload.command :templates, :aliases => [:t] do |upload_templates|
175
190
  upload_templates.summary 'Upload Templates'
176
191
  upload_templates.action do |opts, args|
@@ -398,7 +398,7 @@ module AppCommand
398
398
  category, template, @template = select_template_prompt
399
399
 
400
400
  # Will be something like: "ec2/build-server"
401
- template_name = "#{category}/#{template}"
401
+ template_name = "#{category}/#{template}"
402
402
 
403
403
  if @params.any?
404
404
  # Here we replace the UUID for the stack-name at the last-second to enable parallel, identical runs (if exists).
@@ -570,10 +570,12 @@ module AppCommand
570
570
 
571
571
  if Blufin::Terminal::prompt_yes_no("Review: #{App::AWSOutputter::render_selection(category, template)}", params_output, 'Create Stack?', false)
572
572
 
573
+ is_ec2 = `#{App::Opt::get_base_path}/#{App::Opt::OPT_PATH}/shell/ec2-check`.to_s.gsub("\n", '') =~ /yes/i
574
+
573
575
  # If no 'after' actions necessary, give option to terminate script.
574
576
  term_script = false
575
- if @template[:method_after_create].nil? && !@template[:single_serve]
576
- options = [{:text => "Yes \xe2\x80\x94 Don't exit script.", :value => false}, {:text => 'No', :value => true}]
577
+ if @template[:method_after_create].nil? && !@template[:single_serve] && !is_ec2
578
+ options = [{:text => "Yes \xe2\x80\x94 Wait.", :value => false}, {:text => 'No', :value => true}]
577
579
  help_text = "Select 'No' to end the script immediately. Status can still be viewed in the AWS console."
578
580
  term_script = Blufin::Terminal::prompt_select('Wait for stack to build?', options, help: help_text)
579
581
  puts
@@ -596,7 +598,8 @@ module AppCommand
596
598
  capabilities: capabilities_arr,
597
599
  term_protect: @template[:single_serve] ? false : @params[OPTION_TERM_PROTECT],
598
600
  term_script: term_script,
599
- timeout: @params[OPTION_TIMEOUT])
601
+ timeout: @params[OPTION_TIMEOUT],
602
+ open_chrome: !is_ec2)
600
603
 
601
604
  # Call :after_create() -- if exists.
602
605
  @template[:method_after_create].call(@params) unless @template[:method_after_create].nil?
data/lib/routes/upload.rb CHANGED
@@ -2,16 +2,18 @@ module AppCommand
2
2
 
3
3
  class Upload < ::Convoy::ActionCommand::Base
4
4
 
5
- PROJECTS = 'Projects'
6
- TEMPLATES = 'Templates'
5
+ DEPLOYMENTS = 'Deployments'
6
+ PROJECTS = 'Projects'
7
+ TEMPLATES = 'Templates'
7
8
 
8
9
  def execute
9
10
 
10
11
  begin
11
12
 
12
- @opts = command_options
13
- @args = arguments
14
- @action = determine_action
13
+ @opts = command_options
14
+ @args = arguments
15
+ @action = determine_action
16
+ @profile = App::AWSProfile::get_profile
15
17
 
16
18
  opts_validate
17
19
  opts_routing
@@ -30,7 +32,48 @@ module AppCommand
30
32
 
31
33
  def opts_routing
32
34
 
33
- raise RuntimeError, "Not yet implemented! -> #{@action}"
35
+ # Get the local path based on upload action.
36
+ # @profile keys DO NOT need to be validated because we already check them in the awx.rb routing code.
37
+ case @action
38
+ when DEPLOYMENTS
39
+ local_path = @profile[App::AWSProfile::DEPLOYMENTS]['Local']['File']
40
+ s3_bucket = @profile[App::AWSProfile::DEPLOYMENTS]['S3Bucket']['Name']
41
+ s3_path = @profile[App::AWSProfile::DEPLOYMENTS]['S3Bucket']['File']
42
+ s3_region = @profile[App::AWSProfile::DEPLOYMENTS]['S3Bucket']['Region']
43
+ when PROJECTS
44
+ local_path = @profile[App::AWSProfile::PROJECTS]['Local']['File']
45
+ s3_bucket = @profile[App::AWSProfile::PROJECTS]['S3Bucket']['Name']
46
+ s3_path = @profile[App::AWSProfile::PROJECTS]['S3Bucket']['File']
47
+ s3_region = @profile[App::AWSProfile::PROJECTS]['S3Bucket']['Region']
48
+ when TEMPLATES
49
+ local_path = @profile[App::AWSProfile::CLOUDFORMATION]['Templates']['Local']['Path']
50
+ s3_bucket = @profile[App::AWSProfile::CLOUDFORMATION]['Templates']['S3Bucket']['Name']
51
+ s3_path = @profile[App::AWSProfile::CLOUDFORMATION]['Templates']['S3Bucket']['Path']
52
+ s3_region = @profile[App::AWSProfile::CLOUDFORMATION]['Templates']['S3Bucket']['Region']
53
+ else
54
+ raise RuntimeError, "Unrecognized action: #{@action}"
55
+ end
56
+
57
+ # Check that path/file exists.
58
+ if [TEMPLATES].include?(@action)
59
+ Blufin::Terminal::error("Path not found: #{Blufin::Terminal::format_directory(local_path)}") unless Blufin::Files::path_exists(local_path)
60
+ is_file = false
61
+ else
62
+ Blufin::Terminal::error("File not found: #{Blufin::Terminal::format_directory(local_path)}") unless Blufin::Files::file_exists(local_path)
63
+ is_file = true
64
+ end
65
+
66
+ # Do a dryrun first.
67
+ puts
68
+ Blufin::AWS::upload_s3_data(s3_bucket, s3_path, local_path, profile: @profile[App::AWSProfile::PROFILE], region: s3_region, is_file: is_file, dryrun: true)
69
+ puts
70
+
71
+ if Blufin::Terminal::prompt_yes?('Sync these files to S3?')
72
+ # Upload path to S3.
73
+ s3_path = Blufin::AWS::upload_s3_data(s3_bucket, s3_path, local_path, profile: @profile[App::AWSProfile::PROFILE], region: s3_region, is_file: is_file)
74
+ # Success Message.
75
+ Blufin::Terminal::success('Files have been successfully uploaded to S3.', s3_path)
76
+ end
34
77
 
35
78
  end
36
79
 
@@ -40,7 +83,7 @@ module AppCommand
40
83
  # @return void
41
84
  def determine_action
42
85
  action = @args.shift
43
- raise RuntimeError, "Invalid action: #{action}. This is an error with your code not your input." unless [PROJECTS, TEMPLATES].include?(action)
86
+ raise RuntimeError, "Invalid action: #{action}. This is an error with your code not your input." unless [DEPLOYMENTS, PROJECTS, TEMPLATES].include?(action)
44
87
  action
45
88
  end
46
89
 
data/lib/version.rb CHANGED
@@ -1 +1 @@
1
- AWX_VERSION = '0.6.8'
1
+ AWX_VERSION = '0.6.9'
@@ -44,8 +44,8 @@ mapping:
44
44
  Region:
45
45
  required: yes
46
46
  Uploads:
47
- required: yes
48
47
  type: map
48
+ required: yes
49
49
  mapping:
50
50
  S3Bucket:
51
51
  type: map
@@ -75,6 +75,7 @@ mapping:
75
75
  mapping:
76
76
  S3Bucket:
77
77
  type: map
78
+ required: yes
78
79
  mapping:
79
80
  Name:
80
81
  required: yes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.8
4
+ version: 0.6.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Albert Rannetsperger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-08 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: blufin-lib