rubyipmi 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +15 -0
  2. data/Gemfile +5 -3
  3. data/README.md +24 -14
  4. data/Rakefile +82 -4
  5. data/VERSION +1 -1
  6. data/lib/rubyipmi.rb +36 -14
  7. data/lib/rubyipmi/commands/basecommand.rb +57 -119
  8. data/lib/rubyipmi/freeipmi/commands/basecommand.rb +29 -25
  9. data/lib/rubyipmi/freeipmi/commands/bmc.rb +3 -3
  10. data/lib/rubyipmi/freeipmi/commands/bmcconfig.rb +6 -6
  11. data/lib/rubyipmi/freeipmi/commands/bmcinfo.rb +3 -23
  12. data/lib/rubyipmi/freeipmi/commands/fru.rb +117 -23
  13. data/lib/rubyipmi/freeipmi/commands/lan.rb +32 -37
  14. data/lib/rubyipmi/freeipmi/commands/power.rb +1 -1
  15. data/lib/rubyipmi/freeipmi/commands/sensors.rb +53 -50
  16. data/lib/rubyipmi/freeipmi/connection.rb +16 -2
  17. data/lib/rubyipmi/freeipmi/errorcodes.rb +25 -2
  18. data/lib/rubyipmi/ipmitool/commands/basecommand.rb +20 -37
  19. data/lib/rubyipmi/ipmitool/commands/bmc.rb +1 -24
  20. data/lib/rubyipmi/ipmitool/commands/chassis.rb +1 -0
  21. data/lib/rubyipmi/ipmitool/commands/fru.rb +112 -30
  22. data/lib/rubyipmi/ipmitool/commands/lan.rb +55 -77
  23. data/lib/rubyipmi/ipmitool/commands/power.rb +10 -4
  24. data/lib/rubyipmi/ipmitool/commands/sensors.rb +53 -80
  25. data/lib/rubyipmi/ipmitool/connection.rb +19 -3
  26. data/lib/rubyipmi/ipmitool/errorcodes.rb +51 -3
  27. data/rubyipmi.gemspec +73 -33
  28. data/spec/Vagrantfile +45 -0
  29. data/spec/fixtures/freeipmi/bmc_config.txt +317 -0
  30. data/spec/fixtures/freeipmi/bmc_config_lan_conf.txt +19 -0
  31. data/spec/fixtures/freeipmi/bmc_info.txt +32 -0
  32. data/spec/fixtures/freeipmi/errors.txt +3 -0
  33. data/spec/fixtures/freeipmi/fru.txt +13 -0
  34. data/spec/fixtures/freeipmi/sensors.txt +29 -0
  35. data/spec/fixtures/ipmitool/bmc_info.txt +20 -0
  36. data/spec/fixtures/ipmitool/errors.txt +10 -0
  37. data/spec/fixtures/ipmitool/fru.txt +96 -0
  38. data/spec/fixtures/ipmitool/lan.txt +17 -0
  39. data/spec/fixtures/ipmitool/sensors.txt +105 -0
  40. data/spec/integration/bmc_spec.rb +49 -0
  41. data/spec/{chassis_config_spec.rb → integration/chassis_config_spec.rb} +6 -6
  42. data/spec/integration/chassis_spec.rb +26 -0
  43. data/spec/integration/connection_spec.rb +35 -0
  44. data/spec/{fru_spec.rb → integration/fru_spec.rb} +11 -10
  45. data/spec/{lan_spec.rb → integration/lan_spec.rb} +9 -7
  46. data/spec/integration/power_spec.rb +40 -0
  47. data/spec/{rubyipmi_spec.rb → integration/rubyipmi_spec.rb} +7 -10
  48. data/spec/{sensor_spec.rb → integration/sensor_spec.rb} +5 -20
  49. data/spec/manifests/default.pp +50 -0
  50. data/spec/puppetmodules/archive/LICENSE-2.0.txt +202 -0
  51. data/spec/puppetmodules/archive/Modulefile +8 -0
  52. data/spec/puppetmodules/archive/README.md +40 -0
  53. data/spec/puppetmodules/archive/manifests/download.pp +157 -0
  54. data/spec/puppetmodules/archive/manifests/extract.pp +81 -0
  55. data/spec/puppetmodules/archive/manifests/init.pp +70 -0
  56. data/spec/puppetmodules/archive/manifests/tar-gz.pp +7 -0
  57. data/spec/puppetmodules/archive/manifests/zip.pp +7 -0
  58. data/spec/puppetmodules/archive/metadata.json +26 -0
  59. data/spec/spec_helper.rb +35 -3
  60. data/spec/unit/freeipmi/bmc-info_spec.rb +42 -0
  61. data/spec/unit/freeipmi/bmc_spec.rb +44 -0
  62. data/spec/unit/freeipmi/connection_spec.rb +56 -0
  63. data/spec/unit/freeipmi/errorcodes_spec.rb +34 -0
  64. data/spec/unit/freeipmi/fru_spec.rb +77 -0
  65. data/spec/unit/freeipmi/lan_spec.rb +0 -0
  66. data/spec/unit/freeipmi/sensors_spec.rb +83 -0
  67. data/spec/unit/ipmitool/bmc_spec.rb +78 -0
  68. data/spec/unit/ipmitool/connection_spec.rb +58 -0
  69. data/spec/unit/ipmitool/errorcodes_spec.rb +34 -0
  70. data/spec/unit/ipmitool/fru_spec.rb +77 -0
  71. data/spec/unit/ipmitool/lan_spec.rb +93 -0
  72. data/spec/unit/ipmitool/sensors_spec.rb +95 -0
  73. data/spec/unit/rubyipmi_spec.rb +31 -0
  74. data/spec/vagrant +27 -0
  75. data/spec/vagrant.pub +1 -0
  76. metadata +157 -106
  77. data/.document +0 -5
  78. data/.rspec +0 -1
  79. data/Gemfile.lock +0 -33
  80. data/spec/bmc_spec.rb +0 -46
  81. data/spec/chassis_spec.rb +0 -26
  82. data/spec/connection_spec.rb +0 -31
  83. data/spec/power_spec.rb +0 -42
@@ -0,0 +1,8 @@
1
+ name 'jproyo-archive'
2
+ version '0.0.4'
3
+ source 'https://github.com/mxhero/puppet-modules/tree/master/modules/archive'
4
+ author 'Juan Pablo Royo'
5
+ license 'Apache 2.0'
6
+ summary 'Archive download and extractor to manage tar, zip, tarballs, etc.'
7
+ description "Archive download and extractor to manage tar, zip, tarballs, etc."
8
+ project_page 'https://github.com/mxhero/puppet-modules/tree/master/modules/archive'
@@ -0,0 +1,40 @@
1
+ Archive Puppet Module
2
+ ====================
3
+
4
+ Overview
5
+ --------
6
+
7
+ Puppet Module to download and extract tar and zip archives based on [camptocamp/puppet-archive](https://github.com/camptocamp/puppet-archive).
8
+
9
+ Supported archive types are:
10
+
11
+ - `tar.gz`, `tgz`
12
+ - `tar.bz2`, `tbz2`
13
+ - `tar.xz`, `txz`
14
+ - `zip`
15
+
16
+ Usage
17
+ -----
18
+
19
+ Example:
20
+
21
+ archive { 'apache-tomcat-6.0.26':
22
+ ensure => present,
23
+ url => 'http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz',
24
+ target => '/opt',
25
+ }
26
+
27
+ License
28
+ -------
29
+
30
+ Copyright (c) 2012 Camptocamp SA
31
+
32
+ This script is licensed under the Apache License, Version 2.0.
33
+
34
+ See http://www.apache.org/licenses/LICENSE-2.0.html for the full license text.
35
+
36
+
37
+ Support
38
+ -------
39
+
40
+ Please log tickets and issues at our [project site](https://github.com/camptocamp/puppet-archive/issues).
@@ -0,0 +1,157 @@
1
+ /*
2
+
3
+ == Definition: archive::download
4
+
5
+ Archive downloader with integrity verification.
6
+
7
+ Parameters:
8
+
9
+ - *$url:
10
+ - *$digest_url:
11
+ - *$digest_string: Default value ""
12
+ - *$digest_type: Default value "md5".
13
+ - *$timeout: Default value 120.
14
+ - *$src_target: Default value "/usr/src".
15
+ - *$allow_insecure: Default value false.
16
+
17
+ Example usage:
18
+
19
+ archive::download {"apache-tomcat-6.0.26.tar.gz":
20
+ ensure => present,
21
+ url => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
22
+ }
23
+
24
+ archive::download {"apache-tomcat-6.0.26.tar.gz":
25
+ ensure => present,
26
+ digest_string => "f9eafa9bfd620324d1270ae8f09a8c89",
27
+ url => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
28
+ }
29
+
30
+ */
31
+ define archive::download (
32
+ $url,
33
+ $ensure=present,
34
+ $checksum=true,
35
+ $digest_url='',
36
+ $digest_string='',
37
+ $digest_type='md5',
38
+ $timeout=120,
39
+ $src_target='/usr/src',
40
+ $allow_insecure=false,
41
+ ) {
42
+
43
+ $insecure_arg = $allow_insecure ? {
44
+ true => '-k',
45
+ default => '',
46
+ }
47
+
48
+ if !defined(Package['curl']) {
49
+ package{'curl':
50
+ ensure => present,
51
+ }
52
+ }
53
+
54
+ case $checksum {
55
+ true : {
56
+ case $digest_type {
57
+ 'md5','sha1','sha224','sha256','sha384','sha512' : {
58
+ $checksum_cmd = "${digest_type}sum -c ${name}.${digest_type}"
59
+ }
60
+ default: { fail 'Unimplemented digest type' }
61
+ }
62
+
63
+ if $digest_url != '' and $digest_string != '' {
64
+ fail 'digest_url and digest_string should not be used together !'
65
+ }
66
+
67
+ if $digest_string == '' {
68
+
69
+ case $ensure {
70
+ present: {
71
+
72
+ if $digest_url == '' {
73
+ $digest_src = "${url}.${digest_type}"
74
+ } else {
75
+ $digest_src = $digest_url
76
+ }
77
+
78
+ exec {"download digest of archive $name":
79
+ command => "curl ${insecure_arg} -o ${src_target}/${name}.${digest_type} ${digest_src}",
80
+ creates => "${src_target}/${name}.${digest_type}",
81
+ timeout => $timeout,
82
+ notify => Exec["download archive $name and check sum"],
83
+ path => "/usr/local/bin:/usr/bin:/bin",
84
+ require => Package['curl'],
85
+ }
86
+
87
+ }
88
+ absent: {
89
+ file{"${src_target}/${name}.${digest_type}":
90
+ ensure => absent,
91
+ purge => true,
92
+ force => true,
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ if $digest_string != '' {
99
+ case $ensure {
100
+ present: {
101
+ file {"${src_target}/${name}.${digest_type}":
102
+ ensure => $ensure,
103
+ content => "${digest_string} *${name}",
104
+ notify => Exec["download archive $name and check sum"],
105
+ }
106
+ }
107
+ absent: {
108
+ file {"${src_target}/${name}.${digest_type}":
109
+ ensure => absent,
110
+ purge => true,
111
+ force => true,
112
+ }
113
+ }
114
+ }
115
+ }
116
+ }
117
+ false : { notice 'No checksum for this archive' }
118
+ default: { fail ( "Unknown checksum value: '${checksum}'" ) }
119
+ }
120
+
121
+ case $ensure {
122
+ present: {
123
+ exec {"download archive $name and check sum":
124
+ command => "curl ${insecure_arg} -o ${src_target}/${name} ${url}",
125
+ path => "/usr/local/bin:/usr/bin:/bin",
126
+ creates => "${src_target}/${name}",
127
+ logoutput => true,
128
+ timeout => $timeout,
129
+ require => Package['curl'],
130
+ notify => $checksum ? {
131
+ true => Exec["rm-on-error-${name}"],
132
+ default => undef,
133
+ },
134
+ refreshonly => $checksum ? {
135
+ true => true,
136
+ default => undef,
137
+ },
138
+ }
139
+
140
+ exec {"rm-on-error-${name}":
141
+ command => "rm -f ${src_target}/${name} ${src_target}/${name}.${digest_type} && exit 1",
142
+ unless => $checksum_cmd,
143
+ cwd => $src_target,
144
+ path => "/usr/local/bin:/usr/bin:/bin",
145
+ refreshonly => true,
146
+ }
147
+ }
148
+ absent: {
149
+ file {"${src_target}/${name}":
150
+ ensure => absent,
151
+ purge => true,
152
+ force => true,
153
+ }
154
+ }
155
+ default: { fail ( "Unknown ensure value: '${ensure}'" ) }
156
+ }
157
+ }
@@ -0,0 +1,81 @@
1
+ /*
2
+
3
+ == Definition: archive::extract
4
+
5
+ Archive extractor.
6
+
7
+ Parameters:
8
+
9
+ - *$target: Destination directory
10
+ - *$src_target: Default value "/usr/src".
11
+ - *$root_dir: Default value "".
12
+ - *$extension: Default value ".tar.gz".
13
+ - *$timeout: Default value 120.
14
+
15
+ Example usage:
16
+
17
+ archive::extract {"apache-tomcat-6.0.26":
18
+ ensure => present,
19
+ target => "/opt",
20
+ }
21
+
22
+ This means we want to extract the local archive
23
+ (maybe downloaded with archive::download)
24
+ '/usr/src/apache-tomcat-6.0.26.tar.gz' in '/src/apache-tomcat-6.0.26'
25
+
26
+ Warning:
27
+
28
+ The parameter *$root_dir* must be used if the root directory of the archive
29
+ is different from the name of the archive *$name*. To extract the name of
30
+ the root directory use the commands "tar tf archive.tar.gz" or
31
+ "unzip -l archive.zip"
32
+
33
+ */
34
+ define archive::extract (
35
+ $target,
36
+ $ensure=present,
37
+ $src_target='/usr/src',
38
+ $root_dir='',
39
+ $extension='tar.gz',
40
+ $onlyif='true',
41
+ $timeout=120) {
42
+
43
+ if $root_dir != '' {
44
+ $extract_dir = "${target}/${root_dir}"
45
+ } else {
46
+ $extract_dir = "${target}/${name}"
47
+ }
48
+
49
+ case $ensure {
50
+ present: {
51
+
52
+ $extract_zip = "unzip -o ${src_target}/${name}.${extension} -d ${target}"
53
+ $extract_targz = "tar --no-same-owner --no-same-permissions -xzf ${src_target}/${name}.${extension} -C ${target}"
54
+ $extract_tarbz2 = "tar --no-same-owner --no-same-permissions -xjf ${src_target}/${name}.${extension} -C ${target}"
55
+
56
+ exec {"$name unpack":
57
+ command => $extension ? {
58
+ 'zip' => "mkdir -p ${target} && ${extract_zip}",
59
+ 'tar.gz' => "mkdir -p ${target} && ${extract_targz}",
60
+ 'tgz' => "mkdir -p ${target} && ${extract_targz}",
61
+ 'tar.bz2' => "mkdir -p ${target} && ${extract_tarbz2}",
62
+ 'tgz2' => "mkdir -p ${target} && ${extract_tarbz2}",
63
+ default => fail ( "Unknown extension value '${extension}'" ),
64
+ },
65
+ path => "/usr/local/bin:/usr/bin:/bin",
66
+ creates => $extract_dir,
67
+ onlyif => $onlyif,
68
+ timeout => $timeout
69
+ }
70
+ }
71
+ absent: {
72
+ file {$extract_dir:
73
+ ensure => absent,
74
+ recurse => true,
75
+ purge => true,
76
+ force => true,
77
+ }
78
+ }
79
+ default: { err ( "Unknown ensure value: '${ensure}'" ) }
80
+ }
81
+ }
@@ -0,0 +1,70 @@
1
+ /*
2
+
3
+ == Definition: archive
4
+
5
+ Download and extract an archive.
6
+
7
+ Parameters:
8
+
9
+ - *$url:
10
+ - *$target: Destination directory
11
+ - *$checksum: Default value "true"
12
+ - *$digest_url: Default value ""
13
+ - *$digest_string: Default value ""
14
+ - *$digest_type: Default value "md5"
15
+ - *$src_target: Default value "/usr/src"
16
+ - *$root_dir: Default value ""
17
+ - *$extension: Default value ".tar.gz"
18
+ - *$timeout: Default value 120
19
+ - *$allow_insecure: Default value false
20
+ - *$onlyif: Expression console to test if we have to execute this class
21
+
22
+ Example usage:
23
+
24
+ archive {"apache-tomcat-6.0.26":
25
+ ensure => present,
26
+ url => "http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.26/bin/apache-tomcat-6.0.26.tar.gz",
27
+ target => "/opt",
28
+ }
29
+
30
+ */
31
+ define archive (
32
+ $url,
33
+ $target,
34
+ $ensure=present,
35
+ $checksum=true,
36
+ $digest_url='',
37
+ $digest_string='',
38
+ $digest_type='md5',
39
+ $timeout=120,
40
+ $root_dir='',
41
+ $extension='tar.gz',
42
+ $src_target='/usr/src',
43
+ $allow_insecure=true,
44
+ $onlyif = "true",
45
+ ) {
46
+
47
+ archive::download {"${name}.${extension}":
48
+ ensure => $ensure,
49
+ url => $url,
50
+ checksum => $checksum,
51
+ digest_url => $digest_url,
52
+ digest_string => $digest_string,
53
+ digest_type => $digest_type,
54
+ timeout => $timeout,
55
+ src_target => $src_target,
56
+ allow_insecure => $allow_insecure,
57
+ }
58
+
59
+ archive::extract {$name:
60
+ ensure => $ensure,
61
+ target => $target,
62
+ src_target => $src_target,
63
+ root_dir => $root_dir,
64
+ extension => $extension,
65
+ timeout => $timeout,
66
+ onlyif => $onlyif,
67
+ require => Archive::Download["${name}.${extension}"]
68
+ }
69
+
70
+ }
@@ -0,0 +1,7 @@
1
+ define archive::tar-gz($source, $target) {
2
+ exec {"$name unpack":
3
+ command => "curl ${source} | tar -xzf - -C ${target} && touch ${name}",
4
+ creates => $name,
5
+ require => Package[curl],
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ define archive::zip($source, $target) {
2
+ exec {"$name unpack":
3
+ command => "TMPFILE=\$(mktemp); curl -o \${TMPFILE}.zip ${source} && unzip \${TMPFILE}.zip -d ${target} && rm \$TMPFILE && rm \${TMPFILE}.zip && touch ${name}",
4
+ creates => $name,
5
+ require => Package['unzip'],
6
+ }
7
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "jproyo-archive",
3
+ "version": "0.0.4",
4
+ "source": "https://github.com/mxhero/puppet-modules/tree/master/modules/archive",
5
+ "author": "Juan Pablo Royo",
6
+ "license": "Apache 2.0",
7
+ "summary": "Archive download and extractor to manage tar, zip, tarballs, etc.",
8
+ "description": "Archive download and extractor to manage tar, zip, tarballs, etc.",
9
+ "project_page": "https://github.com/mxhero/puppet-modules/tree/master/modules/archive",
10
+ "dependencies": [
11
+
12
+ ],
13
+ "types": [
14
+
15
+ ],
16
+ "checksums": {
17
+ "LICENSE-2.0.txt": "3b83ef96387f14655fc854ddc3c6bd57",
18
+ "Modulefile": "a76a4c40cc1d9f180cc939b25ffef2d7",
19
+ "README.md": "4d073a0b89325bec1043077da735d2b6",
20
+ "manifests/download.pp": "4534c4e36c4c66709d6c7c2b81c0bb4d",
21
+ "manifests/extract.pp": "b71cf3b77a20be26f2955e16c4ddf322",
22
+ "manifests/init.pp": "7736371f5930f37ba1eadde4b3015c83",
23
+ "manifests/tar-gz.pp": "b5be6abbf6117ced47a607c44cb32bba",
24
+ "manifests/zip.pp": "6acec396618df9c492a576c1fb372b6c"
25
+ }
26
+ }
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,44 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '../', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
4
  require 'rubyipmi'
5
5
 
6
6
  # Requires supporting files with custom matchers and macros, etc,
7
7
  # in ./support/ and its subdirectories.
8
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
8
+
9
+ #Dir["#{File.dirname(__FILE__)}/unit/**/*.rb"].each {|f| require f}
10
+
11
+ def command_is_eql?(source, expected)
12
+ src = source.split(' ')
13
+ exp = expected.split(' ')
14
+ return exp - src
15
+ end
16
+
17
+ def verify_freeipmi_command(cmdobj, exp_args_count, expcmd)
18
+ actual = cmdobj.lastcall
19
+ actual.scan(/(^#{Regexp.escape(expcmd)})/) do |cmd_match|
20
+ cmd_match.first.should eq(expcmd)
21
+ end
22
+ args_match = actual.scan(/(\-{2}[\w-]*=?[-\w\/]*)/)
23
+ # not sure how to exactly test for arguments since they could vary, so we will need to use count for now
24
+ #args_match.should =~ exp_args
25
+ args_match.count.should eq(exp_args_count)
26
+ end
27
+
28
+
29
+ def verify_ipmitool_command(cmdobj, exp_args_count, expcmd, required_args)
30
+ actual = cmdobj.lastcall
31
+ actual.scan(/(^#{Regexp.escape(expcmd)})/) do |cmd_match|
32
+ cmd_match.first.should eq(expcmd)
33
+ end
34
+ args_match = actual.scan(/(-\w\s[\w\d\S]*)/)
35
+ actual.include?(required_args).should be_true
36
+ # not sure how to exactly test for arguments since they could vary, so we will need to use count for now
37
+ #args_match.should =~ exp_args
38
+ args_match.count.should eq(exp_args_count)
39
+ end
40
+
9
41
 
10
42
  RSpec.configure do |config|
11
-
43
+
12
44
  end