lib/datapimp/cli/create.rb in datapimp-1.2.9 vs lib/datapimp/cli/create.rb in datapimp-1.2.10
- old
+ new
@@ -129,5 +129,100 @@
distribution.save
end
end
end
+
+# bin/datapimp create cf protected distribution --name z-test --bucket 'warbler.architects.io' --error-bucket z-test-error-bucket --domains hola.com,hello.com --app-url https://blueprints.architects.io --origin-access-identity E2RCKW2LSUD589 --trace
+command 'create cf protected distribution' do |c|
+ c.syntax = "datapimp create cf protected distribution"
+ c.description = "create a cloudfront PROTECTED distribution using signed cookies"
+
+ Datapimp::Cli.accepts_keys_for(c, :amazon)
+
+ c.option '--name NAME', String, 'The name for this distribution'
+ c.option '--bucket NAME', String, 'The name of the *existing* bucket that will provide the content'
+ c.option '--error-bucket NAME', String, 'The name of the *existing* bucket that will hold the errors folder and 403.html file'
+ c.option '--domains DOMAINS', Array, 'What domains will be pointing to this bucket?'
+ c.option '--app-url NAME', String, 'The url of the AUTH Applitacion'
+ c.option '--origin-access-identity NAME', String, 'The Origin Access Identity to be used to create the distribution'
+
+ c.action do |args, options|
+ cf = Datapimp::Sync.amazon.cloud_formation
+
+ template_body = File.read(File.join(File.dirname(__FILE__), '..', 'templates/cloudfront', 'aws_cloudfront_distribution_template.json'))
+
+ res = cf.create_stack(
+ stack_name: options.name,
+ template_body: template_body,
+ # disable_rollback: true,
+ parameters: [
+ {
+ parameter_key: "AppLocation",
+ parameter_value: URI.parse(options.app_url).host,
+ use_previous_value: true
+ },
+ {
+ parameter_key: "BucketName",
+ parameter_value: options.bucket,
+ use_previous_value: true
+ },
+ {
+ parameter_key: "ErrorBucketName",
+ parameter_value: options.error_bucket,
+ use_previous_value: true
+ },
+ {
+ parameter_key: "Aliases",
+ parameter_value: options.domains.join(','),
+ use_previous_value: true
+ },
+ {
+ parameter_key: "DistributionComment",
+ parameter_value: "#{options.name} distribution",
+ use_previous_value: true
+ },
+ {
+ parameter_key: "OriginAccessIdentity",
+ parameter_value: options.origin_access_identity,
+ use_previous_value: true
+ }
+ ]
+ )
+
+ begin
+ puts "Waiting for stack creation process to finish ..."
+ sleep 30
+ stack = cf.describe_stacks(stack_name: options.name).stacks.first
+ end while stack.stack_status == "CREATE_IN_PROGRESS"
+
+ if stack.stack_status != "CREATE_COMPLETE"
+ puts "stack failed to create"
+ exit 1
+ end
+
+ s3 = Aws::S3::Client.new(region: cf.config.region)
+ template_body_403 = ERB.new(File.read(File.join(File.dirname(__FILE__), '../templates/cloudfront', '403.html.erb'))).result(binding)
+
+ # S3 403.html error file
+ begin
+ s3.put_object(
+ bucket: options.error_bucket,
+ key: 'errors/403.html',
+ content_type: 'text/html',
+ cache_control: 'max-age=300',
+ acl: 'public-read',
+ body: template_body_403
+ )
+ rescue Aws::S3::Errors::NoSuchBucket
+ error_bucket = "#{options.error_bucket}.s3.amazonaws.com"
+ s3.put_object(
+ bucket: error_bucket,
+ key: 'errors/403.html',
+ content_type: 'text/html',
+ cache_control: 'max-age=300',
+ acl: 'public-read',
+ body: template_body_403
+ )
+ end
+ end
+end