easy_eb 0.2.0 → 0.3.0
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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/easy_eb/cli.rb +14 -5
- data/lib/easy_eb/dns.rb +53 -0
- data/lib/easy_eb/environment.rb +5 -4
- data/lib/easy_eb/ssh.rb +2 -1
- data/lib/easy_eb/version.rb +1 -1
- data/lib/easy_eb.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de397e90eac0d556add92272f97f6a114bc7e672969965ba3bf1b01bd043f928
|
4
|
+
data.tar.gz: dbfb95e0c53d3e3cf9186eae8c1ce3c771d75307ebbfee00e7084e0ce46a52c3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c3f9969320c8983f85f28361122d96eb07fc3539be7e98b7f1ee5e060774cde047958b02eae06e8a7cf81af68ea23a9f7067a9f7864fa419a9ebde37e1d0a56
|
7
|
+
data.tar.gz: 3d60ad3a820cb8564c806ace141bf5ea4cdc670a4043a9618cb62290935a9d0ca4f2ad22ffddeb59259b4d3f37c8c1fba200c37e11f9a234adb4cb20534079d7
|
data/Gemfile.lock
CHANGED
data/lib/easy_eb/cli.rb
CHANGED
@@ -4,22 +4,31 @@ module EasyEb
|
|
4
4
|
class CLI < Thor
|
5
5
|
desc "create-environment TARGET [--slug SLUG]", "Creates an EB environment for the target stack (e.g. staging or production) with a unique slug appended"
|
6
6
|
option :slug, type: :string
|
7
|
+
option :region, type: :string
|
7
8
|
def create_environment(target)
|
8
9
|
EasyEb::Environment.create!(target: target, **options.transform_keys(&:to_sym))
|
9
10
|
end
|
10
11
|
|
12
|
+
desc "dns ENVIRONMENT DOMAIN", "Updates or creates a DNS record to point at the specified environment"
|
13
|
+
option :slug, type: :string
|
14
|
+
option :region, type: :string
|
15
|
+
def dns(environment, domain)
|
16
|
+
EasyEb::Dns.create!(environment: environment, domain: domain, **options.transform_keys(&:to_sym))
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "install", "Install essential eb helpers to be checked into your repo"
|
20
|
+
def install
|
21
|
+
EasyEb::Generators::Install.start
|
22
|
+
end
|
23
|
+
|
11
24
|
desc "ssh [--environment ENVIRONMENT] [COMMAND]", "Intelligent ssh for elastic beanstalk"
|
12
25
|
option :environment, type: :string
|
26
|
+
option :region, type: :string
|
13
27
|
option :ssh, type: :string
|
14
28
|
option :eb_flags, type: :string
|
15
29
|
option :env_command, type: :string
|
16
30
|
def ssh(*command)
|
17
31
|
EasyEb::Ssh.start!(command: command.any? ? command.join(" ") : nil, **options.transform_keys(&:to_sym))
|
18
32
|
end
|
19
|
-
|
20
|
-
desc "install", "Install essential eb helpers to be checked into your repo"
|
21
|
-
def install
|
22
|
-
EasyEb::Generators::Install.start
|
23
|
-
end
|
24
33
|
end
|
25
34
|
end
|
data/lib/easy_eb/dns.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module EasyEb
|
4
|
+
# Data sourced from https://docs.aws.amazon.com/general/latest/gr/elasticbeanstalk.html
|
5
|
+
HOSTED_ZONES_BY_REGION = {
|
6
|
+
"us-east-1" => "Z117KPS5GTRQ2G",
|
7
|
+
"us-east-2" => "Z14LCN19Q5QHIC",
|
8
|
+
"us-west-1" => "Z1LQECGX5PH1X",
|
9
|
+
"us-west-2" => "Z38NKT9BP95V3O",
|
10
|
+
"eu-west-2" => "Z1GKAAAUGATPF1"
|
11
|
+
}
|
12
|
+
|
13
|
+
class Dns
|
14
|
+
def self.create!(environment:, domain:, region: nil)
|
15
|
+
root_domain = /(?<root>\w+\.\w+)\.?$/.match(domain)&.then { |results| results[:root] }
|
16
|
+
raise "Must supply valid domain name." unless root_domain
|
17
|
+
|
18
|
+
region_flag = region && " --region #{region}"
|
19
|
+
|
20
|
+
puts hosted_zones = JSON.parse(`aws route53 list-hosted-zones`)
|
21
|
+
hosted_zone = hosted_zones.fetch("HostedZones").find { |zone| zone.fetch("Name").start_with?(root_domain) }
|
22
|
+
hosted_zone_id = hosted_zone["Id"]
|
23
|
+
|
24
|
+
puts environments = JSON.parse(`aws#{region_flag} elasticbeanstalk describe-environments --environment-names #{environment}`)
|
25
|
+
environment_cname = environments.dig("Environments", 0, "CNAME")
|
26
|
+
environment_region = /(?<region>[1-9a-z-]+).elasticbeanstalk.com$/.match(environment_cname)[:region]
|
27
|
+
|
28
|
+
change_batch = {
|
29
|
+
Comment: "Point #{domain} to Elastic Beanstalk Environment #{environment}",
|
30
|
+
Changes: [
|
31
|
+
{
|
32
|
+
Action: :UPSERT,
|
33
|
+
ResourceRecordSet: {
|
34
|
+
Name: domain,
|
35
|
+
Type: :A,
|
36
|
+
AliasTarget: {
|
37
|
+
HostedZoneId: HOSTED_ZONES_BY_REGION[environment_region],
|
38
|
+
DNSName: environment_cname,
|
39
|
+
EvaluateTargetHealth: false
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
]
|
44
|
+
}
|
45
|
+
|
46
|
+
system(
|
47
|
+
"aws route53 change-resource-record-sets --hosted-zone-id #{hosted_zone_id} --change-batch '#{change_batch.to_json}'".tap do |command|
|
48
|
+
puts "Running… \"#{command}\""
|
49
|
+
end
|
50
|
+
)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/easy_eb/environment.rb
CHANGED
@@ -5,7 +5,8 @@ module EasyEb
|
|
5
5
|
class Environment
|
6
6
|
SLUGS = JSON.parse(File.read("#{__dir__}/firstNames.json")).fetch("firstNames")
|
7
7
|
|
8
|
-
def self.create!(target:, slug: SLUGS.sample)
|
8
|
+
def self.create!(target:, region: nil, slug: SLUGS.sample)
|
9
|
+
region_flag = region && " --region #{region}"
|
9
10
|
eb_config = YAML.safe_load(File.read(".elasticbeanstalk/config.yml"))
|
10
11
|
application_name = eb_config.dig("global", "application_name")
|
11
12
|
|
@@ -17,11 +18,11 @@ module EasyEb
|
|
17
18
|
raise "Failed to create a valid Elastic Beanstalk environment with name '#{environment_name}'. Must be 40 characters or less."
|
18
19
|
end
|
19
20
|
|
20
|
-
system("eb config put #{target}", exception: true)
|
21
|
-
system("eb create #{environment_name} --cfg #{target}", exception: true)
|
21
|
+
system("eb config put #{target}#{region_flag}", exception: true)
|
22
|
+
system("eb create #{environment_name} --cfg #{target}#{region_flag}", exception: true)
|
22
23
|
|
23
24
|
puts("Success! Now you may want to run elastic beanstalk commands like this:")
|
24
|
-
puts("eb deploy #{environment_name}")
|
25
|
+
puts("eb deploy #{environment_name}#{region_flag}")
|
25
26
|
end
|
26
27
|
end
|
27
28
|
end
|
data/lib/easy_eb/ssh.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module EasyEb
|
2
2
|
class Ssh
|
3
|
-
def self.start!(environment: nil, command: nil, ssh: nil, eb_flags: nil, env_command: "bin/ebenv")
|
3
|
+
def self.start!(environment: nil, command: nil, ssh: nil, eb_flags: nil, env_command: "bin/ebenv", region: nil)
|
4
4
|
bash_args = command && "-c \\\"#{env_command} #{command}\\\""
|
5
5
|
tty_flag = command && "-t"
|
6
6
|
ssh_flag = ssh && "-e #{ssh}"
|
@@ -10,6 +10,7 @@ module EasyEb
|
|
10
10
|
].compact.join(" ")
|
11
11
|
|
12
12
|
args = [
|
13
|
+
region && "--region #{region}",
|
13
14
|
eb_flags,
|
14
15
|
environment,
|
15
16
|
ssh_flag,
|
data/lib/easy_eb/version.rb
CHANGED
data/lib/easy_eb.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: easy_eb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kaleb Lape
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -45,6 +45,7 @@ files:
|
|
45
45
|
- exe/ezeb
|
46
46
|
- lib/easy_eb.rb
|
47
47
|
- lib/easy_eb/cli.rb
|
48
|
+
- lib/easy_eb/dns.rb
|
48
49
|
- lib/easy_eb/environment.rb
|
49
50
|
- lib/easy_eb/firstNames.json
|
50
51
|
- lib/easy_eb/generators/install.rb
|