egon 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/bin/undercloud-install-local.rb +6 -0
- data/lib/egon/undercloud/commands.rb +21 -19
- data/lib/egon/undercloud/installer.rb +35 -16
- data/lib/egon/undercloud/port-check-mixin.rb +29 -0
- data/lib/egon/undercloud/ssh-connection.rb +16 -25
- data/lib/egon/version.rb +1 -1
- data/test/test_ssh_connection.rb +1 -1
- data/test/test_undercloud.rb +28 -1
- metadata +5 -4
- data/bin/undercloud-install-instack-virt.rb +0 -15
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NzE0ZTI5YTgxYTNlYWI1ZjE1MjgwZGVkZDc3MzA5NDkyNWQxMjdhMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODg3OTk1MjMyMDQ3OTg0MTJhNGU3ZTYwZjQzNTUzZDViYjg1YWYzOA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzJiMmFlZTZmZDlkMDMxZDM5NGJkZjMyNDgzZjk1NDNhZGZmYjQ0ZTcwMGRj
|
10
|
+
NGM0OGQwODkwZmIyM2I3NjAxZGVmMWFjNzFiOGRlNmFiYmRkZTY4NzYyYzU3
|
11
|
+
ZWU1YzUwNWUyZmI5YzFmNGQyMDg5MDUzYTVkNDRlNGM0ZDNiZTc=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmI4MTA2N2MwNzU5Yzc4N2U0YTM2OTVkZjBjYzM5NDJkZjhmYmUwMWIxZTQ1
|
14
|
+
ZGYwNWE1Y2E0NTU3YzI2OGVmZTliMWFlMzVjZDhlNmY4NGZhZTE0ZGE3YWZi
|
15
|
+
YTY2MTFkZWQzZjcxN2M3ODA5ZjVjZjJiMjE3NzJmN2NkYmZmMjU=
|
@@ -8,8 +8,7 @@ module Egon
|
|
8
8
|
curl -k -O #{satellite_url}/pub/katello-ca-consumer-latest.noarch.rpm
|
9
9
|
sudo yum install -y katello-ca-consumer-latest.noarch.rpm
|
10
10
|
sudo subscription-manager register --org=\"#{org}\" --activationkey=\"#{activation_key}\"
|
11
|
-
|
12
|
-
#{OSP7_COMMON}"
|
11
|
+
#{self.OSP7_COMMON_no_registration}"
|
13
12
|
end
|
14
13
|
|
15
14
|
def self.OSP7_vanilla_rhel(rhsm_user, rhsm_password, rhsm_pool_id)
|
@@ -19,19 +18,28 @@ module Egon
|
|
19
18
|
sudo subscription-manager repos --enable=rhel-7-server-rpms \
|
20
19
|
--enable=rhel-7-server-optional-rpms --enable=rhel-7-server-extras-rpms \
|
21
20
|
--enable=rhel-7-server-openstack-6.0-rpms
|
22
|
-
#{
|
21
|
+
#{self.OSP7_no_registration}"
|
23
22
|
end
|
24
23
|
|
25
|
-
def self.
|
24
|
+
def self.OSP7_no_registration
|
25
|
+
return "
|
26
|
+
sudo yum install -y python-rdomanager-oscplugin
|
27
|
+
if [ ! -f ~/undercloud.conf ]; then
|
28
|
+
cp -f /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf;
|
29
|
+
fi
|
30
|
+
#{self.OSP7_no_registration_no_packages}"
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.OSP7_no_registration_no_packages
|
26
34
|
return OSP7_COMMON
|
27
35
|
end
|
28
36
|
|
29
37
|
POST_INSTALL = "
|
30
|
-
source stackrc
|
31
|
-
source tripleo-undercloud-passwords
|
38
|
+
source ~/stackrc
|
39
|
+
source ~/tripleo-undercloud-passwords
|
32
40
|
|
33
|
-
tripleo setup-overcloud-passwords -o tripleo-overcloud-passwords
|
34
|
-
source tripleo-overcloud-passwords
|
41
|
+
tripleo setup-overcloud-passwords -o ~/tripleo-overcloud-passwords
|
42
|
+
source ~/tripleo-overcloud-passwords
|
35
43
|
NeutronFlatNetworks=${NeutronFlatNetworks:-'datacentre'}
|
36
44
|
NeutronPhysicalBridge=${NeutronPhysicalBridge:-'br-ex'}
|
37
45
|
NeutronBridgeMappings=${NeutronBridgeMappings:-'datacentre:br-ex'}
|
@@ -222,19 +230,13 @@ module Egon
|
|
222
230
|
"
|
223
231
|
|
224
232
|
OSP7_COMMON = "
|
225
|
-
sudo yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
|
226
|
-
sudo yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm
|
227
|
-
sudo curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo
|
228
|
-
sudo yum install -y python-rdomanager-oscplugin
|
229
|
-
# TODO: answers file should come from RHCI
|
230
|
-
cp -f /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf;
|
231
|
-
# TODO: for baremetal a nodes.csv file may also be required
|
232
233
|
openstack undercloud install
|
233
|
-
sudo cp /root/tripleo-undercloud-passwords
|
234
|
-
sudo chown $USER: tripleo-undercloud-passwords
|
235
|
-
sudo cp /root/stackrc
|
236
|
-
sudo chown $USER: stackrc
|
234
|
+
sudo cp /root/tripleo-undercloud-passwords ~
|
235
|
+
sudo chown $USER: ~/tripleo-undercloud-passwords
|
236
|
+
sudo cp /root/stackrc ~
|
237
|
+
sudo chown $USER: ~/stackrc
|
237
238
|
#{POST_INSTALL}"
|
239
|
+
|
238
240
|
end
|
239
241
|
end
|
240
242
|
end
|
@@ -1,50 +1,69 @@
|
|
1
|
+
require 'egon/undercloud/port-check-mixin'
|
2
|
+
require 'stringio'
|
3
|
+
|
1
4
|
module Egon
|
2
5
|
module Undercloud
|
3
6
|
class Installer
|
7
|
+
include PortCheckMixin
|
8
|
+
|
4
9
|
attr_reader :started
|
5
10
|
alias_method :started?, :started
|
6
|
-
|
7
|
-
|
11
|
+
|
12
|
+
# installs locally if ssh connection is not provided
|
13
|
+
def initialize(connection=nil)
|
8
14
|
@connection = connection
|
9
15
|
@completed = false
|
10
16
|
@started = false
|
11
17
|
@failure = false
|
12
18
|
end
|
13
|
-
|
19
|
+
|
14
20
|
def completed?
|
15
21
|
@completed
|
16
22
|
end
|
17
|
-
|
23
|
+
|
18
24
|
def set_completed(bool)
|
19
25
|
@completed = bool
|
20
26
|
end
|
21
|
-
|
27
|
+
|
22
28
|
def failure?
|
23
29
|
@failure
|
24
30
|
end
|
25
|
-
|
31
|
+
|
26
32
|
def set_failure(bool)
|
27
33
|
@failure = bool
|
28
34
|
end
|
29
|
-
|
35
|
+
|
30
36
|
def install(commands, stringio=nil)
|
31
37
|
@started = true
|
32
38
|
@completed = false
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
39
|
+
|
40
|
+
if !@connection.nil?
|
41
|
+
# remote install
|
42
|
+
@connection.on_complete(lambda { set_completed(true) })
|
43
|
+
@connection.on_failure(lambda { set_failure(true) })
|
44
|
+
|
45
|
+
Thread.new {
|
46
|
+
@connection.execute(commands, stringio)
|
47
|
+
}
|
48
|
+
else
|
49
|
+
# local install
|
50
|
+
set_failure(true) unless system(commands)
|
51
|
+
set_completed(true)
|
52
|
+
end
|
40
53
|
end
|
41
54
|
|
42
55
|
def check_ports(stringio=nil)
|
43
56
|
# closed ports 5385, 36357
|
44
57
|
ports = [8774, 9292, 8777, 9696, 8004, 5000, 8585, 15672]
|
45
58
|
ports.each do |p|
|
46
|
-
if !@connection.
|
47
|
-
|
59
|
+
if !@connection.nil?
|
60
|
+
# remote check
|
61
|
+
if !@connection.remote_port_open?(p, stringio)
|
62
|
+
set_failure(true)
|
63
|
+
end
|
64
|
+
else
|
65
|
+
# local check
|
66
|
+
set_failure(true) unless !port_open?("192.0.2.1", p, stringio)
|
48
67
|
end
|
49
68
|
end
|
50
69
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module Egon
|
4
|
+
module Undercloud
|
5
|
+
module PortCheckMixin
|
6
|
+
|
7
|
+
def stringio_write(stringio, text)
|
8
|
+
$stdout.puts text if stringio.nil?
|
9
|
+
stringio.puts text unless stringio.nil?
|
10
|
+
end
|
11
|
+
|
12
|
+
def port_open?(ip, port, stringio=nil)
|
13
|
+
begin
|
14
|
+
url = "http://#{ip}:#{port}"
|
15
|
+
stringio_write(stringio, "Testing #{url}")
|
16
|
+
res = Net::HTTP.get_response(URI(url))
|
17
|
+
stringio_write(stringio, res.body)
|
18
|
+
stringio_write(stringio, "Port #{port} is open")
|
19
|
+
true
|
20
|
+
rescue => e
|
21
|
+
stringio_write(stringio, e.message)
|
22
|
+
stringio_write(stringio, e.backtrace)
|
23
|
+
stringio_write(stringio, "Port #{port} is closed")
|
24
|
+
false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'egon/undercloud/port-check-mixin'
|
1
2
|
require 'net/http'
|
2
3
|
require 'net/ssh'
|
3
4
|
require 'stringio'
|
@@ -8,6 +9,8 @@ require 'stringio'
|
|
8
9
|
module Egon
|
9
10
|
module Undercloud
|
10
11
|
class SSHConnection
|
12
|
+
include PortCheckMixin
|
13
|
+
|
11
14
|
def initialize(host, user, password)
|
12
15
|
@host = host
|
13
16
|
@user = user
|
@@ -19,7 +22,7 @@ module Egon
|
|
19
22
|
stringio.puts text unless stringio.nil?
|
20
23
|
end
|
21
24
|
|
22
|
-
def
|
25
|
+
def remote_port_open?(port, stringio=nil, local_ip="127.0.0.1", remote_ip="192.0.2.1", seconds=1)
|
23
26
|
t = Thread.new {
|
24
27
|
begin
|
25
28
|
Net::SSH.start(@host, @user, :password => @password, :timeout => seconds,
|
@@ -35,39 +38,27 @@ module Egon
|
|
35
38
|
}
|
36
39
|
|
37
40
|
sleep 1
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
res = Net::HTTP.get_response(URI(url))
|
42
|
-
stringio_write(stringio, res.body)
|
43
|
-
stringio_write(stringio, "Port #{port} is open")
|
44
|
-
t.kill
|
45
|
-
true
|
46
|
-
rescue => e
|
47
|
-
stringio_write(stringio, e.message)
|
48
|
-
stringio_write(stringio, e.backtrace)
|
49
|
-
stringio_write(stringio, "Port #{port} is closed")
|
50
|
-
t.kill
|
51
|
-
false
|
52
|
-
end
|
41
|
+
port_status = port_open?(local_ip, port, stringio)
|
42
|
+
t.kill
|
43
|
+
port_status
|
53
44
|
end
|
54
|
-
|
45
|
+
|
55
46
|
def call_complete
|
56
47
|
@on_complete.call if @on_complete
|
57
48
|
end
|
58
|
-
|
49
|
+
|
59
50
|
def on_complete(hook)
|
60
51
|
@on_complete = hook
|
61
52
|
end
|
62
|
-
|
53
|
+
|
63
54
|
def call_failure
|
64
55
|
@on_failure.call if @on_failure
|
65
56
|
end
|
66
|
-
|
57
|
+
|
67
58
|
def on_failure(hook)
|
68
59
|
@on_failure = hook
|
69
60
|
end
|
70
|
-
|
61
|
+
|
71
62
|
def execute(commands, stringio = nil)
|
72
63
|
begin
|
73
64
|
# :timeout => how long to wait for the initial connection to be made
|
@@ -86,23 +77,23 @@ module Egon
|
|
86
77
|
end
|
87
78
|
ch.exec commands do |ch, success|
|
88
79
|
call_failure unless success
|
89
|
-
|
80
|
+
|
90
81
|
# "on_data" is called when the process writes something to stdout
|
91
82
|
ch.on_data do |c, data|
|
92
83
|
stringio_write(stringio, data)
|
93
84
|
end
|
94
|
-
|
85
|
+
|
95
86
|
# "on_extended_data" is called when the process writes something to stderr
|
96
87
|
ch.on_extended_data do |c, type, data|
|
97
88
|
$stderr.print data if stringio.nil?
|
98
89
|
stringio_write(stringio, data)
|
99
90
|
call_failure
|
100
91
|
end
|
101
|
-
|
92
|
+
|
102
93
|
ch.on_close { call_complete }
|
103
94
|
end
|
104
95
|
end
|
105
|
-
|
96
|
+
|
106
97
|
channel.wait
|
107
98
|
end
|
108
99
|
call_complete
|
data/lib/egon/version.rb
CHANGED
data/test/test_ssh_connection.rb
CHANGED
data/test/test_undercloud.rb
CHANGED
@@ -59,4 +59,31 @@ describe "undercloud installer" do
|
|
59
59
|
expect(io.string).to include("Testing")
|
60
60
|
end
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
|
+
describe "local installer" do
|
64
|
+
|
65
|
+
before do
|
66
|
+
@installer = Egon::Undercloud::Installer.new
|
67
|
+
end
|
68
|
+
|
69
|
+
it "local installer runs successfully" do
|
70
|
+
@installer.install("date")
|
71
|
+
while !@installer.completed?
|
72
|
+
sleep 1
|
73
|
+
end
|
74
|
+
expect(@installer.failure?).to be false
|
75
|
+
|
76
|
+
io = StringIO.new
|
77
|
+
@installer.check_ports(io)
|
78
|
+
expect(io.string).to include("Testing")
|
79
|
+
end
|
80
|
+
|
81
|
+
it "local install fails and is detected" do
|
82
|
+
@installer.install("blah")
|
83
|
+
while !@installer.completed?
|
84
|
+
sleep 1
|
85
|
+
end
|
86
|
+
expect(@installer.failure?).to be true
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: egon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Egon and Fusor team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -84,7 +84,7 @@ description: ''
|
|
84
84
|
email:
|
85
85
|
- foreman-dev+egon@googlegroups.com
|
86
86
|
executables:
|
87
|
-
- undercloud-install-
|
87
|
+
- undercloud-install-local.rb
|
88
88
|
- undercloud-install-satellite.rb
|
89
89
|
- undercloud-install-vanilla-rhel.rb
|
90
90
|
extensions: []
|
@@ -96,7 +96,7 @@ files:
|
|
96
96
|
- LICENSE
|
97
97
|
- README.md
|
98
98
|
- Rakefile
|
99
|
-
- bin/undercloud-install-
|
99
|
+
- bin/undercloud-install-local.rb
|
100
100
|
- bin/undercloud-install-satellite.rb
|
101
101
|
- bin/undercloud-install-vanilla-rhel.rb
|
102
102
|
- egon.gemspec
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/egon/overcloud/undercloud_handle/node.rb
|
110
110
|
- lib/egon/undercloud/commands.rb
|
111
111
|
- lib/egon/undercloud/installer.rb
|
112
|
+
- lib/egon/undercloud/port-check-mixin.rb
|
112
113
|
- lib/egon/undercloud/ssh-connection.rb
|
113
114
|
- lib/egon/version.rb
|
114
115
|
- rubygem-egon.spec
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require 'egon/undercloud/commands'
|
2
|
-
require 'egon/undercloud/ssh-connection'
|
3
|
-
require 'egon/undercloud/installer'
|
4
|
-
|
5
|
-
SSH_HOST = ARGV[0]
|
6
|
-
SSH_USER = ARGV[1]
|
7
|
-
SSH_PASSWORD = ARGV[2]
|
8
|
-
|
9
|
-
connection = Egon::Undercloud::SSHConnection.new(SSH_HOST, SSH_USER, SSH_PASSWORD)
|
10
|
-
installer = Egon::Undercloud::Installer.new(connection)
|
11
|
-
installer.install(Egon::Undercloud::Commands.OSP7_instack_virt)
|
12
|
-
while !installer.completed?
|
13
|
-
sleep 1
|
14
|
-
end
|
15
|
-
installer.check_ports
|