broadside 3.2.0 → 3.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/CHANGELOG.md +6 -0
- data/README.md +6 -6
- data/lib/broadside/command.rb +23 -7
- data/lib/broadside/gli/commands.rb +18 -5
- data/lib/broadside/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 899d3a593ec0af2a6d0bf8ac1d57c70effc37ca5
|
4
|
+
data.tar.gz: 51a9d9276948eaf1beef32e2392bb66b0d4bd372
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c828f7cf4ae5c293265af3e8a40955695fd3cd6b346a5628eb716a253fb55216dfb57ca55c34fccc3c98d7b965d44810ade651ed513486b9b8b217cefcaadf7
|
7
|
+
data.tar.gz: fcd3efac4301a37d48dab29b91df591a349b2cdd953dbb015d69008c7bd4bd3cbaa7d660448c63f49c8a55b6558c0814c3161deec48bcdafda5fb598999f8ae6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 3.3.0
|
2
|
+
-- Add `execute` command to execute arbitrary bash inside a running container
|
3
|
+
-- Add `--all` flag to `execute` to run a command on all containers
|
4
|
+
-- Always turn on TTY interaction when running remote commands.
|
5
|
+
-- Fix bug with command being an array instead of string
|
6
|
+
|
1
7
|
# 3.2.0
|
2
8
|
-- Add ability to execute a bash command on a container
|
3
9
|
-- Output actual bash command being run when log level is debug.
|
data/README.md
CHANGED
@@ -15,7 +15,7 @@ Broadside does _not_ attempt to handle operational tasks like infrastructure set
|
|
15
15
|
- **Inject** environment variables into ECS containers from local configuration files
|
16
16
|
- **Launch a bash shell** on container in the cluster
|
17
17
|
- **SSH** directly onto a host running a container
|
18
|
-
- **Execute** an arbitrary shell command on a container
|
18
|
+
- **Execute** an arbitrary shell command on a container (or all containers)
|
19
19
|
- **Tail logs** of a running container
|
20
20
|
- **Scale** an existing deployment on the fly
|
21
21
|
|
@@ -31,17 +31,17 @@ Broadside.configure do |config|
|
|
31
31
|
config.targets = {
|
32
32
|
production_web: {
|
33
33
|
scale: 7,
|
34
|
-
command:
|
34
|
+
command: %w(bundle exec unicorn -c config/unicorn.conf.rb),
|
35
35
|
env_file: '.env.production'
|
36
36
|
predeploy_commands: [
|
37
|
-
|
38
|
-
|
37
|
+
%w(bundle exec rake db:migrate),
|
38
|
+
%w(bundle exec rake data:migrate)
|
39
39
|
]
|
40
40
|
},
|
41
41
|
# If you have multiple images or clusters, you can configure them per target
|
42
42
|
staging_web: {
|
43
43
|
scale: 1,
|
44
|
-
command:
|
44
|
+
command: %w(bundle exec puma),
|
45
45
|
env_file: '.env.staging',
|
46
46
|
tag: 'latest', # Set a default tag for this target
|
47
47
|
cluster: 'staging-cluster', # Overrides config.aws.ecs_default_cluster
|
@@ -49,7 +49,7 @@ Broadside.configure do |config|
|
|
49
49
|
},
|
50
50
|
json_stream: {
|
51
51
|
scale: 1,
|
52
|
-
command:
|
52
|
+
command: %w(java -cp *:. path.to.MyClass),
|
53
53
|
# This target has a task_definition and service config which you use to bootstrap a new AWS Service
|
54
54
|
service_config: { deployment_configuration: { minimum_healthy_percent: 0.5 } },
|
55
55
|
task_definition_config: { container_definitions: [ { cpu: 1, memory: 2000, } ] }
|
data/lib/broadside/command.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'open3'
|
1
2
|
require 'pp'
|
2
3
|
require 'shellwords'
|
3
4
|
require 'tty-table'
|
@@ -108,13 +109,24 @@ module Broadside
|
|
108
109
|
end
|
109
110
|
|
110
111
|
def bash(options)
|
111
|
-
command = options[:command] || BASH
|
112
112
|
target = Broadside.config.get_target_by_name!(options[:target])
|
113
|
+
cmd = "docker exec -i -t `#{docker_ps_cmd(target.family)}` #{BASH}"
|
113
114
|
ip = get_running_instance_ip!(target, *options[:instance])
|
115
|
+
info "Executing #{BASH} on running container at #{ip}..."
|
116
|
+
|
117
|
+
system_exec(Broadside.config.ssh_cmd(ip, tty: true) + " '#{cmd}'")
|
118
|
+
end
|
119
|
+
|
120
|
+
def execute(options)
|
121
|
+
command = options[:command]
|
122
|
+
target = Broadside.config.get_target_by_name!(options[:target])
|
114
123
|
cmd = "docker exec -i -t `#{docker_ps_cmd(target.family)}` #{command}"
|
115
|
-
|
124
|
+
ips = options[:all] ? running_instances(target) : [get_running_instance_ip!(target, *options[:instance])]
|
116
125
|
|
117
|
-
|
126
|
+
ips.each do |ip|
|
127
|
+
info "Executing '#{command}' on running container at #{ip}..."
|
128
|
+
Open3.popen3(Broadside.config.ssh_cmd(ip, tty: true) + " '#{cmd}'") { |_, stdout, _, _| puts stdout.read }
|
129
|
+
end
|
118
130
|
end
|
119
131
|
|
120
132
|
private
|
@@ -125,16 +137,20 @@ module Broadside
|
|
125
137
|
end
|
126
138
|
|
127
139
|
def get_running_instance_ip!(target, instance_index = 0)
|
128
|
-
|
129
|
-
running_instances = EcsManager.get_running_instance_ips!(target.cluster, target.family)
|
140
|
+
instances = running_instances(target)
|
130
141
|
|
131
142
|
begin
|
132
|
-
|
143
|
+
instances.fetch(instance_index)
|
133
144
|
rescue IndexError
|
134
|
-
raise Error, "There are only #{
|
145
|
+
raise Error, "There are only #{instances.size} instances; index #{instance_index} does not exist"
|
135
146
|
end
|
136
147
|
end
|
137
148
|
|
149
|
+
def running_instances(target)
|
150
|
+
EcsManager.check_service_and_task_definition_state!(target)
|
151
|
+
EcsManager.get_running_instance_ips!(target.cluster, target.family)
|
152
|
+
end
|
153
|
+
|
138
154
|
def docker_ps_cmd(family)
|
139
155
|
"docker ps -n 1 --quiet --filter name=#{Shellwords.shellescape(family)}"
|
140
156
|
end
|
@@ -91,19 +91,32 @@ command :ssh do |ssh|
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
desc 'Establish a shell
|
94
|
+
desc 'Establish a shell inside a running container.'
|
95
95
|
command :bash do |bash|
|
96
96
|
add_command_flags(bash)
|
97
97
|
|
98
|
-
bash.desc 'bash command to run (wrap argument in quotes)'
|
99
|
-
bash.arg_name 'BASH_COMMAND'
|
100
|
-
bash.flag [:c, :command], type: Array
|
101
|
-
|
102
98
|
bash.action do |_, options, _|
|
103
99
|
Broadside::Command.bash(options)
|
104
100
|
end
|
105
101
|
end
|
106
102
|
|
103
|
+
desc 'Execute a bash command inside a running container.'
|
104
|
+
command :execute do |execute|
|
105
|
+
add_command_flags(execute)
|
106
|
+
|
107
|
+
execute.desc 'bash command to run (wrap argument in quotes)'
|
108
|
+
execute.arg_name 'BASH_COMMAND'
|
109
|
+
execute.flag [:c, :command], type: String, required: true
|
110
|
+
|
111
|
+
execute.desc 'run on all containers in series'
|
112
|
+
execute.arg_name 'ALL_CONTAINERS'
|
113
|
+
execute.switch :all, negatable: false
|
114
|
+
|
115
|
+
execute.action do |_, options, _|
|
116
|
+
Broadside::Command.execute(options)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
107
120
|
desc 'Deploy your application.'
|
108
121
|
command :deploy do |d|
|
109
122
|
d.desc 'Deploys WITHOUT running predeploy commands'
|
data/lib/broadside/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: broadside
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Leung
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-08-
|
12
|
+
date: 2017-08-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|