foreman-architect 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/bin/architect +147 -0
  2. data/bin/foreman-vm +50 -0
  3. data/bin/worker.rb +101 -0
  4. data/lib/architect.rb +49 -0
  5. data/lib/architect/builder/physical.rb +19 -0
  6. data/lib/architect/builder/virtual.rb +27 -0
  7. data/lib/architect/config.rb +64 -0
  8. data/lib/architect/designer.rb +73 -0
  9. data/lib/architect/log.rb +28 -0
  10. data/lib/architect/plan.rb +41 -0
  11. data/lib/architect/plugin.rb +67 -0
  12. data/lib/architect/plugin/hello_world.rb +46 -0
  13. data/lib/architect/plugin/ldap_netgroup.rb +114 -0
  14. data/lib/architect/plugin_manager.rb +64 -0
  15. data/lib/architect/report.rb +67 -0
  16. data/lib/architect/version.rb +3 -0
  17. data/lib/foreman_vm.rb +409 -0
  18. data/lib/foreman_vm/allocator.rb +49 -0
  19. data/lib/foreman_vm/buildspec.rb +48 -0
  20. data/lib/foreman_vm/cluster.rb +83 -0
  21. data/lib/foreman_vm/config.rb +55 -0
  22. data/lib/foreman_vm/console.rb +83 -0
  23. data/lib/foreman_vm/domain.rb +192 -0
  24. data/lib/foreman_vm/foreman_api.rb +78 -0
  25. data/lib/foreman_vm/getopt.rb +151 -0
  26. data/lib/foreman_vm/hypervisor.rb +96 -0
  27. data/lib/foreman_vm/storage_pool.rb +104 -0
  28. data/lib/foreman_vm/util.rb +18 -0
  29. data/lib/foreman_vm/volume.rb +70 -0
  30. data/lib/foreman_vm/workqueue.rb +58 -0
  31. data/test/architect/architect_test.rb +24 -0
  32. data/test/architect/product_service.yaml +33 -0
  33. data/test/architect/tc_builder_physical.rb +13 -0
  34. data/test/architect/tc_config.rb +20 -0
  35. data/test/architect/tc_log.rb +13 -0
  36. data/test/architect/tc_plugin_ldap_netgroup.rb +39 -0
  37. data/test/architect/tc_plugin_manager.rb +27 -0
  38. data/test/tc_allocator.rb +61 -0
  39. data/test/tc_buildspec.rb +45 -0
  40. data/test/tc_cluster.rb +20 -0
  41. data/test/tc_config.rb +12 -0
  42. data/test/tc_foreman_api.rb +20 -0
  43. data/test/tc_foremanvm.rb +20 -0
  44. data/test/tc_hypervisor.rb +37 -0
  45. data/test/tc_main.rb +19 -0
  46. data/test/tc_storage_pool.rb +28 -0
  47. data/test/tc_volume.rb +22 -0
  48. data/test/tc_workqueue.rb +35 -0
  49. data/test/ts_all.rb +13 -0
  50. metadata +226 -0
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestForemanAPI < MiniTest::Test
6
+
7
+ require 'foreman_vm/config'
8
+ require 'foreman_vm/foreman_api'
9
+
10
+ def setup
11
+ config = ForemanAP::Config.new
12
+ @api = ForemanAP::ForemanAPI.new(config.foreman_uri, config.foreman_user, config.foreman_password)
13
+ end
14
+
15
+ def test_initialize
16
+ assert_not_nil @api
17
+ end
18
+
19
+ # TODO: test the methods
20
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestMain < MiniTest::Test
6
+ require 'foreman_vm'
7
+
8
+ def test_initialize
9
+ fvm = ForemanVM.new
10
+ assert_not_nil(fvm)
11
+ end
12
+
13
+ def test_ip_address_in_use?
14
+ fvm = ForemanVM.new
15
+ assert fvm.send(:ip_address_in_use?, '127.0.0.1')
16
+
17
+ # Designated test network per RFC 5737
18
+ assert_equal(false, fvm.send(:ip_address_in_use?, '192.0.2.1'))
19
+ end
20
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestHypervisor < MiniTest::Test
6
+ require 'foreman_vm'
7
+
8
+ # FIXME: it stinks that this depends on the Cluster class
9
+ def setup
10
+ config = ForemanAP::Config.new('/opt/foreman-vm/conf/worker.yaml')
11
+ cluster = ForemanAP::Cluster.new(
12
+ ['vm-corp-004.brontolabs.local'],
13
+ config.libvirt_user,
14
+ config.libvirt_password)
15
+ @hv = cluster.member('vm-corp-004.brontolabs.local')
16
+ end
17
+
18
+ def test_free_memory
19
+ assert(@hv.free_memory > 0)
20
+ end
21
+
22
+ def test_domains
23
+ assert(@hv.domains.kind_of?(Array))
24
+ end
25
+
26
+ def test_storage_pool
27
+ assert(@hv.storage_pool('gvol'))
28
+ assert_raise Libvirt::RetrieveError do
29
+ @hv.storage_pool('a storage pool that does not exist')
30
+ end
31
+ end
32
+
33
+ # Verify that Hypervisor#hostname returns a FQDN
34
+ def test_hostname
35
+ assert_equal('vm-corp-004.brontolabs.local', @hv.hostname)
36
+ end
37
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestMain < MiniTest::Test
6
+ require 'foreman_vm'
7
+
8
+ def test_initialize
9
+ fvm = ForemanVM.new
10
+ assert_not_nil(fvm)
11
+ end
12
+
13
+ def test_normalize_memory
14
+ fvm = ForemanVM.new
15
+ assert_equal('1024', fvm.send(:normalize_memory, '1K'))
16
+ assert_equal('1048576', fvm.send(:normalize_memory, '1M'))
17
+ assert_equal('1073741824', fvm.send(:normalize_memory, '1G'))
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestStoragePool < MiniTest::Test
6
+ require 'foreman_vm'
7
+
8
+ def setup
9
+ fvm = ForemanVM.new
10
+ assert_not_nil(fvm)
11
+ hv = fvm.cluster.member('vm-corp-007.brontolabs.local')
12
+ assert_not_nil(hv)
13
+ @sph = hv.storage_pool('default')
14
+ assert_not_nil(@sph)
15
+ end
16
+
17
+ def test_refresh
18
+ assert(@sph.refresh, 'unable to refresh pool')
19
+ end
20
+
21
+ def test_volume
22
+ assert(@sph.volume('heily-dev-001.brontolabs.local-disk1'), 'unable to lookup volume')
23
+ end
24
+
25
+ def test_create_volume
26
+ assert(true) #FIXME -- STUB
27
+ end
28
+ end
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestVolume < MiniTest::Test
6
+ require 'foreman_vm'
7
+
8
+ def setup
9
+ fvm = ForemanVM.new
10
+ assert_not_nil(fvm)
11
+ hv = fvm.cluster.member('vm-corp-007.brontolabs.local')
12
+ assert_not_nil(hv)
13
+ sph = hv.storage_pool('default')
14
+ assert_not_nil(sph)
15
+ @vol = sph.volume('heily-dev-001.brontolabs.local-disk1')
16
+ assert_not_nil(@vol)
17
+ end
18
+
19
+ def test_volume_type
20
+ assert(@vol.format == :raw)
21
+ end
22
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'minitest/autorun'
4
+
5
+ class TestWorkqueue < MiniTest::Test
6
+
7
+ require 'foreman_vm/workqueue'
8
+
9
+ def setup
10
+ @wq = ForemanAP::Workqueue.new('workqueue-test' + Process.pid.to_s)
11
+ end
12
+
13
+ def test_initialize
14
+ assert_not_nil @wq
15
+ end
16
+
17
+ def test_enqueue_and_dequeue
18
+ assert @wq.clear
19
+ assert @wq.enqueue({ 'foo' => 'bar' })
20
+ assert_equal(@wq.dequeue, { 'foo' => 'bar' })
21
+ end
22
+
23
+ def test_jobs
24
+ assert_not_nil @wq.jobs
25
+ end
26
+
27
+ # Test if there is a worker process watching the queue
28
+ def test_worker?
29
+ wq = ForemanAP::Workqueue.new('foreman-vm')
30
+ # TODO: start a worker process.
31
+ # right now, we depend on worker.rb being started outside of this testcase
32
+ assert wq.worker?
33
+ # TODO: kill the worker process, and assert_false(wq.worker?)
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ $LOAD_PATH << '.'
4
+
5
+ require 'test/unit'
6
+ require 'tc_config'
7
+ require 'tc_foreman_api'
8
+ require 'tc_main'
9
+ require 'tc_cluster'
10
+ require 'tc_hypervisor'
11
+ require 'tc_storage_pool'
12
+ require 'tc_volume'
13
+ require 'tc_workqueue'
metadata ADDED
@@ -0,0 +1,226 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: foreman-architect
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mark Heily
9
+ - Bronto Software, Inc.
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2014-10-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: beaneater
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
31
+ - !ruby/object:Gem::Dependency
32
+ name: facter
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: json
49
+ requirement: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: net-ping
65
+ requirement: !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - ! '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ type: :runtime
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ - !ruby/object:Gem::Dependency
80
+ name: net-ldap
81
+ requirement: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ! '>='
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :runtime
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: ruby-libvirt
97
+ requirement: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ none: false
115
+ requirements:
116
+ - - ! '>='
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: yard
129
+ requirement: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ description: See the README for details
144
+ email:
145
+ - mark.heily@bronto.com
146
+ executables:
147
+ - architect
148
+ - foreman-vm
149
+ extensions: []
150
+ extra_rdoc_files: []
151
+ files:
152
+ - bin/architect
153
+ - bin/foreman-vm
154
+ - bin/worker.rb
155
+ - lib/architect.rb
156
+ - lib/architect/log.rb
157
+ - lib/architect/version.rb
158
+ - lib/architect/plugin_manager.rb
159
+ - lib/architect/plan.rb
160
+ - lib/architect/plugin.rb
161
+ - lib/architect/report.rb
162
+ - lib/architect/designer.rb
163
+ - lib/architect/config.rb
164
+ - lib/architect/builder/virtual.rb
165
+ - lib/architect/builder/physical.rb
166
+ - lib/architect/plugin/ldap_netgroup.rb
167
+ - lib/architect/plugin/hello_world.rb
168
+ - lib/foreman_vm/volume.rb
169
+ - lib/foreman_vm/cluster.rb
170
+ - lib/foreman_vm/util.rb
171
+ - lib/foreman_vm/foreman_api.rb
172
+ - lib/foreman_vm/allocator.rb
173
+ - lib/foreman_vm/getopt.rb
174
+ - lib/foreman_vm/buildspec.rb
175
+ - lib/foreman_vm/workqueue.rb
176
+ - lib/foreman_vm/console.rb
177
+ - lib/foreman_vm/storage_pool.rb
178
+ - lib/foreman_vm/hypervisor.rb
179
+ - lib/foreman_vm/domain.rb
180
+ - lib/foreman_vm/config.rb
181
+ - lib/foreman_vm.rb
182
+ - test/tc_workqueue.rb
183
+ - test/tc_allocator.rb
184
+ - test/tc_foreman_api.rb
185
+ - test/tc_cluster.rb
186
+ - test/tc_foremanvm.rb
187
+ - test/architect/tc_plugin_manager.rb
188
+ - test/architect/product_service.yaml
189
+ - test/architect/tc_plugin_ldap_netgroup.rb
190
+ - test/architect/tc_builder_physical.rb
191
+ - test/architect/tc_log.rb
192
+ - test/architect/architect_test.rb
193
+ - test/architect/tc_config.rb
194
+ - test/tc_config.rb
195
+ - test/tc_main.rb
196
+ - test/tc_storage_pool.rb
197
+ - test/tc_volume.rb
198
+ - test/tc_buildspec.rb
199
+ - test/tc_hypervisor.rb
200
+ - test/ts_all.rb
201
+ homepage: https://github.com/bronto/foreman-architect
202
+ licenses:
203
+ - BSD
204
+ post_install_message:
205
+ rdoc_options: []
206
+ require_paths:
207
+ - lib
208
+ required_ruby_version: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: 1.9.3
214
+ required_rubygems_version: !ruby/object:Gem::Requirement
215
+ none: false
216
+ requirements:
217
+ - - ! '>='
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ requirements: []
221
+ rubyforge_project:
222
+ rubygems_version: 1.8.23
223
+ signing_key:
224
+ specification_version: 3
225
+ summary: Build complete environments using Foreman and virtual machines
226
+ test_files: []