rubyipmi 0.6.0 → 0.7.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 (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