ruby-amt 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 (46) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +15 -0
  3. data/ChangeLog +392 -0
  4. data/GPL +674 -0
  5. data/Rakefile +292 -0
  6. data/VERSION +1 -0
  7. data/doc/default.css +211 -0
  8. data/doc/default.template +78 -0
  9. data/doc/documentation.page +40 -0
  10. data/doc/img/bg.jpg +0 -0
  11. data/doc/img/image.jpg +0 -0
  12. data/doc/img/line.jpg +0 -0
  13. data/doc/img/shadow.jpg +0 -0
  14. data/doc/index.page +61 -0
  15. data/doc/installation.page +115 -0
  16. data/doc/news.page +25 -0
  17. data/doc/news/release_0_1_0.page +16 -0
  18. data/doc/virtual +2 -0
  19. data/lib/amt/pt_status.rb +59 -0
  20. data/lib/amt/service.rb +16 -0
  21. data/lib/amt/service/basic.rb +159 -0
  22. data/lib/amt/service/hardware_asset.rb +83 -0
  23. data/lib/amt/service/hardware_asset/amt_information_table.rb +49 -0
  24. data/lib/amt/service/hardware_asset/asset.rb +118 -0
  25. data/lib/amt/service/hardware_asset/baseboard.rb +31 -0
  26. data/lib/amt/service/hardware_asset/bios.rb +65 -0
  27. data/lib/amt/service/hardware_asset/computer_system.rb +30 -0
  28. data/lib/amt/service/hardware_asset/fru.rb +37 -0
  29. data/lib/amt/service/hardware_asset/media_device.rb +63 -0
  30. data/lib/amt/service/hardware_asset/memory_module.rb +91 -0
  31. data/lib/amt/service/hardware_asset/portable_battery.rb +80 -0
  32. data/lib/amt/service/hardware_asset/processor.rb +123 -0
  33. data/lib/amt/service/hardware_asset/vpro_verification_table.rb +120 -0
  34. data/lib/amt/service/network_administration.rb +181 -0
  35. data/lib/amt/service/network_administration/structures.rb +29 -0
  36. data/lib/amt/service/remote_control.rb +73 -0
  37. data/lib/amt/service/remote_control/structures.rb +120 -0
  38. data/lib/amt/service/security_administration.rb +430 -0
  39. data/lib/amt/service/security_administration/structures.rb +117 -0
  40. data/lib/amt/system.rb +134 -0
  41. data/lib/amt/utility.rb +33 -0
  42. data/lib/amt/utility/bit_struct.rb +164 -0
  43. data/lib/amt/utility/enum.rb +119 -0
  44. data/lib/amt/version.rb +8 -0
  45. data/setup.rb +1585 -0
  46. metadata +125 -0
@@ -0,0 +1,292 @@
1
+ # -*- ruby -*-
2
+
3
+ # load all optional developer libraries
4
+ begin
5
+ require 'rubygems'
6
+ require 'rake/gempackagetask'
7
+ rescue LoadError
8
+ end
9
+
10
+ begin
11
+ require 'webgen/webgentask'
12
+ require 'webgen/page'
13
+ rescue LoadError
14
+ end
15
+
16
+ require 'rdoc/task'
17
+ require 'rdoc/rdoc'
18
+
19
+ class RDoc::RDoc
20
+
21
+ alias :old_parse_files :parse_files
22
+
23
+ def parse_files(options)
24
+ file_info = old_parse_files(options)
25
+ require 'amt/service'
26
+ require 'amt/utility'
27
+
28
+ # Add documentation to AMT::Utility::Enum classes
29
+ RDoc::TopLevel.all_classes_and_modules.select do |tl|
30
+ use_it = false
31
+ while !use_it && !tl.module? && (tl = tl.superclass) && tl.kind_of?(RDoc::NormalClass) && tl.full_name != 'Object'
32
+ use_it = (tl.full_name == 'AMT::Utility::Enum')
33
+ end
34
+ use_it
35
+ end.each do |tl|
36
+ klass = tl.full_name.split(/::/).inject(Object){ |mod, name| mod.const_get(name) }
37
+ docs = "<p>Available enumeration values:</p>\n<ul>\n"
38
+ klass.values.sort {|a,b| a.value <=> b.value }.each do |val|
39
+ docs += "<li>"
40
+ docs += val.value.to_s
41
+ docs += " (#{val.name.to_s})" if val.name && val.name.to_s != val.value.to_s && val.name.to_s != val.description.to_s
42
+ docs += ": #{val.description}" if val.description && val.description != val.value.to_s
43
+ docs += "</li>"
44
+ end
45
+ docs += "</ul>\n"
46
+ tl.comment += docs.gsub(/^/, '# ')
47
+ end
48
+
49
+ # Add documentation to AMT::Utility::BitStruct classes
50
+ RDoc::TopLevel.all_classes_and_modules.select do |tl|
51
+ use_it = false
52
+ while !use_it && !tl.module? && (tl = tl.superclass) && tl.kind_of?(RDoc::NormalClass) && tl.full_name != 'Object'
53
+ use_it = (tl.full_name == 'AMT::Utility::BitStruct')
54
+ end
55
+ use_it
56
+ end.each do |tl|
57
+ klass = tl.full_name.split(/::/).inject(Object){ |mod, name| mod.const_get(name) }
58
+ klass.fields[:boolean].each do |name, desc|
59
+ meth = RDoc::AnyMethod.new("", "#{name}?")
60
+ meth.comment = "Getter for boolean field <i>#{name}</i>\n\n#{desc}"
61
+ tl.add_method(meth)
62
+ meth = RDoc::AnyMethod.new('', "#{name}!")
63
+ meth.comment = "Setter for boolean field <i>#{name}</i>\n\n#{desc}"
64
+ tl.add_method(meth)
65
+ end
66
+ klass.fields[:unsigned].each do |name, desc|
67
+ attr = RDoc::Attr.new("", name.to_s, 'RW', desc)
68
+ tl.add_attribute(attr)
69
+ end
70
+ klass.fields[:enum].each do |name, values, desc|
71
+ docs = desc + "\n\nAvailable enumeration values:\n"
72
+ values.sort.each {|k,v| docs += "[<tt>#{k}</tt>] #{v}\n"}
73
+ attr = RDoc::Attr.new("", name.to_s, 'RW', docs)
74
+ tl.add_attribute(attr)
75
+ end
76
+ end
77
+
78
+ file_info
79
+ end
80
+
81
+ end
82
+
83
+
84
+ begin
85
+ require 'rubyforge'
86
+ rescue LoadError
87
+ end
88
+
89
+ begin
90
+ require 'rcov/rcovtask'
91
+ rescue LoadError
92
+ end
93
+
94
+ require 'fileutils'
95
+ require 'rake/clean'
96
+ require 'rake/testtask'
97
+ require 'rake/packagetask'
98
+
99
+ $:.unshift('lib')
100
+ require 'amt/version'
101
+
102
+ # End user tasks ################################################################
103
+
104
+ task :default => :test
105
+
106
+ desc "Install using setup.rb"
107
+ task :install do
108
+ ruby "setup.rb config"
109
+ ruby "setup.rb setup"
110
+ ruby "setup.rb install"
111
+ end
112
+
113
+ task :clobber do
114
+ ruby "setup.rb clean"
115
+ end
116
+
117
+ desc "Build the whole user documentation"
118
+ task :doc => :rdoc
119
+
120
+ if defined? Webgen
121
+ desc "Generate the HTML documentation"
122
+ Webgen::WebgenTask.new('htmldoc') do |site|
123
+ site.clobber_outdir = true
124
+ site.config_block = lambda do |config|
125
+ config['sources'] = [['/', "Webgen::Source::FileSystem", 'doc']]
126
+ config['output'] = ['Webgen::Output::FileSystem', 'htmldoc']
127
+ end
128
+ end
129
+ task :doc => :htmldoc
130
+ end
131
+
132
+ rd = RDoc::Task.new do |rdoc|
133
+ rdoc.rdoc_dir = 'htmldoc/rdoc'
134
+ rdoc.title = 'ruby-amt'
135
+ rdoc.main = 'lib/amt/system.rb'
136
+ rdoc.options << '--line-numbers' << '--all'
137
+ rdoc.rdoc_files.include('lib')
138
+ end
139
+
140
+ tt = Rake::TestTask.new do |test|
141
+ test.libs << 'test'
142
+ end
143
+
144
+ # Release tasks and development tasks ############################################
145
+
146
+ namespace :dev do
147
+
148
+ SUMMARY = 'ruby-amt is a library for controlling Intel AMT devies via SOAP'
149
+ DESCRIPTION = <<EOF
150
+ Intel AMT (Active Management Technology) is available on every computer having
151
+ the Intel vPro moniker and allows one to get and set various information about
152
+ the computer as well as to control it remotely.
153
+ EOF
154
+
155
+ begin
156
+ REL_PAGE = Webgen::Page.from_data(File.read('doc/news/release_' + AMT::VERSION.split('.').join('_') + '.page'))
157
+ rescue
158
+ puts 'NO RELEASE NOTES/CHANGES FILE'
159
+ end
160
+
161
+ PKG_FILES = FileList.new([
162
+ 'Rakefile',
163
+ 'setup.rb',
164
+ 'VERSION', 'AUTHORS', 'ChangeLog',
165
+ 'COPYING', 'GPL',
166
+ 'doc/**/*',
167
+ 'lib/**/*.rb',
168
+ 'test/test_*.rb'
169
+ ]) do |fl|
170
+ fl.exclude('**/.gitignore')
171
+ end
172
+
173
+ CLOBBER << "VERSION"
174
+ file 'VERSION' do
175
+ puts "Generating VERSION file"
176
+ File.open('VERSION', 'w+') {|file| file.write(AMT::VERSION + "\n")}
177
+ end
178
+
179
+ CLOBBER << 'ChangeLog'
180
+ file 'ChangeLog' do
181
+ puts "Generating ChangeLog file"
182
+ `git log --name-only > ChangeLog`
183
+ end
184
+
185
+ Rake::PackageTask.new('ruby-amt', AMT::VERSION) do |pkg|
186
+ pkg.need_tar = true
187
+ pkg.need_zip = true
188
+ pkg.package_files = PKG_FILES
189
+ end
190
+
191
+ if defined? Gem
192
+ spec = Gem::Specification.new do |s|
193
+
194
+ #### Basic information
195
+ s.name = 'ruby-amt'
196
+ s.version = AMT::VERSION
197
+ s.summary = SUMMARY
198
+ s.description = DESCRIPTION
199
+
200
+ #### Dependencies, requirements and files
201
+
202
+ s.files = PKG_FILES.to_a
203
+ s.add_dependency('handsoap', '>= 1.1.1')
204
+ s.add_dependency('httpclient', '>= 2.1.5.2')
205
+ s.require_path = 'lib'
206
+
207
+ #### Documentation
208
+
209
+ s.has_rdoc = true
210
+ s.rdoc_options = ['--line-numbers', '--all', '-m', 'lib/amt/system.rb']
211
+
212
+ #### Author and project details
213
+
214
+ s.author = 'Thomas Leitner'
215
+ s.email = 't_leitner@gmx.at'
216
+ s.homepage = "http://ruby-amt.rubyforge.org"
217
+ s.rubyforge_project = 'ruby-amt'
218
+ end
219
+
220
+ Rake::GemPackageTask.new(spec) do |pkg|
221
+ pkg.need_zip = true
222
+ pkg.need_tar = true
223
+ end
224
+
225
+ end
226
+
227
+ desc 'Release ruby-amt version ' + AMT::VERSION
228
+ task :release => [:clobber, :package, :publish_files, :publish_doc, :post_news]
229
+
230
+ if defined? RubyForge
231
+ desc "Upload the release to Rubyforge"
232
+ task :publish_files => [:package] do
233
+ print 'Uploading files to Rubyforge...'
234
+ $stdout.flush
235
+
236
+ rf = RubyForge.new
237
+ rf.configure
238
+ rf.login
239
+
240
+ rf.userconfig["release_notes"] = REL_PAGE.blocks['content'].content
241
+ rf.userconfig["preformatted"] = false
242
+
243
+ files = %w[.gem .tgz .zip].collect {|ext| "pkg/ruby-amt-#{AMT::VERSION}" + ext}
244
+
245
+ rf.add_release('ruby-amt', 'ruby-amt', AMT::VERSION, *files)
246
+ puts 'done'
247
+ end
248
+
249
+ desc 'Post announcement to rubyforge.'
250
+ task :post_news do
251
+ print 'Posting announcement to Rubyforge ...'
252
+ $stdout.flush
253
+ rf = RubyForge.new
254
+ rf.configure
255
+ rf.login
256
+
257
+ content = REL_PAGE.blocks['content'].content
258
+ content += "\n\n\nAbout ruby-amt\n\n#{AMT::SUMMARY}\n\n#{AMT::DESCRIPTION}"
259
+ rf.post_news('ruby-amt', "ruby-amt #{AMT::VERSION} released", content)
260
+ puts "done"
261
+ end
262
+ end
263
+
264
+ desc "Upload the ruby-amt website to Rubyforge"
265
+ task :publish_doc => ['rdoc', 'htmldoc'] do
266
+ sh "rsync -avc --delete --exclude 'wiki' --exclude 'robots.txt' htmldoc/ gettalong@rubyforge.org:/var/www/gforge-projects/ruby-amt/"
267
+ end
268
+
269
+ desc "Run the tests one by one to check for missing deps"
270
+ task :test_isolated do
271
+ files = Dir['test/test_*']
272
+ puts "Checking #{files.length} tests"
273
+ failed = files.select do |file|
274
+ okay = system("ruby -Ilib:test #{file} -vs &> /dev/null")
275
+ print(okay ? '.' : 'E')
276
+ !okay
277
+ end
278
+ puts
279
+ failed.each {|file| puts "Problem with" + file.rjust(40) }
280
+ end
281
+
282
+ if defined? Rcov
283
+ Rcov::RcovTask.new do |rcov|
284
+ rcov.libs << 'test'
285
+ end
286
+ end
287
+
288
+ end
289
+
290
+ task :clobber => ['dev:clobber']
291
+
292
+ # Helper methods ###################################################################
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,211 @@
1
+ * { margin:0; padding:0; }
2
+ body, div, span, p, a, img, ul, ol, li, table, th, tr, td, form, fieldset, legend, dl, dt, dd, blockquote, applet, object { border:0; }
3
+ body {
4
+ padding: 0;
5
+ background: #fff url("img/bg.jpg") repeat-x;
6
+ font: 0.8em/1.5 "arial",sans-serif;
7
+ color: #354146;
8
+ text-align: center;
9
+ }
10
+
11
+ /* links --------------------------------------------------------------- */
12
+ a {color:#1666a3;}
13
+ a:link {color:#1666a3;}
14
+ a:hover {color:#0b4775;}
15
+
16
+ /* header tags --------------------------------------------------------------------- */
17
+ h1, h2, h3, h4, h5, h6 { margin:15px 0 10px 0; }
18
+ h1 { font-size:200%; font-family: Georgia;}
19
+ h1#logo a{color: #ced1d2; text-decoration: none; display: block;padding: 18px 0 17px; font-weight: normal;}
20
+ h1#logo a:hover{color: #fff;}
21
+ h1#logo span.slogan {font-size: 60%; padding-left: 1.5em;}
22
+ h2 { font-size:130%; color: #354146;font-weight: bold; padding: 0; }
23
+ h3 { font-size:120%; }
24
+ h4 { font-size:120%; }
25
+ h5 { font-size:100%; }
26
+
27
+ /* layout ---------------------------------------------------------------------- */
28
+ #layout {
29
+ text-align:left;
30
+ }
31
+ #container {
32
+ clear: both;
33
+ }
34
+ #intro{
35
+ background: #e6e8e9; height: auto;
36
+ }
37
+ #intro-in{
38
+ width:891px;
39
+ margin: 0 auto;
40
+ padding: 20px 0;
41
+ }
42
+
43
+ #header {
44
+ width:891px;
45
+ margin:0 auto;
46
+ }
47
+
48
+
49
+ /* horizontal navigation --------------------------------------------------- */
50
+ #nav {
51
+ width:891px;
52
+ margin:0 auto;
53
+ }
54
+ #nav ul {
55
+ margin:0;
56
+ padding:0;
57
+ list-style:none;
58
+ height: 35px;
59
+ }
60
+ #nav ul li {
61
+ float:left;
62
+ display:block;
63
+ margin:0;
64
+ padding:0;}
65
+ #nav ul li a, #nav ul li span {
66
+ display: block;
67
+ float: left;
68
+ font-size: 90%;
69
+ color: #fff;
70
+ text-decoration: none;
71
+ padding: 12px 20px 8px;
72
+ text-align: center;
73
+ }
74
+ #nav ul li a:hover, #nav ul li span:hover {
75
+ color: #ced1d2;
76
+ text-decoration: underline;
77
+ }
78
+ #nav ul li#active a, #nav ul li.webgen-menu-item-selected span {
79
+ color: #101517;
80
+ border: 1px solid #fff;
81
+ border-bottom:1px solid #e6e8e9;
82
+ background:#e6e8e9; text-decoration:none;}
83
+
84
+ /* main content ---------------------------------------------------------------- */
85
+
86
+ .content {
87
+ padding: 0 0 0 0;
88
+ z-index: 10;
89
+ width:891px;
90
+ margin:0 auto;
91
+ }
92
+ .content .in{
93
+ padding: 20px 0 30px;
94
+ }
95
+ p.intro{
96
+ background: url("img/line.jpg");
97
+ line-height: 23px;
98
+ margin:0 0 0;
99
+ }
100
+ .shadow{
101
+ border-top: 1px solid #dddddd;
102
+ padding: 10px 0;
103
+ background: url("img/shadow.jpg") no-repeat;
104
+ }
105
+
106
+ img.thumb{padding: 3px; background: #fff; border: 1px solid #d1d1d1;}
107
+
108
+ .columns {list-style: none;margin:10px 0 0 0;padding:0; font-size: 90%;}
109
+ .columns li{float: left; width: 32%;}
110
+ .columns li.col2{border-left: 1px solid #d7d7d7;border-right: 1px solid #d7d7d7;}
111
+ .columns li h3{padding: 0 10px;color: #2e4650; margin: 0 0 5px;}
112
+ .columns li.col2 h3{padding-left: 20px;}
113
+ .columns li.col3 h3{padding-left: 20px;}
114
+ .columns li p{line-height: 22px;padding: 0 20px 0 10px; margin: 0; color: #3f4345;}
115
+ .columns li.col2 p{padding: 0 20px 0 20px;}
116
+ .columns li.col3 p{padding: 0 10px 0 20px;}
117
+ .columns li a.more{display: block;color: #1666a3;padding: 5px 0;}
118
+ .columns li a.more:hover{color: #0b4775; text-decoration: none;}
119
+
120
+
121
+
122
+ /* footer ----------------------------------------------------------------- */
123
+ #footer {
124
+ width:891px;
125
+ margin:0 auto;
126
+ clear:both;
127
+ font-size: 85%;
128
+ padding-bottom: 70px;
129
+ color: #898989;
130
+ }
131
+ #footer a{color: #898989;}
132
+ #footer a:hover{color: #666666; text-decoration: none;}
133
+ #footer .f-left, #footer .f-right { padding: 0 10px; }
134
+
135
+
136
+
137
+
138
+ /* paragraphs -------------------------------------------------------------------- */
139
+ p { margin:15px 0; }
140
+
141
+ /* tables --------------------------------------------------------------------- */
142
+ table { margin:15px 0; border-collapse:collapse; border-spacing:0; font-size:100%; }
143
+ th { text-align:center; font-weight:bold; }
144
+ th, td { padding:3px 5px; }
145
+
146
+ /* lists --------------------------------------------------------------------- */
147
+ ul, ol { display:block; margin:15px 0 15px 40px; }
148
+ ul ul, ul ul ul, ol ol, ol ol ol { margin:0; margin-left:20px; }
149
+ ol { list-style-type:decimal; }
150
+ ol ol { list-style-type:upper-alpha; }
151
+ ol ol ol {list-style-type:lower-alpha; }
152
+ li { display:list-item; }
153
+ ul li a { text-decoration:underline; }
154
+
155
+ /* definitions -------------------------------------------------------------------- */
156
+ dl { margin:15px 0; }
157
+ dt { font-weight:bold; }
158
+ dd { margin-left:30px; }
159
+
160
+ /* other HTML tags --------------------------------------------------------------------- */
161
+ fieldset { margin:15px 0; padding:10px; border:1px solid #CCC; }
162
+ legend { margin-left:10px; font-size:100%; font-weight:bold; color:#000; }
163
+ abbr, acronym, .help { border-bottom:1px dotted #CCC; cursor:help; }
164
+ blockquote { margin:15px 20px; font-style:italic; }
165
+ del, .del { text-decoration:line-through; }
166
+ strong, .strong { font-weight:bold; }
167
+ cite, em, q, var { font-style:italic; }
168
+ code, kbd, samp {font-family:monospace; font-size:110%; }
169
+ hr { display:block; height:1px; margin:10px 0; padding:0; border:0 solid #CCC; background:#CCC; color:#CCC;}
170
+ .f-left {float:left;}
171
+ .f-right {float:right;}
172
+ .a-left, tr.a-left td {text-align:left;}
173
+ .a-center, tr.a-center td {text-align:center;}
174
+ .a-right, tr.a-right td {text-align:right;}
175
+ .a-justify {text-align:justify;}
176
+ .va-top {vertical-align:top;}
177
+ .va-middle {vertical-align:middle;}
178
+ .va-bottom {vertical-align:bottom;}
179
+ .clear { clear:both; }
180
+ .box { min-height:1px; }
181
+ .box:after { display:block; visibility:hidden; clear:both; line-height:0; font-size:0; content:"."; }
182
+ .noscreen { display:none; }
183
+ .mleft10 { margin-left: 10px; }
184
+ .mright10 { margin-right: 10px; }
185
+ .mtop10 { margin-top: 10px; }
186
+ .mbottom10 { margin-bottom: 10px; }
187
+
188
+
189
+
190
+ input.small{
191
+ width: 50px;
192
+ }
193
+ input.normal{
194
+ width: 146px;
195
+ }
196
+ .bigger {font-size:115%;}
197
+ .smaller {font-size:85%;}
198
+
199
+ .high {color:#00F;}
200
+ .nonhigh {color:#777;}
201
+
202
+ .foto{ display: block; border: 3px solid #ddd;}
203
+
204
+
205
+ /* added definitions ------------------------------------------------------------ */
206
+ .news-item + .news-item {
207
+ border-top: 1px solid #dddddd;
208
+ }
209
+ .news-date {
210
+ margin-top: 5px;
211
+ }