ruby-amt 0.1.0

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