foreman-architect 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.
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: []