From 05237556fe576c01d11913f7073ab366faee9477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20H=C3=A4feli?= Date: Sun, 14 Jul 2019 17:24:02 +0200 Subject: [PATCH 1/5] :whale: Add new Docker Swarm Tasks (node ls, rm, update; service scale) --- tasks/node_ls.json | 15 +++++++++++++++ tasks/node_ls.rb | 30 ++++++++++++++++++++++++++++++ tasks/node_rm.json | 15 +++++++++++++++ tasks/node_rm.rb | 29 +++++++++++++++++++++++++++++ tasks/node_update.json | 19 +++++++++++++++++++ tasks/node_update.rb | 31 +++++++++++++++++++++++++++++++ tasks/service_scale.json | 19 +++++++++++++++++++ tasks/service_scale.rb | 31 +++++++++++++++++++++++++++++++ 8 files changed, 189 insertions(+) create mode 100644 tasks/node_ls.json create mode 100755 tasks/node_ls.rb create mode 100644 tasks/node_rm.json create mode 100644 tasks/node_rm.rb create mode 100644 tasks/node_update.json create mode 100644 tasks/node_update.rb create mode 100644 tasks/service_scale.json create mode 100644 tasks/service_scale.rb diff --git a/tasks/node_ls.json b/tasks/node_ls.json new file mode 100644 index 00000000..f62075e9 --- /dev/null +++ b/tasks/node_ls.json @@ -0,0 +1,15 @@ + +{ + "description": "List nodes in the swarm", + "input_method": "stdin", + "parameters": { + "filter": { + "description": "Filter output based on conditions provided", + "type": "Optional[String[1]]" + }, + "quiet": { + "description": "Only display IDs", + "type": "Optional[Boolean]" + } + } +} diff --git a/tasks/node_ls.rb b/tasks/node_ls.rb new file mode 100755 index 00000000..f2757105 --- /dev/null +++ b/tasks/node_ls.rb @@ -0,0 +1,30 @@ +#!/opt/puppetlabs/puppet/bin/ruby +# frozen_string_literal: true + +require 'json' +require 'open3' +require 'puppet' + +def node_ls(filter,quiet) + cmd_string = 'docker node ls' + cmd_string += " --filter=#{filter}" unless filter.nil? + cmd_string += ' --quiet' unless quiet.nil? + + stdout, stderr, status = Open3.capture3(cmd_string) + raise Puppet::Error, "stderr: '#{stderr}'" if status != 0 + stdout.strip +end + +params = JSON.parse(STDIN.read) +filter = params['filter'] +quiet = params['quiet'] + + +begin + result = node_ls(filter,quiet) + puts result + exit 0 +rescue Puppet::Error => e + puts(status: 'failure', error: e.message) + exit 1 +end diff --git a/tasks/node_rm.json b/tasks/node_rm.json new file mode 100644 index 00000000..10127fc0 --- /dev/null +++ b/tasks/node_rm.json @@ -0,0 +1,15 @@ + +{ + "description": "Update a node", + "input_method": "stdin", + "parameters": { + "force": { + "description": "Force remove a node from the swarm", + "type": "Optional[Boolean]" + }, + "node": { + "description": "Hostname or ID of the node in the swarm", + "type": "String[1]" + } + } +} diff --git a/tasks/node_rm.rb b/tasks/node_rm.rb new file mode 100644 index 00000000..f9742de2 --- /dev/null +++ b/tasks/node_rm.rb @@ -0,0 +1,29 @@ +#!/opt/puppetlabs/puppet/bin/ruby +# frozen_string_literal: true + +require 'json' +require 'open3' +require 'puppet' + +def node_rm(force,node) + cmd_string = 'docker node rm' + cmd_string += ' --force' unless force.nil? + cmd_string += " #{node}" unless node.nil? + + stdout, stderr, status = Open3.capture3(cmd_string) + raise Puppet::Error, "stderr: '#{stderr}'" if status != 0 + stdout.strip +end + +params = JSON.parse(STDIN.read) +force = params['force'] +node = params['node'] + +begin + result = node_rm(force,node) + puts result + exit 0 +rescue Puppet::Error => e + puts(status: 'failure', error: e.message) + exit 1 +end diff --git a/tasks/node_update.json b/tasks/node_update.json new file mode 100644 index 00000000..4f5a775f --- /dev/null +++ b/tasks/node_update.json @@ -0,0 +1,19 @@ + +{ + "description": "Update a node", + "input_method": "stdin", + "parameters": { + "availability": { + "description": "Availability of the node", + "type": "Optional[Enum['active', 'pause', 'drain']]" + }, + "role": { + "description": "Role of the node", + "type": "Optional[Enum['manager', 'worker']]" + }, + "node": { + "description": "Hostname or ID of the node in the swarm", + "type": "String[1]" + } + } +} diff --git a/tasks/node_update.rb b/tasks/node_update.rb new file mode 100644 index 00000000..ab9263fe --- /dev/null +++ b/tasks/node_update.rb @@ -0,0 +1,31 @@ +#!/opt/puppetlabs/puppet/bin/ruby +# frozen_string_literal: true + +require 'json' +require 'open3' +require 'puppet' + +def node_update(availability,role,node) + cmd_string = 'docker node update' + cmd_string += " --availability #{availability}" unless availability.nil? + cmd_string += " --role #{role}" unless role.nil? + cmd_string += " #{node}" unless node.nil? + + stdout, stderr, status = Open3.capture3(cmd_string) + raise Puppet::Error, "stderr: '#{stderr}'" if status != 0 + stdout.strip +end + +params = JSON.parse(STDIN.read) +availability = params['availability'] +role = params['role'] +node = params['node'] + +begin + result = node_update(availability,role,node) + puts result + exit 0 +rescue Puppet::Error => e + puts(status: 'failure', error: e.message) + exit 1 +end diff --git a/tasks/service_scale.json b/tasks/service_scale.json new file mode 100644 index 00000000..5b0c84c2 --- /dev/null +++ b/tasks/service_scale.json @@ -0,0 +1,19 @@ + +{ + "description": "Scale one replicated service", + "input_method": "stdin", + "parameters": { + "service": { + "description": "Name or ID of the service", + "type": "String[1]" + }, + "scale": { + "description": "Number of replicas", + "type": "Integer" + }, + "detatch": { + "description": "Exit immediately instead of waiting for the service to converge", + "type": "Optional[Boolean]" + } + } +} diff --git a/tasks/service_scale.rb b/tasks/service_scale.rb new file mode 100644 index 00000000..a2bcd3c6 --- /dev/null +++ b/tasks/service_scale.rb @@ -0,0 +1,31 @@ +#!/opt/puppetlabs/puppet/bin/ruby +# frozen_string_literal: true + +require 'json' +require 'open3' +require 'puppet' + +def service_scale(service,scale,detach) + cmd_string = 'docker service scale' + cmd_string += " #{service}" unless service.nil? + cmd_string += "=#{scale}" unless scale.nil? + cmd_string += " -d" unless detach.nil? + + stdout, stderr, status = Open3.capture3(cmd_string) + raise Puppet::Error, "stderr: '#{stderr}'" if status != 0 + stdout.strip +end + +params = JSON.parse(STDIN.read) +service = params['service'] +scale = params['scale'] +detach = params['detach'] + +begin + result = service_scale(service,scale,detach) + puts result + exit 0 +rescue Puppet::Error => e + puts(status: 'failure', error: e.message) + exit 1 +end From 01e0c400828a662a81af95d52dc45bd0f3fecd0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20H=C3=A4feli?= Date: Sun, 14 Jul 2019 17:29:35 +0200 Subject: [PATCH 2/5] :ambulance: asdf --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7ef5a50..55b8d950 100755 --- a/README.md +++ b/README.md @@ -820,7 +820,7 @@ Node left the swarm. Ran on 1 node in 6.16 seconds ``` - +To bla ### Docker services Docker services create distributed applications across multiple swarm nodes. Each Docker service replicates a set of containers across the swarm. From 1470d038adcf49cbab0ef03bddd21227d7972100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20H=C3=A4feli?= Date: Wed, 31 Jul 2019 14:37:21 +0200 Subject: [PATCH 3/5] :rotating_light: Fix linter warnings --- tasks/node_ls.rb | 5 ++--- tasks/node_rm.rb | 4 ++-- tasks/node_update.rb | 4 ++-- tasks/service_scale.rb | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/tasks/node_ls.rb b/tasks/node_ls.rb index f2757105..54294a28 100755 --- a/tasks/node_ls.rb +++ b/tasks/node_ls.rb @@ -5,7 +5,7 @@ require 'open3' require 'puppet' -def node_ls(filter,quiet) +def node_ls(filter, quiet) cmd_string = 'docker node ls' cmd_string += " --filter=#{filter}" unless filter.nil? cmd_string += ' --quiet' unless quiet.nil? @@ -19,9 +19,8 @@ def node_ls(filter,quiet) filter = params['filter'] quiet = params['quiet'] - begin - result = node_ls(filter,quiet) + result = node_ls(filter, quiet) puts result exit 0 rescue Puppet::Error => e diff --git a/tasks/node_rm.rb b/tasks/node_rm.rb index f9742de2..9b92a576 100644 --- a/tasks/node_rm.rb +++ b/tasks/node_rm.rb @@ -5,7 +5,7 @@ require 'open3' require 'puppet' -def node_rm(force,node) +def node_rm(force, node) cmd_string = 'docker node rm' cmd_string += ' --force' unless force.nil? cmd_string += " #{node}" unless node.nil? @@ -20,7 +20,7 @@ def node_rm(force,node) node = params['node'] begin - result = node_rm(force,node) + result = node_rm(force, node) puts result exit 0 rescue Puppet::Error => e diff --git a/tasks/node_update.rb b/tasks/node_update.rb index ab9263fe..69340177 100644 --- a/tasks/node_update.rb +++ b/tasks/node_update.rb @@ -5,7 +5,7 @@ require 'open3' require 'puppet' -def node_update(availability,role,node) +def node_update(availability, role, node) cmd_string = 'docker node update' cmd_string += " --availability #{availability}" unless availability.nil? cmd_string += " --role #{role}" unless role.nil? @@ -22,7 +22,7 @@ def node_update(availability,role,node) node = params['node'] begin - result = node_update(availability,role,node) + result = node_update(availability, role, node) puts result exit 0 rescue Puppet::Error => e diff --git a/tasks/service_scale.rb b/tasks/service_scale.rb index a2bcd3c6..f954316a 100644 --- a/tasks/service_scale.rb +++ b/tasks/service_scale.rb @@ -5,11 +5,11 @@ require 'open3' require 'puppet' -def service_scale(service,scale,detach) +def service_scale(service, scale, detach) cmd_string = 'docker service scale' cmd_string += " #{service}" unless service.nil? cmd_string += "=#{scale}" unless scale.nil? - cmd_string += " -d" unless detach.nil? + cmd_string += ' -d' unless detach.nil? stdout, stderr, status = Open3.capture3(cmd_string) raise Puppet::Error, "stderr: '#{stderr}'" if status != 0 @@ -22,7 +22,7 @@ def service_scale(service,scale,detach) detach = params['detach'] begin - result = service_scale(service,scale,detach) + result = service_scale(service, scale, detach) puts result exit 0 rescue Puppet::Error => e From 8efe0f3c2fee728dbdf671d1306cbae92def68bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20H=C3=A4feli?= Date: Wed, 31 Jul 2019 14:41:03 +0200 Subject: [PATCH 4/5] :rotating_light: Fix file permissions --- tasks/node_rm.rb | 0 tasks/node_update.rb | 0 tasks/service_scale.rb | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tasks/node_rm.rb mode change 100644 => 100755 tasks/node_update.rb mode change 100644 => 100755 tasks/service_scale.rb diff --git a/tasks/node_rm.rb b/tasks/node_rm.rb old mode 100644 new mode 100755 diff --git a/tasks/node_update.rb b/tasks/node_update.rb old mode 100644 new mode 100755 diff --git a/tasks/service_scale.rb b/tasks/service_scale.rb old mode 100644 new mode 100755 From bf8dc5c2a31f44191bae48127e84fa8246534ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20H=C3=A4feli?= Date: Wed, 31 Jul 2019 15:29:48 +0200 Subject: [PATCH 5/5] :memo: Remove typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55b8d950..b7ef5a50 100755 --- a/README.md +++ b/README.md @@ -820,7 +820,7 @@ Node left the swarm. Ran on 1 node in 6.16 seconds ``` -To bla + ### Docker services Docker services create distributed applications across multiple swarm nodes. Each Docker service replicates a set of containers across the swarm.