egon 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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