pygmy 0.9.3 → 0.9.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f9dc9f80151481281c05185a8dd4caba35a341a3
4
- data.tar.gz: 32ab377238a95816aa332fc0208e33f30b5db1da
3
+ metadata.gz: a01f3f5b33da9753d56df7bb251645e1cf0cc961
4
+ data.tar.gz: a9e466393f6eaeb238e55f6ee9716dd01e7dd6f2
5
5
  SHA512:
6
- metadata.gz: 1fb25727ecc36665f1b77a4b3bf80bd0a8b47b3ed5a25791586c2ccc714097a25859eb5e02ef2e54b3e2706dd667d3493d02b1f0176131634a00e5b31c41ee8f
7
- data.tar.gz: 9ceeddaa24504cba2d8ec6b8e9dbd2ec8ccf924818d893e7cf8eeebd723885bf796366f6079a0716ca44a27d652bfedc007c59f8dd9d737c2807ed69edaf2597
6
+ metadata.gz: 1902a2367c478394ef2b162aace8a8a5dc2c36a0e1ca20c4e46b066949742ee5b34e7e5f5e6924efe2018ba249a3ee0b9b4c65840b5aba6daab54fa001d119e5
7
+ data.tar.gz: c032329491620456068a6fa59f127b325963dcb60d323626ec5662e4e153d3c385a3aea1a632997c9e02ae4d5fe33acc5f09e317cabe7c8dff49d490312743b3
data/bin/pygmy CHANGED
@@ -30,16 +30,26 @@ class PygmyBin < Thor
30
30
  exec_up(options)
31
31
  end
32
32
 
33
- desc 'down', 'Stop all pygmy services'
33
+ desc 'stop', 'Stop all pygmy services'
34
34
  long_desc <<-LONGDESC
35
35
  Stops all pygmy services. Can optionally pass [-d|--destroy]
36
36
  to destroy the containers when they stop.
37
37
 
38
- > $ pygmy down [-d|--destroy]
38
+ > $ pygmy stop [-d|--destroy]
39
+ LONGDESC
40
+ option :destroy, type: :boolean, aliases: '-d', default: false
41
+ def stop
42
+ exec_stop(options)
43
+ end
44
+
45
+ desc 'down', 'Stop and destroy all pygmy services'
46
+ long_desc <<-LONGDESC
47
+ Stops all pygmy services and destroy the containers when they stop.
48
+
49
+ > $ pygmy down
39
50
  LONGDESC
40
- option :destroy, type: :boolean, aliases: 'd', default: false
41
51
  def down
42
- exec_down(options)
52
+ exec_stop({:destroy => true})
43
53
  end
44
54
 
45
55
  desc 'addkey [~/.ssh/id_rsa]', 'Add additional ssh-key'
@@ -61,13 +71,13 @@ class PygmyBin < Thor
61
71
 
62
72
  desc 'restart', 'Stop and restart all pygmy services'
63
73
  long_desc <<-LONGDESC
64
- Stop and restart pygmy services (dnsmasq, resolv)
74
+ Stop and restart pygmy services (dnsmasq, resolv, haproxy, ssh-agent)
65
75
 
66
76
  > $ pygmy restart [-d|--destroy]
67
77
  LONGDESC
68
- option :destroy, type: :boolean, aliases: 'd', default: false
78
+ option :destroy, type: :boolean, aliases: '-d', default: false
69
79
  def restart
70
- exec_down(options)
80
+ exec_stop(options)
71
81
  exec_up(options)
72
82
  end
73
83
 
@@ -126,23 +136,25 @@ class PygmyBin < Thor
126
136
  puts "[*] Dnsmasq is not running".red
127
137
  end
128
138
 
129
- if Pygmy::SshAgent.running?
130
- puts "[*] ssh-agent: Running as docker container #{Pygmy::Haproxy.container_name}".green
139
+ if Pygmy::Haproxy.running?
140
+ puts "[*] Haproxy: Running as docker container #{Pygmy::Haproxy.container_name}".green
131
141
  else
132
- puts "[*] ssh-agent is not running".red
142
+ puts "[*] Haproxy is not running".red
133
143
  end
134
144
 
135
- if Pygmy::Dnsmasq.running?
136
- puts "[*] Dnsmasq: Running as docker container #{Pygmy::Dnsmasq.container_name}".green
145
+ if Pygmy::Resolv.has_our_nameserver?
146
+ puts "[*] Resolv is properly configured".green
137
147
  else
138
- puts "[*] Dnsmasq is not running".red
148
+ puts "[*] Resolv is not configured".red
139
149
  end
140
150
 
141
- if Pygmy::Resolv.has_our_nameserver?
142
- puts "[*] Resolv: configured with #{Pygmy::Resolv.file_nameserver_line}".green
151
+ if Pygmy::SshAgent.running?
152
+ puts "[*] ssh-agent: Running as docker container #{Pygmy::SshAgent.container_name}, loaded keys:".green
153
+ Pygmy::SshAgentAddKey.show_ssh_keys
143
154
  else
144
- puts "[*] Resolv is not configured".red
155
+ puts "[*] ssh-agent is not running".red
145
156
  end
157
+
146
158
  end
147
159
 
148
160
 
@@ -160,11 +172,11 @@ class PygmyBin < Thor
160
172
 
161
173
  end
162
174
 
163
- def exec_down(options)
175
+ def exec_stop(options)
164
176
  if Pygmy::Resolv.clean
165
- puts "nameserver removed from resolv file".green
177
+ puts "Resolver removed".green
166
178
  else
167
- puts "Unable to remove nameserver from resolv file".red
179
+ puts "Unable to remove resolver".red
168
180
  end
169
181
 
170
182
  if Pygmy::Dnsmasq.stop
@@ -211,7 +223,6 @@ end
211
223
 
212
224
  aliases = {
213
225
  'start' => 'up',
214
- 'stop' => 'down',
215
226
  }
216
227
 
217
228
  if !ARGV.empty? && %w[-v --version].include?(ARGV.first)
@@ -41,7 +41,7 @@ module Pygmy
41
41
  end
42
42
 
43
43
  def stop(container_name = self.container_name)
44
- Sh.run_command("docker kill #{Shellwords.escape(container_name)}") if self.running?
44
+ Sh.run_command("docker stop -t 1 #{Shellwords.escape(container_name)}") if self.running?
45
45
  !self.running?
46
46
  end
47
47
 
@@ -12,7 +12,7 @@ module Pygmy
12
12
  'amazeeio-haproxy'
13
13
  end
14
14
 
15
- def self.run_cmd()
15
+ def self.run_cmd
16
16
  "docker run -d " \
17
17
  "-p 80:80 -p 443:443 " \
18
18
  "--volume=/var/run/docker.sock:/tmp/docker.sock " \
@@ -1,4 +1,6 @@
1
1
  require 'colorize'
2
+ require 'tempfile'
3
+ require 'pathname'
2
4
 
3
5
  module Pygmy
4
6
  module Resolv
@@ -13,7 +15,7 @@ module Pygmy
13
15
  end
14
16
 
15
17
  def self.file_comment
16
- '# added by pygmy'
18
+ '# added by amazee.io pygmy'
17
19
  end
18
20
 
19
21
  def self.nameserver
@@ -30,7 +32,7 @@ module Pygmy
30
32
 
31
33
  def self.resolv_file
32
34
  if Linux.ubuntu?
33
- return self.ubuntu_resolv_file if Linux.ubuntu?
35
+ return self.ubuntu_resolv_file
34
36
  elsif Linux.fedora? || Linux.arch? || File.exist?(self.common_resolv_file)
35
37
  return self.common_resolv_file
36
38
  else
@@ -40,7 +42,11 @@ module Pygmy
40
42
  end
41
43
  end
42
44
 
45
+
43
46
  def self.configure
47
+ if Linux.osx?
48
+ return ResolvOsx.create_resolver?
49
+ end
44
50
  # we want to be the first nameserver in the list for performance reasons
45
51
  # we only want to add the nameserver if it isn't already there
46
52
  prev_conts = self.resolv_file_contents
@@ -57,6 +63,9 @@ module Pygmy
57
63
  end
58
64
 
59
65
  def self.clean
66
+ if Linux.osx?
67
+ return ResolvOsx.clean?
68
+ end
60
69
  prev_conts = self.resolv_file_contents
61
70
  if self.contents_has_our_nameserver?(prev_conts)
62
71
  prev_conts.gsub!(/#{Regexp.escape(self.nameserver_contents + "\n")}/, '')
@@ -77,6 +86,9 @@ module Pygmy
77
86
  end
78
87
 
79
88
  def self.has_our_nameserver?
89
+ if Linux.osx?
90
+ return ResolvOsx.resolver_file_exists?
91
+ end
80
92
  self.contents_has_our_nameserver?(self.resolv_file_contents)
81
93
  end
82
94
 
@@ -0,0 +1,52 @@
1
+ require 'colorize'
2
+ require 'tempfile'
3
+ require 'pathname'
4
+
5
+ module Pygmy
6
+ module ResolvOsx
7
+ def self.resolver_dir
8
+ Pathname("/etc/resolver")
9
+ end
10
+
11
+ def self.resolver_file
12
+ "/etc/resolver/docker.amazee.io"
13
+ end
14
+
15
+ def self.create_resolver?
16
+ puts "setting up DNS resolution, this may require sudo".green
17
+ unless self.resolver_dir.directory?
18
+ self.system!("creating #{self.resolver_dir}", "sudo", "mkdir", "-p", self.resolver_dir)
19
+ end
20
+ Tempfile.open('amazeeio_pygmy-dnsmasq') do |f|
21
+ f.write(self.resolver_contents)
22
+ f.close
23
+ self.system!("creating #{self.resolver_file}", "sudo", "cp", f.path, self.resolver_file)
24
+ self.system!("creating #{self.resolver_file}", "sudo", "chmod", "644", self.resolver_file)
25
+ end
26
+ self.system!("restarting mDNSResponder", "sudo", "killall", "mDNSResponder")
27
+ end
28
+
29
+ def self.clean?
30
+ self.system!("removing resolverfile", "sudo", "rm", "-f", self.resolver_file)
31
+ end
32
+
33
+ def self.system!(step, *args)
34
+ system(*args.map(&:to_s)) || raise("Error with the #{name} daemon during #{step}")
35
+ end
36
+
37
+ def self.resolver_contents; <<-EOS.gsub(/^ /, '')
38
+ # Generated by amazeeio pygmy
39
+ nameserver 127.0.0.1
40
+ port 53
41
+ EOS
42
+ end
43
+
44
+ def self.resolver_file_contents
45
+ File.read(self.resolver_file) unless !File.file?(self.resolver_file)
46
+ end
47
+
48
+ def self.resolver_file_exists?
49
+ (self.resolver_file_contents == self.resolver_contents)
50
+ end
51
+ end
52
+ end
@@ -12,7 +12,7 @@ module Pygmy
12
12
  'amazeeio-ssh-agent'
13
13
  end
14
14
 
15
- def self.run_cmd()
15
+ def self.run_cmd
16
16
  "docker run -d " \
17
17
  "--restart=always " \
18
18
  "--name=#{Shellwords.escape(self.container_name)} " \
@@ -18,8 +18,17 @@ module Pygmy
18
18
  "ssh-add #{key}")
19
19
  else
20
20
  puts "ssh key: #{key}, does not exist, ignoring...".yellow
21
+ return false
21
22
  end
23
+ end
22
24
 
25
+ def self.show_ssh_keys
26
+ system("docker run --rm -it " \
27
+ "--volumes-from=amazeeio-ssh-agent " \
28
+ "--name=#{Shellwords.escape(self.container_name)} " \
29
+ "#{Shellwords.escape(self.image_name)} " \
30
+ "ssh-add -l")
23
31
  end
32
+
24
33
  end
25
34
  end
@@ -1,4 +1,4 @@
1
1
  module Pygmy
2
- VERSION = '0.9.3'
2
+ VERSION = '0.9.4'
3
3
  DATE = '2016-04-30'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pygmy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 0.9.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Schmid
@@ -125,9 +125,9 @@ files:
125
125
  - lib/pygmy/dnsmasq.rb
126
126
  - lib/pygmy/docker_service.rb
127
127
  - lib/pygmy/haproxy.rb
128
- - lib/pygmy/inst_vars_to_hash.rb
129
128
  - lib/pygmy/linux.rb
130
129
  - lib/pygmy/resolv.rb
130
+ - lib/pygmy/resolv_osx.rb
131
131
  - lib/pygmy/shell.rb
132
132
  - lib/pygmy/ssh_agent.rb
133
133
  - lib/pygmy/ssh_agent_add_key.rb
@@ -1,33 +0,0 @@
1
- module InstVarsToHash
2
- def to_s
3
- to_h.to_s
4
- end
5
-
6
- def to_h
7
- retval = {}
8
- instance_variables.each do |iv|
9
- retval[iv.to_s.delete('@').to_sym] = elem_to_h(instance_variable_get(iv))
10
- end
11
- retval
12
- end
13
-
14
- private
15
-
16
- def expandable_classes
17
- [ InstVarsToHash ]
18
- end
19
-
20
- def expandable_to_hash(klass)
21
- expandable_classes.any?{ |k| klass == k || klass < k }
22
- end
23
-
24
- def elem_to_h(elem)
25
- if elem.class == Array
26
- elem.map { |el| elem_to_h(el) }
27
- elsif expandable_to_hash(elem.class)
28
- elem.to_h
29
- else
30
- elem
31
- end
32
- end
33
- end