gogetit 0.12.3 → 0.12.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 +4 -4
- data/lib/gogetit.rb +0 -12
- data/lib/gogetit/cli.rb +45 -46
- data/lib/gogetit/config.rb +10 -10
- data/lib/gogetit/multilogger.rb +5 -1
- data/lib/gogetit/util.rb +16 -16
- data/lib/gogetit/version.rb +1 -1
- metadata +3 -4
- data/lib/etcd.rb +0 -37
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e0f13b5df25763b6b37fa24f18706e2f58579806
|
|
4
|
+
data.tar.gz: cb56da342f4477e93a731039d6fe3e0a18922a22
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 47a396841a95400ee9996411ae3a2306dd3224e2fcf5a0c1ce4c5d7ff0a2eb0f71a5266c26d0753c22863a4414e24d416258d86f023e86bbd72620b7b1dd58ea
|
|
7
|
+
data.tar.gz: 14e411b2ce7f3cfc39ac0372283742b0770a9ab677164c4860f4e815b5bb0d4ae545f18d6aaffe8383d2b20700c910a5cde93b31afd39ed5b5f3bb5d8b8dbdd8
|
data/lib/gogetit.rb
CHANGED
|
@@ -16,16 +16,4 @@ module Gogetit
|
|
|
16
16
|
@lxd = Gogetit::GogetLXD.new(config, maas, logger)
|
|
17
17
|
@libvirt = Gogetit::GogetLibvirt.new(config, maas, logger)
|
|
18
18
|
|
|
19
|
-
def self.get_provider_of(name)
|
|
20
|
-
if lxd.container_exists?(name)
|
|
21
|
-
logger.info("Calling <#{__method__.to_s}>, It is a LXD container.")
|
|
22
|
-
return 'lxd'
|
|
23
|
-
elsif libvirt.domain_exists?(name)
|
|
24
|
-
logger.info("Calling <#{__method__.to_s}>, It is a KVM domain.")
|
|
25
|
-
return 'libvirt'
|
|
26
|
-
else
|
|
27
|
-
puts "#{name} is not found"
|
|
28
|
-
return nil
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
19
|
end
|
data/lib/gogetit/cli.rb
CHANGED
|
@@ -4,34 +4,36 @@ require 'gogetit/util'
|
|
|
4
4
|
|
|
5
5
|
module Gogetit
|
|
6
6
|
|
|
7
|
-
@@result = nil
|
|
8
|
-
|
|
9
|
-
def self.set_result(x)
|
|
10
|
-
@@result = x
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def self.get_result
|
|
14
|
-
@@result
|
|
15
|
-
end
|
|
16
|
-
|
|
17
7
|
class CLI < Thor
|
|
18
8
|
include Gogetit::Util
|
|
19
9
|
package_name 'Gogetit'
|
|
20
10
|
|
|
21
|
-
|
|
11
|
+
@result = nil
|
|
12
|
+
class << self
|
|
13
|
+
attr_accessor :result
|
|
14
|
+
end
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
attr_reader :config, :logger, :lxd, :libvirt, :providers
|
|
17
|
+
|
|
18
|
+
def initialize(*args)
|
|
19
|
+
super
|
|
20
|
+
@config = Gogetit.config
|
|
21
|
+
@logger = Gogetit.logger
|
|
22
|
+
@lxd = Gogetit.lxd
|
|
23
|
+
@libvirt = Gogetit.libvirt
|
|
24
|
+
@providers = {
|
|
25
|
+
lxd: lxd,
|
|
26
|
+
libvirt: libvirt
|
|
27
|
+
}
|
|
28
|
+
end
|
|
27
29
|
|
|
28
30
|
desc 'list', 'List containers and instances, running currently.'
|
|
29
31
|
def list
|
|
30
|
-
puts "Listing LXD containers on #{
|
|
31
|
-
system("lxc list #{
|
|
32
|
+
puts "Listing LXD containers on #{config[:lxd][:nodes][0][:url]}.."
|
|
33
|
+
system("lxc list #{config[:lxd][:nodes][0][:name]}:")
|
|
32
34
|
puts ''
|
|
33
|
-
puts "Listing KVM domains on #{
|
|
34
|
-
system("virsh -c #{
|
|
35
|
+
puts "Listing KVM domains on #{config[:libvirt][:nodes][0][:url]}.."
|
|
36
|
+
system("virsh -c #{config[:libvirt][:nodes][0][:url]} list --all")
|
|
35
37
|
end
|
|
36
38
|
|
|
37
39
|
desc 'create NAME', 'Create either a container or KVM domain.'
|
|
@@ -69,43 +71,38 @@ module Gogetit
|
|
|
69
71
|
|
|
70
72
|
case options['provider']
|
|
71
73
|
when 'lxd'
|
|
72
|
-
result =
|
|
73
|
-
Gogetit.set_result(result)
|
|
74
|
+
Gogetit::CLI.result = lxd.create(name, options.to_hash)
|
|
74
75
|
when 'libvirt'
|
|
75
|
-
result =
|
|
76
|
-
Gogetit.set_result(result)
|
|
76
|
+
Gogetit::CLI.result = libvirt.create(name, options.to_hash)
|
|
77
77
|
else
|
|
78
78
|
abort('Invalid argument entered.')
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
# post-tasks
|
|
82
82
|
if options['chef']
|
|
83
|
-
knife_bootstrap(name, options[:provider],
|
|
84
|
-
update_databags(
|
|
83
|
+
knife_bootstrap(name, options[:provider], config, logger)
|
|
84
|
+
update_databags(config, logger)
|
|
85
85
|
end
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
desc 'destroy NAME', 'Destroy either a container or KVM instance.'
|
|
89
89
|
method_option :chef, :type => :boolean, :desc => "Enable chef awareness."
|
|
90
90
|
def destroy(name)
|
|
91
|
-
|
|
92
|
-
provider = Gogetit.get_provider_of(name)
|
|
91
|
+
provider = get_provider_of(name, providers)
|
|
93
92
|
if provider
|
|
94
93
|
case provider
|
|
95
94
|
when 'lxd'
|
|
96
|
-
result =
|
|
97
|
-
Gogetit.set_result(result)
|
|
95
|
+
Gogetit::CLI.result = lxd.destroy(name)
|
|
98
96
|
when 'libvirt'
|
|
99
|
-
result =
|
|
100
|
-
Gogetit.set_result(result)
|
|
97
|
+
Gogetit::CLI.result = libvirt.destroy(name)
|
|
101
98
|
else
|
|
102
99
|
abort('Invalid argument entered.')
|
|
103
100
|
end
|
|
104
101
|
end
|
|
105
102
|
# post-tasks
|
|
106
103
|
if options['chef']
|
|
107
|
-
knife_remove(name
|
|
108
|
-
update_databags(
|
|
104
|
+
knife_remove(name) if options[:chef]
|
|
105
|
+
update_databags(config)
|
|
109
106
|
end
|
|
110
107
|
end
|
|
111
108
|
|
|
@@ -115,25 +112,24 @@ module Gogetit
|
|
|
115
112
|
method_option :chef, :aliases => '-c', :type => :boolean, \
|
|
116
113
|
:default => false, :desc => 'Chef awareness'
|
|
117
114
|
def deploy(name)
|
|
118
|
-
Gogetit.
|
|
115
|
+
Gogetit::CLI.result = libvirt.deploy(name, options.to_hash)
|
|
119
116
|
|
|
120
117
|
# post-tasks
|
|
121
118
|
if options['chef']
|
|
122
|
-
knife_bootstrap(name, options[:provider],
|
|
123
|
-
update_databags(
|
|
119
|
+
knife_bootstrap(name, options[:provider], config, logger)
|
|
120
|
+
update_databags(config, logger)
|
|
124
121
|
end
|
|
125
122
|
end
|
|
126
123
|
|
|
127
124
|
desc 'release NAME', 'Release a node in MAAS'
|
|
128
125
|
method_option :chef, :type => :boolean, :desc => "Enable chef awareness."
|
|
129
126
|
def release(name)
|
|
130
|
-
result =
|
|
131
|
-
Gogetit.set_result(result)
|
|
127
|
+
Gogetit::CLI.result = libvirt.release(name)
|
|
132
128
|
|
|
133
129
|
# post-tasks
|
|
134
130
|
if options['chef']
|
|
135
|
-
knife_remove(name
|
|
136
|
-
update_databags(
|
|
131
|
+
knife_remove(name) if options[:chef]
|
|
132
|
+
update_databags(config)
|
|
137
133
|
end
|
|
138
134
|
end
|
|
139
135
|
|
|
@@ -142,19 +138,22 @@ module Gogetit
|
|
|
142
138
|
method_option :chef, :aliases => '-c', :type => :boolean, \
|
|
143
139
|
:default => false, :desc => 'Chef awareness'
|
|
144
140
|
def rebuild(name)
|
|
145
|
-
|
|
146
|
-
provider = Gogetit.get_provider_of(name)
|
|
141
|
+
provider = get_provider_of(name, providers)
|
|
147
142
|
if provider
|
|
148
143
|
case provider
|
|
149
144
|
when 'lxd'
|
|
145
|
+
1.upto(100) { print '_' }; puts
|
|
146
|
+
puts "Destroying #{name}.."
|
|
150
147
|
invoke :destroy, [name]
|
|
151
148
|
alias_name = YAML.load(
|
|
152
|
-
Gogetit.
|
|
149
|
+
Gogetit::CLI.result[:info][:config][:"user.user-data"]
|
|
153
150
|
)['source_image_alias']
|
|
151
|
+
1.upto(100) { print '_' }; puts
|
|
152
|
+
puts "Creating #{name}.."
|
|
154
153
|
invoke :create, [name], :alias => alias_name
|
|
155
154
|
when 'libvirt'
|
|
156
155
|
invoke :release, [name]
|
|
157
|
-
distro_name = Gogetit.
|
|
156
|
+
distro_name = Gogetit::CLI.result[:info][:machine]['distro_series']
|
|
158
157
|
invoke :deploy, [name], :distro => distro_name
|
|
159
158
|
else
|
|
160
159
|
abort('Invalid argument entered.')
|
|
@@ -162,8 +161,8 @@ module Gogetit
|
|
|
162
161
|
end
|
|
163
162
|
# post-tasks
|
|
164
163
|
if options['chef']
|
|
165
|
-
knife_remove(name,
|
|
166
|
-
update_databags(
|
|
164
|
+
knife_remove(name, logger) if options[:chef]
|
|
165
|
+
update_databags(config, logger)
|
|
167
166
|
end
|
|
168
167
|
end
|
|
169
168
|
end
|
data/lib/gogetit/config.rb
CHANGED
|
@@ -14,50 +14,50 @@ module Gogetit
|
|
|
14
14
|
# TODO: It might be needed to disable one of logging devices according to satiation.
|
|
15
15
|
STDOUT.sync = true
|
|
16
16
|
log_to_stdout = Logger.new(STDOUT)
|
|
17
|
+
# Instantiate main objects
|
|
17
18
|
@logger = Gogetit::MultiLogger.new(:loggers => log_to_stdout)
|
|
18
|
-
logger.debug('Instantiate main objects..')
|
|
19
19
|
|
|
20
20
|
@config = {}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
# Define home directory
|
|
23
23
|
user_gogetit_home = Dir.home + '/.gogetit'
|
|
24
24
|
config[:user_gogetit_home] = user_gogetit_home
|
|
25
25
|
if not File.directory?(user_gogetit_home)
|
|
26
|
-
logger.
|
|
26
|
+
logger.info('Creating home directory..')
|
|
27
27
|
FileUtils.mkdir(user_gogetit_home)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# TODO: It can be used to provide different behavior according to consumer.
|
|
31
|
-
|
|
31
|
+
# Define default consumer
|
|
32
32
|
config[:consumer] = 'gogetit_cli'
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
# Define log directory
|
|
35
35
|
log_dir = user_gogetit_home + '/log'
|
|
36
36
|
config[:log_dir] = log_dir
|
|
37
37
|
if not File.directory?(log_dir)
|
|
38
|
-
logger.
|
|
38
|
+
logger.info('Creating log directory..')
|
|
39
39
|
FileUtils.mkdir(log_dir)
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
# Define file log devices
|
|
43
43
|
log_file = File.open(log_dir + '/debug.log', 'a')
|
|
44
44
|
log_file.sync = true
|
|
45
45
|
log_to_file = Logger.new(log_file)
|
|
46
46
|
logger.add_logger(log_to_file)
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
# Define logger
|
|
49
49
|
# logger.datetime_format = "%Y-%m-%d %H:%M:%S"
|
|
50
50
|
logger.progname = 'GoGetIt'
|
|
51
51
|
|
|
52
52
|
lib_dir = Gem::Specification.find_by_name('gogetit').gem_dir + '/lib'
|
|
53
53
|
|
|
54
54
|
config[:lib_dir] = lib_dir
|
|
55
|
-
|
|
55
|
+
# Load GoGetIt default configuration
|
|
56
56
|
conf_file = user_gogetit_home + '/gogetit.yml'
|
|
57
57
|
if not File.exists?(conf_file)
|
|
58
58
|
src = File.new(lib_dir + '/sample_conf/gogetit.yml')
|
|
59
59
|
dst = Dir.new(user_gogetit_home)
|
|
60
|
-
logger.
|
|
60
|
+
logger.info('Copying GoGetIt default configuration..')
|
|
61
61
|
FileUtils.cp(src, dst)
|
|
62
62
|
abort('Please define default configuration for GoGetIt at ~/.gogetit/gogetit.yml.')
|
|
63
63
|
end
|
data/lib/gogetit/multilogger.rb
CHANGED
|
@@ -45,7 +45,11 @@ module Gogetit
|
|
|
45
45
|
|
|
46
46
|
Logger::Severity.constants.each do |level|
|
|
47
47
|
define_method(level.downcase) do |*args|
|
|
48
|
-
|
|
48
|
+
if level == :ERROR
|
|
49
|
+
@loggers.each { |logger| logger.send(level.downcase, "\e[31m#{args}\e[0m") }
|
|
50
|
+
else
|
|
51
|
+
@loggers.each { |logger| logger.send(level.downcase, "\e[36m#{args}\e[0m") }
|
|
52
|
+
end
|
|
49
53
|
end
|
|
50
54
|
|
|
51
55
|
define_method("#{ level.downcase }?".to_sym) do
|
data/lib/gogetit/util.rb
CHANGED
|
@@ -9,10 +9,23 @@ require 'timeout'
|
|
|
9
9
|
module Gogetit
|
|
10
10
|
module Util
|
|
11
11
|
def run_command(cmd)
|
|
12
|
-
logger.info("Calling <#{__method__.to_s}> to run #{cmd}")
|
|
12
|
+
logger.info("Calling <#{__method__.to_s}> to run '#{cmd}'")
|
|
13
13
|
system(cmd)
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
def get_provider_of(name, providers)
|
|
17
|
+
if providers[:lxd].container_exists?(name)
|
|
18
|
+
logger.info("Calling <#{__method__.to_s}>, It is a LXD container.")
|
|
19
|
+
return 'lxd'
|
|
20
|
+
elsif providers[:libvirt].domain_exists?(name)
|
|
21
|
+
logger.info("Calling <#{__method__.to_s}>, It is a KVM domain.")
|
|
22
|
+
return 'libvirt'
|
|
23
|
+
else
|
|
24
|
+
puts "#{name} is not found"
|
|
25
|
+
return nil
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
16
29
|
def is_port_open?(ip, port)
|
|
17
30
|
logger.info("Calling <#{__method__.to_s}> to check #{ip}:#{port}")
|
|
18
31
|
begin
|
|
@@ -42,11 +55,11 @@ module Gogetit
|
|
|
42
55
|
if res.code == "200"
|
|
43
56
|
res.body
|
|
44
57
|
else
|
|
45
|
-
logger.
|
|
58
|
+
logger.error("Unable to reach the content of #{url}.")
|
|
46
59
|
false
|
|
47
60
|
end
|
|
48
61
|
else
|
|
49
|
-
logger.
|
|
62
|
+
logger.error("Unable to reach the server: #{uri.host} or port: #{uri.port}.")
|
|
50
63
|
false
|
|
51
64
|
end
|
|
52
65
|
end
|
|
@@ -144,19 +157,6 @@ module Gogetit
|
|
|
144
157
|
end
|
|
145
158
|
end
|
|
146
159
|
|
|
147
|
-
def recognize_env
|
|
148
|
-
thedir = 'lib/env'
|
|
149
|
-
gateway = get_gateway(4)
|
|
150
|
-
Dir.foreach(thedir) do |item|
|
|
151
|
-
if item.match(/\.json$/)
|
|
152
|
-
env_data = JSON.parse(File.read(thedir+'/'+item))
|
|
153
|
-
if gateway =~ Regexp.new(env_data['regexp_pattern'])
|
|
154
|
-
return env_data['name']
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
|
|
160
160
|
def get_gateway(version)
|
|
161
161
|
IO.popen("ip -#{version.to_s} route").read.each_line do |route|
|
|
162
162
|
if route.include? 'default'
|
data/lib/gogetit/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gogetit
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.12.
|
|
4
|
+
version: 0.12.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Don Draper
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-01-
|
|
11
|
+
date: 2018-01-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -218,7 +218,6 @@ files:
|
|
|
218
218
|
- bin/gogetit
|
|
219
219
|
- bin/setup
|
|
220
220
|
- gogetit.gemspec
|
|
221
|
-
- lib/etcd.rb
|
|
222
221
|
- lib/executionhooks.rb
|
|
223
222
|
- lib/gogetit.rb
|
|
224
223
|
- lib/gogetit/cli.rb
|
|
@@ -257,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
257
256
|
version: '0'
|
|
258
257
|
requirements: []
|
|
259
258
|
rubyforge_project:
|
|
260
|
-
rubygems_version: 2.6.
|
|
259
|
+
rubygems_version: 2.6.14
|
|
261
260
|
signing_key:
|
|
262
261
|
specification_version: 4
|
|
263
262
|
summary: Libraries with a CLI tool for dealing with things like MAAS, LXD and Libvirt.
|
data/lib/etcd.rb
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
require 'json'
|
|
2
|
-
require 'etcd'
|
|
3
|
-
|
|
4
|
-
module Etcd
|
|
5
|
-
class Etcd
|
|
6
|
-
attr_reader :etcd_conn
|
|
7
|
-
|
|
8
|
-
include Gogetit::Util
|
|
9
|
-
|
|
10
|
-
def initialize(config)
|
|
11
|
-
@etcd_conn = Etcd::Client.connect(uris: config[:etcd_url]).connect
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def env_name
|
|
15
|
-
if etcd_conn.get('env_name') == nil or etcd_conn.get('env_name') == ''
|
|
16
|
-
etcd_conn.set('env_name', recognize_env)
|
|
17
|
-
etcd_conn.get('env_name')
|
|
18
|
-
else
|
|
19
|
-
etcd_conn.get('env_name')
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def import_env
|
|
24
|
-
file = File.read('lib/env/'+env_name+'.json')
|
|
25
|
-
env_data = JSON.parse(file)
|
|
26
|
-
etcd_conn.set('env', env_data.to_json)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def env
|
|
30
|
-
if ! etcd_conn.get('env')
|
|
31
|
-
import_env
|
|
32
|
-
else
|
|
33
|
-
JSON.parse(etcd_conn.get('env'))
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|