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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MmZlZmNhYWE5YTk1ZDFlMTAyOTM0ODlmZGMxNjc5ZjZlZDg4ZGU1Zg==
4
+ OWZhMGUxMGU5NzAxYTJkYmNmYTQ2OThlMjIwMjcyYzdhNTA5OWUzOA==
5
5
  data.tar.gz: !binary |-
6
- NjM0MzM5ZDdkYjk4MmNiN2U0NGQxZWZiZjU1ZWJmZDBkM2ZkMjNiNA==
6
+ MDMxZTQ0NTIxMGNjYmZjOGY1MzUyOWE4NTU2OGM0M2U0YmM2YzdhZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTIzMDRhZGQ4ZjVlNzQzNmNkODZkNTBmYmZiNWVkZTE5ODU4MzE5ZmYxMDc5
10
- YmU4ZTAzN2Y5M2I5MWU2MDIwNzRmMzM3MmFjMTQyZDFhMzBhMmY0NjZmNjE2
11
- MWZhMTlkMzA5NGM1NjY5NmFmMDZlNjNjN2IyYjc5MDdjZjM0MmE=
9
+ MmNhYzZhY2FiOWNhNjQxYTMxN2NkMmFlN2MyNTU5ZGQ4NzBjODJlYzgwYWVk
10
+ YTE4NTE2YjgxMjA5ODkxMWM5YTc3ZWI2ZjA5ODg1ODA1OTNjMGJlZGQ2OWM3
11
+ ZDU5NDhkM2Q2NmVmYWVhNWNlOTEzOTcwMDljOGRkM2U3OTdmNzk=
12
12
  data.tar.gz: !binary |-
13
- MGFjYTRiOWJkYmIxYzA1N2RiN2NiMDQ0ZTBhNzA3YjkyOGY5NDFmYTYxYzhj
14
- NGYzMDZkNGFhMGU1ZDkzNzJkODk5NGVlZDlmYTI5NmJlNWI2MTllNDVmOTg0
15
- YjY4YWNhMTE2MDRmNWViNzUzY2MwZGNmY2ZmZDJjZGY3ZjVjY2E=
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.29.0"
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 => plan.provider_resource_templates,
42
+ :files => templates,
34
43
  :password => @password,
35
44
  :timeout_mins => 60,
36
45
  :disable_rollback => true
data/lib/egon/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Egon
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/egon.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require "egon/version"
2
- require "egon/overcloud/undercloud_handle"
3
2
 
4
3
  module Egon
5
4
  # Your code goes here...
@@ -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.2
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-09 00:00:00.000000000 Z
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.29.0
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.29.0
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