comodule 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +0 -2
  5. data/README.md +115 -43
  6. data/comodule.gemspec +4 -2
  7. data/copy_to_rails.sh +7 -0
  8. data/lib/comodule.rb +32 -2
  9. data/lib/comodule/config_support.rb +95 -18
  10. data/lib/comodule/deployment.rb +2 -0
  11. data/lib/comodule/deployment/base.rb +186 -0
  12. data/lib/comodule/deployment/helper.rb +9 -0
  13. data/lib/comodule/deployment/helper/aws.rb +96 -0
  14. data/lib/comodule/deployment/helper/aws/base.rb +14 -0
  15. data/lib/comodule/deployment/helper/aws/cloud_formation.rb +146 -0
  16. data/lib/comodule/deployment/helper/aws/ec2.rb +37 -0
  17. data/lib/comodule/deployment/helper/aws/rds.rb +46 -0
  18. data/lib/comodule/deployment/helper/aws/s3.rb +52 -0
  19. data/lib/comodule/deployment/helper/aws/ssl.rb +111 -0
  20. data/lib/comodule/deployment/helper/base.rb +18 -0
  21. data/lib/comodule/deployment/helper/shell_command.rb +76 -0
  22. data/lib/comodule/deployment/helper/system_utility.rb +80 -0
  23. data/lib/comodule/deployment/helper/uploader.rb +155 -0
  24. data/lib/comodule/deployment/platform.rb +156 -0
  25. data/lib/comodule/deployment/platform/default_files/.gitignore.erb +5 -0
  26. data/lib/comodule/deployment/platform/default_files/aws_config.yml.erb +2 -0
  27. data/lib/comodule/version.rb +1 -1
  28. data/lib/tasks/comodule.rake +94 -0
  29. data/spec/comodule/config_support_spec.rb +102 -0
  30. data/spec/comodule/deployment/helper/aws/cloud_formation_spec.rb +71 -0
  31. data/spec/comodule/deployment/helper/aws/s3_spec.rb +85 -0
  32. data/spec/comodule/deployment/helper/shell_command_spec.rb +176 -0
  33. data/spec/comodule/deployment/helper/system_utility_spec.rb +250 -0
  34. data/spec/comodule/deployment/helper/uploader_spec.rb +274 -0
  35. data/spec/comodule/deployment/platform_spec.rb +310 -0
  36. data/spec/comodule_spec.rb +1 -1
  37. data/spec/rails/experiment/.gitignore +16 -0
  38. data/spec/rails/experiment/Gemfile +43 -0
  39. data/spec/rails/experiment/README.rdoc +28 -0
  40. data/spec/rails/experiment/Rakefile +6 -0
  41. data/spec/rails/experiment/app/assets/images/.keep +0 -0
  42. data/spec/rails/experiment/app/assets/javascripts/application.js +16 -0
  43. data/spec/rails/experiment/app/assets/javascripts/experiences.js.coffee +3 -0
  44. data/spec/rails/experiment/app/assets/stylesheets/application.css +15 -0
  45. data/spec/rails/experiment/app/assets/stylesheets/experiences.css.scss +3 -0
  46. data/spec/rails/experiment/app/assets/stylesheets/scaffolds.css.scss +69 -0
  47. data/spec/rails/experiment/app/controllers/application_controller.rb +5 -0
  48. data/spec/rails/experiment/app/controllers/concerns/.keep +0 -0
  49. data/spec/rails/experiment/app/controllers/experiences_controller.rb +74 -0
  50. data/spec/rails/experiment/app/helpers/application_helper.rb +2 -0
  51. data/spec/rails/experiment/app/helpers/experiences_helper.rb +2 -0
  52. data/spec/rails/experiment/app/mailers/.keep +0 -0
  53. data/spec/rails/experiment/app/models/.keep +0 -0
  54. data/spec/rails/experiment/app/models/concerns/.keep +0 -0
  55. data/spec/rails/experiment/app/models/experience.rb +2 -0
  56. data/spec/rails/experiment/app/views/experiences/_form.html.slim +12 -0
  57. data/spec/rails/experiment/app/views/experiences/edit.html.slim +8 -0
  58. data/spec/rails/experiment/app/views/experiences/index.html.slim +21 -0
  59. data/spec/rails/experiment/app/views/experiences/index.json.jbuilder +4 -0
  60. data/spec/rails/experiment/app/views/experiences/new.html.slim +5 -0
  61. data/spec/rails/experiment/app/views/experiences/show.html.slim +9 -0
  62. data/spec/rails/experiment/app/views/experiences/show.json.jbuilder +1 -0
  63. data/spec/rails/experiment/app/views/layouts/application.html.erb +14 -0
  64. data/spec/rails/experiment/bin/bundle +3 -0
  65. data/spec/rails/experiment/bin/rails +8 -0
  66. data/spec/rails/experiment/bin/rake +8 -0
  67. data/spec/rails/experiment/bin/spring +18 -0
  68. data/spec/rails/experiment/config.ru +4 -0
  69. data/spec/rails/experiment/config/application.rb +23 -0
  70. data/spec/rails/experiment/config/boot.rb +4 -0
  71. data/spec/rails/experiment/config/database.yml +25 -0
  72. data/spec/rails/experiment/config/environment.rb +5 -0
  73. data/spec/rails/experiment/config/environments/development.rb +37 -0
  74. data/spec/rails/experiment/config/environments/production.rb +78 -0
  75. data/spec/rails/experiment/config/environments/test.rb +39 -0
  76. data/spec/rails/experiment/config/experiment_unicorn.rb +104 -0
  77. data/spec/rails/experiment/config/initializers/assets.rb +8 -0
  78. data/spec/rails/experiment/config/initializers/backtrace_silencers.rb +7 -0
  79. data/spec/rails/experiment/config/initializers/cookies_serializer.rb +3 -0
  80. data/spec/rails/experiment/config/initializers/filter_parameter_logging.rb +4 -0
  81. data/spec/rails/experiment/config/initializers/inflections.rb +16 -0
  82. data/spec/rails/experiment/config/initializers/mime_types.rb +4 -0
  83. data/spec/rails/experiment/config/initializers/session_store.rb +3 -0
  84. data/spec/rails/experiment/config/initializers/wrap_parameters.rb +14 -0
  85. data/spec/rails/experiment/config/locales/en.yml +23 -0
  86. data/spec/rails/experiment/config/routes.rb +59 -0
  87. data/spec/rails/experiment/config/secrets.yml +22 -0
  88. data/spec/rails/experiment/db/migrate/20141004050218_create_experiences.rb +9 -0
  89. data/spec/rails/experiment/db/schema.rb +22 -0
  90. data/spec/rails/experiment/db/seeds.rb +7 -0
  91. data/spec/rails/experiment/lib/assets/.keep +0 -0
  92. data/spec/rails/experiment/lib/tasks/.keep +0 -0
  93. data/spec/rails/experiment/log/.keep +0 -0
  94. data/spec/rails/experiment/platform/.gitignore +5 -0
  95. data/spec/rails/experiment/platform/ami/cloud_formation/.keep +0 -0
  96. data/spec/rails/experiment/platform/ami/cloud_formation/template.json.erb +138 -0
  97. data/spec/rails/experiment/platform/ami/config.yml +5 -0
  98. data/spec/rails/experiment/platform/ami/config/.keep +0 -0
  99. data/spec/rails/experiment/platform/cloud_formation/.keep +0 -0
  100. data/spec/rails/experiment/platform/config.yml +18 -0
  101. data/spec/rails/experiment/platform/config/.keep +0 -0
  102. data/spec/rails/experiment/platform/config/nginx/conf.d/default.conf.erb +46 -0
  103. data/spec/rails/experiment/platform/config/nginx/nginx.conf.erb +53 -0
  104. data/spec/rails/experiment/platform/deployment/cloud_formation/.keep +0 -0
  105. data/spec/rails/experiment/platform/deployment/cloud_formation/template.json.erb +107 -0
  106. data/spec/rails/experiment/platform/deployment/config.yml +16 -0
  107. data/spec/rails/experiment/platform/deployment/config/.keep +0 -0
  108. data/spec/rails/experiment/public/404.html +67 -0
  109. data/spec/rails/experiment/public/422.html +67 -0
  110. data/spec/rails/experiment/public/500.html +66 -0
  111. data/spec/rails/experiment/public/favicon.ico +0 -0
  112. data/spec/rails/experiment/public/robots.txt +5 -0
  113. data/spec/rails/experiment/test/controllers/.keep +0 -0
  114. data/spec/rails/experiment/test/controllers/experiences_controller_test.rb +49 -0
  115. data/spec/rails/experiment/test/fixtures/.keep +0 -0
  116. data/spec/rails/experiment/test/fixtures/experiences.yml +7 -0
  117. data/spec/rails/experiment/test/helpers/.keep +0 -0
  118. data/spec/rails/experiment/test/helpers/experiences_helper_test.rb +4 -0
  119. data/spec/rails/experiment/test/integration/.keep +0 -0
  120. data/spec/rails/experiment/test/mailers/.keep +0 -0
  121. data/spec/rails/experiment/test/models/.keep +0 -0
  122. data/spec/rails/experiment/test/models/experience_test.rb +7 -0
  123. data/spec/rails/experiment/test/test_helper.rb +10 -0
  124. data/spec/rails/experiment/vendor/assets/javascripts/.keep +0 -0
  125. data/spec/rails/experiment/vendor/assets/stylesheets/.keep +0 -0
  126. data/spec/spec_helper.rb +3 -0
  127. data/spec/support/deployment/helper/shell_command_support.rb +34 -0
  128. data/spec/support/deployment/helper/uploader_support.rb +21 -0
  129. data/spec/support/deployment/platform_support.rb +32 -0
  130. metadata +262 -21
  131. data/lib/comodule/customize_class/hash_custom.rb +0 -20
  132. data/spec/comodule/customize_class/hash_custom_spec.rb +0 -32
@@ -0,0 +1,9 @@
1
+ module Comodule::Deployment::Helper
2
+
3
+ def self.included(receiver)
4
+ receiver.send(
5
+ :include,
6
+ SystemUtility, ShellCommand, Uploader, Aws
7
+ )
8
+ end
9
+ end
@@ -0,0 +1,96 @@
1
+ require 'aws-sdk'
2
+
3
+ module Comodule::Deployment::Helper::Aws
4
+
5
+ def self.included(receiver)
6
+ receiver.send :include, InstanceMethods, CloudFormation, S3, Ec2, Ssl, Rds
7
+ end
8
+
9
+ module InstanceMethods
10
+ def aws
11
+ @aws ||= ::Comodule::Deployment::Helper::Aws::Service.new(self)
12
+ end
13
+ end
14
+
15
+ class Service
16
+ include ::Comodule::Deployment::Helper::Base
17
+
18
+ def initialize(platform)
19
+ self.owner = platform
20
+
21
+ @aws_sdk_object = {}
22
+ @access_credentials = access_credentials || {}
23
+ @method_map = {}
24
+ ::AWS.constants.each do |const_name|
25
+ const = ::AWS.const_get(const_name)
26
+ if defined?(const.new)
27
+ @method_map[const_name.to_s.underscore.to_sym] = const
28
+ end
29
+ end
30
+ end
31
+
32
+ def access_credentials
33
+ config.aws_access_credentials || {}
34
+ end
35
+
36
+ def search_credential_directive(aws_resource_name, directive)
37
+ (access_credentials[aws_resource_name] && access_credentials[aws_resource_name][directive]) ||
38
+ (access_credentials[:common] && access_credentials[:common][directive]) ||
39
+ access_credentials[directive] ||
40
+ config["aws_#{directive}".to_sym]
41
+ end
42
+
43
+ def access_key_id(aws_resource_name)
44
+ search_credential_directive(aws_resource_name, :access_key_id)
45
+ end
46
+
47
+ def secret_access_key(aws_resource_name)
48
+ search_credential_directive(aws_resource_name, :secret_access_key)
49
+ end
50
+
51
+ def region(aws_resource_name)
52
+ search_credential_directive(aws_resource_name, :region)
53
+ end
54
+
55
+ def validate_credential(aws_resource_name, iam)
56
+ case aws_resource_name
57
+ when :cloud_formation, :rds, :auto_scaling
58
+ if !iam || !iam[:region]
59
+ raise ArgumentError, "Please specify aws_access_credentials.#{aws_resource_name}.region on your config.yml."
60
+ end
61
+ when :cloud_front, :s3
62
+ iam.delete(:region)
63
+ end
64
+
65
+ iam
66
+ end
67
+
68
+ def method_missing(method_name)
69
+ if @method_map[method_name]
70
+ return @aws_sdk_object[method_name] if @aws_sdk_object[method_name]
71
+
72
+ iam = {}
73
+
74
+ key_id = access_key_id(method_name)
75
+ secret = secret_access_key(method_name)
76
+ region = region(method_name)
77
+ iam[:access_key_id] = key_id if key_id
78
+ iam[:secret_access_key] = secret if secret
79
+ iam[:region] = region if region && region.present?
80
+
81
+ iam = (@access_credentials[method_name] || @access_credentials[:common] || {}).to_hash.merge(iam)
82
+
83
+ validate_credential(method_name, iam)
84
+ if !iam.empty?
85
+ @aws_sdk_object[method_name] = @method_map[method_name].new(iam)
86
+ else
87
+ @aws_sdk_object[method_name] = @method_map[method_name].new
88
+ end
89
+
90
+ return @aws_sdk_object[method_name]
91
+ end
92
+
93
+ raise ArgumentError, "#{self.class.name} was missing AWS class #{method_name}."
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,14 @@
1
+ module Comodule::Deployment::Helper::Aws::Base
2
+
3
+ def self.included(receiver)
4
+ receiver.send :include, ::Comodule::Deployment::Helper::Base
5
+ receiver.send :include, InstanceMethods
6
+ end
7
+
8
+ module InstanceMethods
9
+
10
+ def aws
11
+ owner.aws
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,146 @@
1
+ module Comodule::Deployment::Helper::Aws::CloudFormation
2
+
3
+ def self.included(receiver)
4
+ receiver.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def cloud_formation
9
+ @cloud_formation ||= ::Comodule::Deployment::Helper::Aws::CloudFormation::Service.new(self)
10
+ end
11
+ end
12
+
13
+ class Service
14
+ include ::Comodule::Deployment::Helper::Aws::Base
15
+
16
+ def cfn
17
+ @cfn ||= aws.cloud_formation
18
+ end
19
+
20
+ def stack_basename
21
+ stack_name = []
22
+ stack_name << (config.stack_name_prefix || owner.project_name)
23
+ stack_name << owner.name
24
+ stack_name.join(?-)
25
+ end
26
+
27
+ def own_stacks
28
+ cfn.stacks.find_all { |stack| stack.name =~ /#{stack_basename}/ }
29
+ end
30
+
31
+ def latest_stack
32
+ filter = -> stack { stack.name.match(/[0-9]*$/)[0].to_i }
33
+ own_stacks.max { |a,b| filter[a] <=> filter[b] }
34
+ end
35
+
36
+ def create_stack(&block)
37
+ if config.upload_secret_files
38
+ puts 'Upload secret files'
39
+ owner.upload_secret_files
40
+ end
41
+
42
+ if config.upload_project
43
+ puts 'Upload project'
44
+ owner.upload_project
45
+ end
46
+
47
+ stack_name = [stack_basename, Time.now.strftime("%Y%m%d")].join(?-)
48
+
49
+ template = validate_template(&block)
50
+
51
+ stack = cfn.stacks.create(stack_name, template)
52
+
53
+ puts "Progress of creation stack: #{stack.name}"
54
+
55
+ status = stack_status_watch(stack)
56
+
57
+ puts "\n!!! #{status} !!!\n"
58
+ end
59
+
60
+ def delete_stack
61
+ stack = latest_stack
62
+
63
+ if !stack || !stack.exists?
64
+ puts "Stack:/#{stack_basename}-[0-9]*/ is not found.\n"
65
+ exit
66
+ end
67
+
68
+ print "You are going to delete stack #{stack.name}. Are you sure? [N/y] "
69
+ confirm = STDIN.gets
70
+ unless confirm =~ /^y(es)?$/
71
+ puts "\nAbort!\n"
72
+ exit
73
+ end
74
+
75
+ stack.delete
76
+
77
+ puts "Progress of deletion stack: #{stack.name}"
78
+
79
+ status = stack_status_watch(stack)
80
+
81
+ puts "\n!!! #{status} !!!\n"
82
+ end
83
+
84
+ def stack_status_watch(stack, interval=10)
85
+ begin
86
+ status = stack.status
87
+ rescue
88
+ return 'Missing stack'
89
+ end
90
+
91
+ first_status = status
92
+ before_status = ""
93
+
94
+ while status == first_status
95
+ if status == before_status
96
+ before_status, status = status, ?.
97
+ else
98
+ before_status = status
99
+ end
100
+
101
+ print status
102
+
103
+ sleep interval
104
+
105
+ begin
106
+ status = stack.status
107
+ rescue
108
+ status = "Missing stack"
109
+ break
110
+ end
111
+ end
112
+
113
+ status
114
+ end
115
+
116
+ def validate_template(&block)
117
+ template = cloud_formation_template(&block)
118
+
119
+ template_path = File.join(owner.test_cloud_formation_dir, 'template.json')
120
+
121
+ File.open(template_path, 'w') do |file|
122
+ file.write template
123
+ end
124
+
125
+ result = cfn.validate_template(template)
126
+
127
+ puts "Validation result:"
128
+ result.each do |key, msg|
129
+ puts " #{key}: #{msg}"
130
+ end
131
+
132
+ template
133
+ end
134
+
135
+ def cloud_formation_template
136
+ if block_given?
137
+ yield config
138
+ end
139
+
140
+ file = File.join(owner.cloud_formation_dir, 'template.json.erb')
141
+ common_file = File.join(owner.common_cloud_formation_dir, 'template.json.erb')
142
+
143
+ owner.render( File.file?(file) ? file : common_file )
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,37 @@
1
+ module Comodule::Deployment::Helper::Aws::Ec2
2
+
3
+ def self.included(receiver)
4
+ receiver.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def ec2
9
+ @ec2 ||= ::Comodule::Deployment::Helper::Aws::Ec2::Service.new(self)
10
+ end
11
+ end
12
+
13
+ class Service
14
+ include ::Comodule::Deployment::Helper::Aws::Base
15
+
16
+ def ec2
17
+ @ec2 ||= aws.ec2
18
+ end
19
+
20
+ def own_images
21
+ ec2.images.with_owner('self')
22
+ end
23
+
24
+ def latest_ami
25
+ images = own_images
26
+ if config.ec2 && config.ec2.ami && config.ec2.ami.prefix
27
+ images = images.find_all { |ami| ami.name =~ /^#{config.ec2.ami.prefix}/ }
28
+
29
+ filter = -> ami { ami.name.match(/[0-9]*$/)[0].to_i }
30
+ images = images.sort do |a, b|
31
+ filter[b] <=> filter[a]
32
+ end
33
+ end
34
+ images.first
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,46 @@
1
+ module Comodule::Deployment::Helper::Aws::Rds
2
+
3
+ def self.included(receiver)
4
+ receiver.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def rds
9
+ @rds ||= ::Comodule::Deployment::Helper::Aws::Rds::Service.new(self)
10
+ end
11
+ end
12
+
13
+ class Service
14
+ include ::Comodule::Deployment::Helper::Aws::Base
15
+
16
+ def db(db_instance_identifier)
17
+ ::Comodule::Deployment::Helper::Aws::Rds::Db.new(owner, db_instance_identifier)
18
+ end
19
+
20
+ def latest_automated_snapshot
21
+ if config.db && config.db.master && !config.db.snapshot_identifier
22
+ config.db.snapshot_identifier = db(config.db.master).latest_automated_snapshot
23
+ end
24
+ end
25
+ end
26
+
27
+ class Db
28
+ include ::Comodule::Deployment::Helper::Aws::Base
29
+
30
+ attr_accessor :db
31
+
32
+ def initialize(platform, db_instance_identifier)
33
+ self.owner = platform
34
+ self.db = aws.rds.db_instances[db_instance_identifier]
35
+ end
36
+
37
+ def latest_automated_snapshot
38
+ snapshot =
39
+ db.snapshots.with_type('automated').sort do |a, b|
40
+ b.created_at <=> a.created_at
41
+ end
42
+
43
+ snapshot.first.db_snapshot_identifier
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,52 @@
1
+ module Comodule::Deployment::Helper::Aws::S3
2
+
3
+ def self.included(receiver)
4
+ receiver.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def s3
9
+ @s3 ||= ::Comodule::Deployment::Helper::Aws::S3::Service.new(self)
10
+ end
11
+ end
12
+
13
+ class Service
14
+ include ::Comodule::Deployment::Helper::Aws::Base
15
+
16
+ def s3
17
+ @s3 ||= aws.s3
18
+ end
19
+
20
+ def bucket_name
21
+ @bucket_name ||= config.s3_bucket
22
+ end
23
+
24
+ def bucket
25
+ return @bucket if @bucket
26
+
27
+ bucket_obj = s3.buckets[bucket_name]
28
+ @bucket =
29
+ if bucket_obj.exists?
30
+ bucket_obj
31
+ else
32
+ s3.buckets.create(bucket_name)
33
+ end
34
+ end
35
+
36
+ def local_to_cloud(local_path)
37
+ local_path.sub(%r|#{owner.project_root}/|, "#{owner.name}/")
38
+ end
39
+
40
+ def cloud_to_local(s3_path)
41
+ s3_path.sub(%r|#{owner.name}/|, "#{owner.project_root}/")
42
+ end
43
+
44
+ def public_url(s3_path)
45
+ s3.bucket[s3_path].public_url secure: true
46
+ end
47
+
48
+ def local_to_public_url(local_path)
49
+ public_url local_to_cloud(local_path)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,111 @@
1
+ module Comodule::Deployment::Helper::Aws::Ssl
2
+
3
+ def self.included(receiver)
4
+ receiver.send :include, InstanceMethods
5
+ end
6
+
7
+ module InstanceMethods
8
+ def ssl
9
+ @ssl ||= ::Comodule::Deployment::Helper::Aws::Ssl::Service.new(self)
10
+ end
11
+ end
12
+
13
+ class Service
14
+ include ::Comodule::Deployment::Helper::Aws::Base
15
+
16
+ def iam
17
+ aws.iam
18
+ end
19
+
20
+ def describe
21
+ puts
22
+ iam.server_certificates.each do |cert|
23
+ inspect_certificate cert
24
+ end
25
+ end
26
+
27
+ def delete
28
+ name = config.ssl.name
29
+ cert = iam.server_certificates[name]
30
+ puts "I am going to delete this server certificate #{name}. Are you sure? [N/y] "
31
+ confirm = STDIN.gets
32
+ unless confirm =~ /^y(es)?$/
33
+ puts "\nAbort!\n"
34
+ return
35
+ end
36
+ puts cert.delete
37
+ end
38
+
39
+ def upload
40
+ body = File.open(owner.file_path(config.ssl.dir, config.ssl.body_file)).read
41
+ chain = File.open(owner.file_path(config.ssl.dir, config.ssl.chain_file)).read
42
+ key = File.open(owner.file_path(config.ssl.dir, config.ssl.key_file)).read
43
+ puts "body:"
44
+ puts body
45
+ puts
46
+ puts "chain:"
47
+ puts chain
48
+ puts
49
+ puts "key"
50
+ puts key
51
+ puts
52
+ puts "AWS IAM server certificate name: #{config.ssl.name}"
53
+ puts "I am going to upload this server certificate to AWS IAM. Are you sure? [N/y] "
54
+ confirm = STDIN.gets
55
+ unless confirm =~ /^y(es)?$/
56
+ puts "\nAbort!\n"
57
+ return
58
+ end
59
+
60
+ cert = iam.server_certificates.create(
61
+ certificate_body: body,
62
+ name: config.ssl.name,
63
+ path: config.ssl.path || ?/,
64
+ private_key: key,
65
+ certificate_chain: chain
66
+ )
67
+
68
+ unless cert
69
+ 'Failed!'
70
+ return
71
+ end
72
+
73
+ puts
74
+ puts "Success:"
75
+ inspect_certificate cert
76
+ end
77
+
78
+ def inspect_certificate(cert)
79
+ inspect_certificate_summary cert
80
+ inspect_certificate_body cert
81
+ inspect_certificate_chain cert
82
+ end
83
+
84
+ def inspect_certificate_summary(cert)
85
+ puts "arn: #{cert.arn}"
86
+ puts "id: #{cert.id}"
87
+ puts "name: #{cert.name}"
88
+ puts "path: #{cert.path}"
89
+ puts "upload_date: #{cert.upload_date}"
90
+ puts
91
+ end
92
+
93
+ def inspect_certificate_body(cert)
94
+ puts "body:"
95
+ puts cert.certificate_body
96
+ puts
97
+ end
98
+
99
+ def inspect_certificate_chain(cert)
100
+ puts "chain:"
101
+ puts cert.certificate_chain
102
+ puts
103
+ end
104
+
105
+ def find
106
+ iam.server_certificates.find do |cert|
107
+ cert.name == config.ssl.name
108
+ end
109
+ end
110
+ end
111
+ end