swarm_cluster_cli_ope 0.4.2 → 0.5.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aba2cb5ef2e4841d95dedbfcd147a2b48048ba625c6b85f5559c1fd6d59bf530
4
- data.tar.gz: edcdb54c2423b0aef73bba9d098d0738eb89d907aae65203b8ec473e2a40464e
3
+ metadata.gz: 26f02b47b55fab368037fbf3d391666784ad5db6d4427a3265a1ca09a21b5961
4
+ data.tar.gz: f496d6f56870aa9e61a40b8ae195b3925c4482b81f60d1023d2db2cafb3bd838
5
5
  SHA512:
6
- metadata.gz: 71eb5c600a1615c5c292f439ca8afb6ca6ff43ef93fdf6d1b249617028351c9569a1c7c1cc7b56b75eb57fa6008a4b7682ed0b6d850e42929ce3c41678dba968
7
- data.tar.gz: 23d553a4b9c64b0a39b5efd7358751bed3ff7944884b767efce7419ccdc23b1423cf369111795d501ee76fa1b6cbd2940963186753e2405b9d14c1b7367d4de0
6
+ metadata.gz: 00a4f6ff88d19d303c978b34c9cc8483639a3deba3f9fd36767f87486ec314c0b0c29a554ce5cc5f7369b4a0d736ab8b2b72a37698210e78d167bc065f0252b6
7
+ data.tar.gz: 195f8d4ba4bdbc948f235aa3d0b61bf6e48f9e7f210c37ce72e7eb8fc2d8bd4722a98624626e7b1f7d10ce18ab8b2918253173a15c0ce76d3c3a278c1c5f9eac
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source "https://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
+
8
+ gem 'kubeclient'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- swarm_cluster_cli_ope (0.4.2)
4
+ swarm_cluster_cli_ope (0.5.0.pre.1)
5
5
  activesupport
6
6
  open4
7
7
  thor (~> 1.0)
@@ -16,22 +16,66 @@ GEM
16
16
  minitest (~> 5.1)
17
17
  tzinfo (~> 1.1)
18
18
  zeitwerk (~> 2.2, >= 2.2.2)
19
+ addressable (2.7.0)
20
+ public_suffix (>= 2.0.2, < 5.0)
19
21
  concurrent-ruby (1.1.7)
22
+ domain_name (0.5.20190701)
23
+ unf (>= 0.0.5, < 1.0.0)
24
+ ffi (1.13.1)
25
+ ffi-compiler (1.0.1)
26
+ ffi (>= 1.0.0)
27
+ rake
28
+ http (4.4.1)
29
+ addressable (~> 2.3)
30
+ http-cookie (~> 1.0)
31
+ http-form_data (~> 2.2)
32
+ http-parser (~> 1.2.0)
33
+ http-accept (1.7.0)
34
+ http-cookie (1.0.3)
35
+ domain_name (~> 0.5)
36
+ http-form_data (2.3.0)
37
+ http-parser (1.2.1)
38
+ ffi-compiler (>= 1.0, < 2.0)
20
39
  i18n (1.8.5)
21
40
  concurrent-ruby (~> 1.0)
41
+ jsonpath (1.0.5)
42
+ multi_json
43
+ to_regexp (~> 0.2.1)
44
+ kubeclient (4.9.1)
45
+ http (>= 3.0, < 5.0)
46
+ jsonpath (~> 1.0)
47
+ recursive-open-struct (~> 1.1, >= 1.1.1)
48
+ rest-client (~> 2.0)
49
+ mime-types (3.3.1)
50
+ mime-types-data (~> 3.2015)
51
+ mime-types-data (3.2020.1104)
22
52
  minitest (5.14.2)
53
+ multi_json (1.15.0)
54
+ netrc (0.11.0)
23
55
  open4 (1.3.4)
56
+ public_suffix (4.0.6)
24
57
  rake (12.3.3)
58
+ recursive-open-struct (1.1.3)
59
+ rest-client (2.1.0)
60
+ http-accept (>= 1.7.0, < 2.0)
61
+ http-cookie (>= 1.0.2, < 2.0)
62
+ mime-types (>= 1.16, < 4.0)
63
+ netrc (~> 0.8)
25
64
  thor (1.0.1)
26
65
  thread_safe (0.3.6)
66
+ to_regexp (0.2.1)
27
67
  tzinfo (1.2.7)
28
68
  thread_safe (~> 0.1)
69
+ unf (0.1.4)
70
+ unf_ext
71
+ unf_ext (0.0.7.7)
29
72
  zeitwerk (2.4.0)
30
73
 
31
74
  PLATFORMS
32
75
  ruby
33
76
 
34
77
  DEPENDENCIES
78
+ kubeclient
35
79
  rake (~> 12.0)
36
80
  swarm_cluster_cli_ope!
37
81
 
@@ -14,6 +14,10 @@ module SwarmClusterCliOpe
14
14
  class_option :environment, required: false, type: :string, aliases: [:e],
15
15
  desc: "Esegue tutte le operazioni nell'env scelto, il file di configurazione dovrà avere il nome: #{Configuration.cfgs_project_file_name}.ENV"
16
16
 
17
+
18
+ desc "k8s SUBCOMMAND ...ARGS", "Gestisce un set di comandi specifici per K8s"
19
+ subcommand "k8s", K8s
20
+
17
21
  desc "install", "Creazione della configurazione base della gemma"
18
22
 
19
23
  def install
@@ -0,0 +1,114 @@
1
+ require 'kubeclient'
2
+ module SwarmClusterCliOpe
3
+ class K8s < Thor
4
+ include LoggerConcern
5
+ include ConfigurationConcern
6
+ include Thor::Actions
7
+
8
+ def self.exit_on_failure?
9
+ true
10
+ end
11
+
12
+
13
+ desc "rsync <src> <dst>", "esegue un rsync dalla cartella (viene sincronizzato il contenuto)"
14
+
15
+
16
+ def rsync(src, dst)
17
+ if yes? "Attenzione, i dati locali o remoti verranno sovrascritti/cancellati?[y,yes]"
18
+
19
+ reg_exp = /(?<pod_name>.*)\:(?<path>.*)/
20
+ if File.exist?(src)
21
+ # il src é la cartella, quindi la destizione è il pod
22
+ direction = :upload
23
+ local_path = src
24
+ podname = dst.match(reg_exp)[:pod_name]
25
+ podpath = dst.match(reg_exp)[:path]
26
+ else
27
+ direction = :download
28
+ podname = src.match(reg_exp)[:pod_name]
29
+ podpath = src.match(reg_exp)[:path]
30
+ local_path = dst
31
+ end
32
+
33
+ puts "#{src} #{direction} #{dst}"
34
+
35
+ cfgs.env(options[:environment]) do |cfgs|
36
+ config = Kubeclient::Config.read(ENV['KUBECONFIG'] || "#{Dir.home}/.kube/config")
37
+
38
+ context = config.context # attuale contesto
39
+
40
+ puts "Stiamo utilizzando il contesto: #{context.api_endpoint}"
41
+
42
+ base_cmd = ["kubectl", "-n #{cfgs.stack_name}"]
43
+
44
+ cmd = ShellCommandExecution.new([*base_cmd, "exec #{podname}", "--", 'bash -c "apt update && apt install -yq rsync psmisc"'])
45
+ if cmd.execute.failed?
46
+ puts "Problemi nell'installazione di rsync nel pod"
47
+ else
48
+ cmd = ShellCommandExecution.new([*base_cmd, "cp", File.expand_path("../k8s_rsync/rsyncd.conf", __FILE__), "#{podname}:/tmp/."])
49
+ copy_1 = cmd.execute.failed?
50
+ cmd = ShellCommandExecution.new([*base_cmd, "cp", File.expand_path("../k8s_rsync/rsyncd.secrets", __FILE__), "#{podname}:/tmp/."])
51
+ copy_2 = cmd.execute.failed?
52
+ cmd = ShellCommandExecution.new([*base_cmd, "exec #{podname}", "--", 'bash -c "chmod 600 /tmp/rsyncd.secrets && chown root /tmp/*"'])
53
+ chmod = cmd.execute.failed?
54
+ if copy_1 or copy_2 or chmod
55
+ puts "problema nella copia dei file di configurazione nel pod"
56
+ else
57
+
58
+
59
+ cmd = ShellCommandExecution.new([*base_cmd, "exec -i #{podname}", "--", 'bash -c "rsync --daemon --config=/tmp/rsyncd.conf --verbose --log-file=/tmp/rsync.log"'])
60
+ if cmd.execute.failed?
61
+ puts "Rsync non startato"
62
+ else
63
+ local_port = rand(30000..40000)
64
+
65
+ p = IO.popen([*base_cmd, "port-forward #{podname} #{local_port}:873"].join(" "))
66
+ pid = p.pid
67
+ puts "PID in execuzione port forward:#{pid}"
68
+
69
+ sleep 1
70
+
71
+ # lanciamo il comando quindi per far rsync
72
+ rsync_command = [
73
+ "rsync -az --no-o --no-g",
74
+ "--delete",
75
+ "--password-file=#{ File.expand_path("../k8s_rsync/password", __FILE__)}"
76
+ ]
77
+
78
+ if direction == :upload
79
+ rsync_command << local_path
80
+ rsync_command << "rsync://root@0.0.0.0:#{local_port}/archives#{podpath}"
81
+ else
82
+ rsync_command << "rsync://root@0.0.0.0:#{local_port}/archives#{podpath}"
83
+ rsync_command << local_path
84
+ end
85
+
86
+
87
+ cmd = ShellCommandExecution.new(rsync_command)
88
+ cmd.execute
89
+
90
+ sleep 1
91
+ Process.kill("INT", pid)
92
+
93
+
94
+ puts "Eseguo pulizia"
95
+ cmd = ShellCommandExecution.new([*base_cmd, "exec -i #{podname}", "--", 'bash -c "killall rsync"'])
96
+ cmd.execute
97
+ cmd = ShellCommandExecution.new([*base_cmd, "exec -i #{podname}", "--", 'bash -c "rm -fr /tmp/rsyncd*"'])
98
+ cmd.execute
99
+
100
+ end
101
+
102
+ end
103
+
104
+ end
105
+
106
+ end
107
+
108
+
109
+ end
110
+ end
111
+
112
+
113
+ end
114
+ end
@@ -0,0 +1,14 @@
1
+ syslog facility = local3
2
+ read only = no
3
+ list = yes
4
+ auth users = root
5
+ secrets file = /tmp/rsyncd.secrets
6
+ hosts allow = 0.0.0.0/0
7
+ uid = 0
8
+ gid = 0
9
+
10
+ [archives]
11
+ comment = archives goes here
12
+ path = /
13
+ uid = root
14
+ gid = root
@@ -38,7 +38,7 @@ module SwarmClusterCliOpe
38
38
  pid: nil,
39
39
  status: nil
40
40
  }
41
- logger.debug { "SHELL: #{string_command}" }
41
+ logger.info { "SHELL: #{string_command}" }
42
42
  result[:status] = Open4::popen4(string_command) do |pid, stdin, stdout, stderr|
43
43
  stdin.close
44
44
 
@@ -1,3 +1,3 @@
1
1
  module SwarmClusterCliOpe
2
- VERSION = "0.4.2"
2
+ VERSION = "0.5.0.pre.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swarm_cluster_cli_ope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marino Bonetti
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-10 00:00:00.000000000 Z
11
+ date: 2020-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -97,6 +97,10 @@ files:
97
97
  - lib/swarm_cluster_cli_ope/commands/task.rb
98
98
  - lib/swarm_cluster_cli_ope/configuration.rb
99
99
  - lib/swarm_cluster_cli_ope/configuration_concern.rb
100
+ - lib/swarm_cluster_cli_ope/k8s.rb
101
+ - lib/swarm_cluster_cli_ope/k8s_rsync/password
102
+ - lib/swarm_cluster_cli_ope/k8s_rsync/rsyncd.conf
103
+ - lib/swarm_cluster_cli_ope/k8s_rsync/rsyncd.secrets
100
104
  - lib/swarm_cluster_cli_ope/logger_concern.rb
101
105
  - lib/swarm_cluster_cli_ope/manager.rb
102
106
  - lib/swarm_cluster_cli_ope/models/base.rb
@@ -139,9 +143,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
143
  version: 2.3.0
140
144
  required_rubygems_version: !ruby/object:Gem::Requirement
141
145
  requirements:
142
- - - ">="
146
+ - - ">"
143
147
  - !ruby/object:Gem::Version
144
- version: '0'
148
+ version: 1.3.1
145
149
  requirements: []
146
150
  rubygems_version: 3.0.8
147
151
  signing_key: