class Kontena::Plugin::Cloud::Node::ShellCommand
Public Instance Methods
create_service(service_name, node_name)
click to toggle source
# File lib/kontena/plugin/cloud/node/shell_command.rb, line 40 def create_service(service_name, node_name) data = { name: service_name, image: 'kontena/nsenter:latest', stateful: false, cmd: ['sleep', '60000'], pid: 'host', privileged: true, affinity: [ "node==#{node_name}" ], env: [ "TERM=xterm" ] } service = client.post("grids/#{current_grid}/services", data) deployment = client.post("services/#{service['id']}/deploy", {}) until deployment['finished_at'] do sleep 1 deployment = client.get("services/#{service['id']}/deploys/#{deployment['id']}", {}) end service end
execute()
click to toggle source
# File lib/kontena/plugin/cloud/node/shell_command.rb, line 16 def execute service_name = "#{name}-shell-#{rand(1..10_000)}" service = nil spinner "Creating shell session to node #{pastel.cyan(name)}" do service = create_service(service_name, name) end exec_opts = ['-i'] exec_opts << 't' if STDIN.tty? if cmd_list.empty? exec_command = '' else exec_command = "-c \"#{cmd_list.join(' ')}\"" end Kontena.run!([ 'service', 'exec', exec_opts.join(''), '--shell', service_name, "nsenter --target 1 --mount --uts --net --pid -- su #{exec_command} - core" ]) ensure remove_service(service) if service end
remove_service(service)
click to toggle source
# File lib/kontena/plugin/cloud/node/shell_command.rb, line 65 def remove_service(service) client.delete("services/#{service['id']}", {}) end