egon 0.0.2 → 0.1.0
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 +8 -8
- data/egon.gemspec +1 -1
- data/lib/egon/overcloud/undercloud_handle/deployment.rb +15 -6
- data/lib/egon/version.rb +1 -1
- data/lib/egon.rb +0 -1
- data/test/test_undercloud_handle.rb +179 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
OWZhMGUxMGU5NzAxYTJkYmNmYTQ2OThlMjIwMjcyYzdhNTA5OWUzOA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDMxZTQ0NTIxMGNjYmZjOGY1MzUyOWE4NTU2OGM0M2U0YmM2YzdhZQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmNhYzZhY2FiOWNhNjQxYTMxN2NkMmFlN2MyNTU5ZGQ4NzBjODJlYzgwYWVk
|
10
|
+
YTE4NTE2YjgxMjA5ODkxMWM5YTc3ZWI2ZjA5ODg1ODA1OTNjMGJlZGQ2OWM3
|
11
|
+
ZDU5NDhkM2Q2NmVmYWVhNWNlOTEzOTcwMDljOGRkM2U3OTdmNzk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZWY2N2IxODFiMGEwNTMxYmY1OWM2ODJlYTNhYjcxY2IwYjAxNjY0YWVhZTIy
|
14
|
+
NTMwYjkyYTE3ZGJhZDA1Mzc1MDkzNWM1MzQ2YTNkYWZlODAxOThiZDFjNTkw
|
15
|
+
OGYwOWMxYmQyN2JlMTk3Y2QwMDIzYWMyODI1N2U3MTUxYTdmYjk=
|
data/egon.gemspec
CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
|
24
24
|
s.add_development_dependency "bundler", "~> 1.7"
|
25
25
|
s.add_development_dependency "rake", "~> 10.0"
|
26
|
-
s.add_development_dependency "fog", "~> 1.
|
26
|
+
s.add_development_dependency "fog", "~> 1.31.0"
|
27
27
|
s.add_development_dependency "net-ssh", "~> 2.9.2"
|
28
28
|
s.add_development_dependency "rspec", "~> 3.2.0"
|
29
29
|
end
|
@@ -4,33 +4,42 @@ module Overcloud
|
|
4
4
|
def get_plan(plan_name)
|
5
5
|
service('Planning').plans.find_by_name(plan_name)
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def edit_plan_parameters(plan_name, parameters)
|
9
9
|
get_plan(plan_name).patch(:parameters => parameters)
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def edit_plan_deployment_role_count(plan_name, role_name, count)
|
13
13
|
parameter = {"name" => role_name + "-1::count", "value" => count.to_s}
|
14
14
|
edit_plan_parameters(plan_name, [parameter])
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def edit_plan_deployment_role_image(plan_name, role_name, image_uuid)
|
18
18
|
parameter = {"name" => role_name + "-1::Image", "value" => image_uuid}
|
19
19
|
edit_plan_parameters([parameter])
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def edit_plan_deployment_role_flavor(plan_name, role_name, flavor_name)
|
23
23
|
parameter = {"name" => role_name + "-1::Flavor", "value" => flavor_name}
|
24
24
|
edit_plan_parameters(plan_name, [parameter])
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
def deploy_plan(plan_name)
|
28
28
|
plan = get_plan(plan_name)
|
29
|
+
templates = Hash[plan.provider_resource_templates]
|
30
|
+
# temporary workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1212740
|
31
|
+
templates["manifests/overcloud_object.pp"] = templates["puppet/manifests/overcloud_object.pp"]
|
32
|
+
templates["manifests/ringbuilder.pp"] = templates["puppet/manifests/ringbuilder.pp"]
|
33
|
+
templates["manifests/overcloud_compute.pp"] = templates["puppet/manifests/overcloud_compute.pp"]
|
34
|
+
templates["manifests/overcloud_controller.pp"] = templates["puppet/manifests/overcloud_controller.pp"]
|
35
|
+
templates["manifests/overcloud_volume.pp"] = templates["puppet/manifests/overcloud_volume.pp"]
|
36
|
+
templates["manifests/overcloud_cephstorage.pp"] = templates["puppet/manifests/overcloud_cephstorage.pp"]
|
37
|
+
|
29
38
|
stack_parameters = {
|
30
39
|
:stack_name => plan.name,
|
31
40
|
:template => plan.master_template,
|
32
41
|
:environment => plan.environment,
|
33
|
-
:files =>
|
42
|
+
:files => templates,
|
34
43
|
:password => @password,
|
35
44
|
:timeout_mins => 60,
|
36
45
|
:disable_rollback => true
|
data/lib/egon/version.rb
CHANGED
data/lib/egon.rb
CHANGED
@@ -0,0 +1,179 @@
|
|
1
|
+
require 'fog'
|
2
|
+
require 'fog/openstack/models/baremetal/nodes'
|
3
|
+
require 'fog/openstack/models/compute/flavors'
|
4
|
+
require 'fog/openstack/models/image/image'
|
5
|
+
require 'fog/openstack/models/orchestration/stacks'
|
6
|
+
require 'fog/openstack/models/planning/plans'
|
7
|
+
require 'fog/openstack/models/planning/role'
|
8
|
+
require './lib/egon/overcloud/undercloud_handle'
|
9
|
+
|
10
|
+
describe "overcloud installation mocked" do
|
11
|
+
context "undercloud handle" do
|
12
|
+
before(:each) do
|
13
|
+
options = {
|
14
|
+
:openstack_username => 'user',
|
15
|
+
:openstack_tenant => 'tenant',
|
16
|
+
:openstack_auth_url => 'http://194.0.0.0'
|
17
|
+
}
|
18
|
+
@undercloud_handle = Overcloud::UndercloudHandle.new(options[:openstack_username], 'xxxxxxx', options[:openstack_auth_url])
|
19
|
+
|
20
|
+
# setup for mock image service
|
21
|
+
image_service = Fog::Image::OpenStack::Mock.new(options)
|
22
|
+
bm_deploy_kernel_image = Fog::Image::OpenStack::Image.new({
|
23
|
+
:id => '1',
|
24
|
+
:name => 'bm-deploy-kernel'
|
25
|
+
})
|
26
|
+
bm_deploy_ramdisk_image = Fog::Image::OpenStack::Image.new({
|
27
|
+
:id => '2',
|
28
|
+
:name => 'bm-deploy-ramdisk'
|
29
|
+
})
|
30
|
+
allow(image_service).to receive(:images).and_return([bm_deploy_kernel_image, bm_deploy_ramdisk_image])
|
31
|
+
allow(@undercloud_handle).to receive(:service).with('Image').and_return(image_service)
|
32
|
+
|
33
|
+
# setup for mock baremetal service
|
34
|
+
baremetal_service = Fog::Baremetal::OpenStack::Mock.new(options)
|
35
|
+
nodes = Fog::Baremetal::OpenStack::Nodes.new
|
36
|
+
node1 = Fog::Baremetal::OpenStack::Node.new({
|
37
|
+
'id' => '1',
|
38
|
+
'properties' => {
|
39
|
+
'cpus' => '1',
|
40
|
+
'memory_mb' => '4096',
|
41
|
+
'local_gb' => '40',
|
42
|
+
'cpu_arch' => 'x86_64'
|
43
|
+
},
|
44
|
+
})
|
45
|
+
node2 = Fog::Baremetal::OpenStack::Node.new({
|
46
|
+
'id' => '2',
|
47
|
+
'properties' => {
|
48
|
+
'cpus' => '1',
|
49
|
+
'memory_mb' => '5012',
|
50
|
+
'local_gb' => '40',
|
51
|
+
'cpu_arch' => 'x86_64'
|
52
|
+
},
|
53
|
+
})
|
54
|
+
allow(nodes).to receive(:details).and_return([node1, node2])
|
55
|
+
allow(baremetal_service).to receive(:nodes).and_return(nodes)
|
56
|
+
allow(@undercloud_handle).to receive(:service).with('Baremetal').and_return(baremetal_service)
|
57
|
+
|
58
|
+
# setup for mock compute service
|
59
|
+
compute_service = Fog::Compute::OpenStack::Mock.new(options)
|
60
|
+
flavors = Fog::Compute::OpenStack::Flavors.new
|
61
|
+
baremetal_flavor = Fog::Compute::OpenStack::Flavor.new({
|
62
|
+
'id' => '1',
|
63
|
+
'name' => 'baremetal',
|
64
|
+
'disk' => 40,
|
65
|
+
'ram' => 4096,
|
66
|
+
'vcpus' => 1,
|
67
|
+
})
|
68
|
+
allow(baremetal_flavor).to receive(:metadata).and_return({'cpu_arch' => 'x86_64'})
|
69
|
+
allow(flavors).to receive(:all).and_return([baremetal_flavor])
|
70
|
+
allow(flavors).to receive(:get).and_return(baremetal_flavor)
|
71
|
+
allow(compute_service).to receive(:flavors).and_return(flavors)
|
72
|
+
allow(@undercloud_handle).to receive(:service).with('Compute').and_return(compute_service)
|
73
|
+
|
74
|
+
# setup for mock planning service
|
75
|
+
planning_service = Fog::Openstack::Planning::Mock.new(options)
|
76
|
+
plans = Fog::Openstack::Planning::Plans.new
|
77
|
+
overcloud_plan = Fog::Openstack::Planning::Plan.new({
|
78
|
+
:uuid => '1',
|
79
|
+
:name => 'overcloud'
|
80
|
+
})
|
81
|
+
compute_role = Fog::Openstack::Planning::Role.new({
|
82
|
+
:uuid => '1',
|
83
|
+
:name => 'Compute'
|
84
|
+
})
|
85
|
+
controller_role = Fog::Openstack::Planning::Role.new({
|
86
|
+
:uuid => '1',
|
87
|
+
:name => 'Controller'
|
88
|
+
})
|
89
|
+
allow(planning_service).to receive(:roles).and_return([compute_role, controller_role])
|
90
|
+
allow(planning_service).to receive(:plans).and_return(plans)
|
91
|
+
allow(plans).to receive(:find_by_name).and_return(overcloud_plan)
|
92
|
+
allow(@undercloud_handle).to receive(:service).with('Planning').and_return(planning_service)
|
93
|
+
|
94
|
+
# setup for mock orchestration service
|
95
|
+
orchestration_service = Fog::Orchestration::OpenStack::Mock.new(options)
|
96
|
+
stacks = Fog::Orchestration::OpenStack::Stacks.new
|
97
|
+
overcloud_stack = Fog::Orchestration::OpenStack::Stack.new({
|
98
|
+
'id' => '1',
|
99
|
+
'name' => 'overcloud',
|
100
|
+
})
|
101
|
+
allow(stacks).to receive(:get).and_return(overcloud_stack)
|
102
|
+
allow(orchestration_service).to receive(:stacks).and_return(stacks)
|
103
|
+
allow(@undercloud_handle).to receive(:service).with('Orchestration').and_return(orchestration_service)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should be able to list_images" do
|
107
|
+
expect(@undercloud_handle.list_images.length).to eq 2
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should be able to find_image_by_name" do
|
111
|
+
expect(@undercloud_handle.find_image_by_name('bm-deploy-kernel').id).to eq '1'
|
112
|
+
end
|
113
|
+
|
114
|
+
it "should be able to get_baremetal_deploy_kernel_image" do
|
115
|
+
expect(@undercloud_handle.find_image_by_name('bm-deploy-kernel').id).to eq '1'
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should be able to get_baremetal_deploy_ramdisk_image" do
|
119
|
+
expect(@undercloud_handle.find_image_by_name('bm-deploy-ramdisk').id).to eq '2'
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should be able to list_flavors" do
|
123
|
+
expect(@undercloud_handle.list_flavors.length).to eq 1
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should be able to get_flavor" do
|
127
|
+
expect(@undercloud_handle.get_flavor('1').name).to eq 'baremetal'
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should be able to get_flavor_extra_specs" do
|
131
|
+
expect(@undercloud_handle.get_flavor_extra_specs('1')['cpu_arch']).to eq 'x86_64'
|
132
|
+
end
|
133
|
+
|
134
|
+
it "should return true if flavor_exists? matches a flavor" do
|
135
|
+
flavor_parameters = {
|
136
|
+
:disk => 40,
|
137
|
+
:ram => 4096,
|
138
|
+
:vcpus => 1,
|
139
|
+
:extra_specs => {
|
140
|
+
:cpu_arch => 'x86_64'
|
141
|
+
}
|
142
|
+
}
|
143
|
+
expect(@undercloud_handle.flavor_exists?(flavor_parameters)).to be true
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should return false if flavor_exists? does not match a flavor" do
|
147
|
+
flavor_parameters = {
|
148
|
+
:disk => 40,
|
149
|
+
:ram => 5012,
|
150
|
+
:vcpus => 1,
|
151
|
+
:extra_specs => {
|
152
|
+
:cpu_arch => 'x86_64'
|
153
|
+
}
|
154
|
+
}
|
155
|
+
expect(@undercloud_handle.flavor_exists?(flavor_parameters)).to be false
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should not create_flavor_from_from_node if matching flavor exists" do
|
159
|
+
node = @undercloud_handle.list_nodes[0]
|
160
|
+
expect(@undercloud_handle.create_flavor_from_node(node)).to be_nil
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should be able to list_nodes" do
|
164
|
+
expect(@undercloud_handle.list_nodes.length).to eq 2
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should be able to list_deployment_roles" do
|
168
|
+
expect(@undercloud_handle.list_deployment_roles.length).to eq 2
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should be able to get_plan" do
|
172
|
+
expect(@undercloud_handle.get_plan('overcloud').uuid).to eq '1'
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should be able to get_stack" do
|
176
|
+
expect(@undercloud_handle.get_stack('overcloud').id).to eq '1'
|
177
|
+
end
|
178
|
+
end
|
179
|
+
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.0
|
4
|
+
version: 0.1.0
|
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-06-
|
11
|
+
date: 2015-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.31.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.31.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: net-ssh
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,6 +114,7 @@ files:
|
|
114
114
|
- rubygem-egon.spec
|
115
115
|
- test/test_ssh_connection.rb
|
116
116
|
- test/test_undercloud.rb
|
117
|
+
- test/test_undercloud_handle.rb
|
117
118
|
homepage: https://github.com/fusor/egon
|
118
119
|
licenses:
|
119
120
|
- GPL-3.0+
|
@@ -141,3 +142,4 @@ summary: A library on top of Fog that encapsulates TripleO deployment operations
|
|
141
142
|
test_files:
|
142
143
|
- test/test_ssh_connection.rb
|
143
144
|
- test/test_undercloud.rb
|
145
|
+
- test/test_undercloud_handle.rb
|