ruby-lvm-attrib 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/History.txt +5 -0
- data/Manifest.txt +28 -0
- data/README.txt +63 -0
- data/Rakefile +13 -0
- data/Todo.txt +4 -0
- data/bin/generate_field_data +169 -0
- data/lib/lvm/attributes.rb +24 -0
- data/lib/lvm/attributes/2.02.26/lvs.yaml +72 -0
- data/lib/lvm/attributes/2.02.26/lvsseg.yaml +56 -0
- data/lib/lvm/attributes/2.02.26/pvs.yaml +56 -0
- data/lib/lvm/attributes/2.02.26/pvsseg.yaml +16 -0
- data/lib/lvm/attributes/2.02.26/vgs.yaml +72 -0
- data/lib/lvm/attributes/2.02.27/lvs.yaml +72 -0
- data/lib/lvm/attributes/2.02.27/lvsseg.yaml +56 -0
- data/lib/lvm/attributes/2.02.27/pvs.yaml +60 -0
- data/lib/lvm/attributes/2.02.27/pvsseg.yaml +16 -0
- data/lib/lvm/attributes/2.02.27/vgs.yaml +76 -0
- data/lib/lvm/attributes/2.02.29/lvs.yaml +80 -0
- data/lib/lvm/attributes/2.02.29/lvsseg.yaml +56 -0
- data/lib/lvm/attributes/2.02.29/pvs.yaml +64 -0
- data/lib/lvm/attributes/2.02.29/pvsseg.yaml +16 -0
- data/lib/lvm/attributes/2.02.29/vgs.yaml +80 -0
- data/lib/lvm/attributes/2.02.30/lvs.yaml +84 -0
- data/lib/lvm/attributes/2.02.30/lvsseg.yaml +64 -0
- data/lib/lvm/attributes/2.02.30/pvs.yaml +64 -0
- data/lib/lvm/attributes/2.02.30/pvsseg.yaml +16 -0
- data/lib/lvm/attributes/2.02.30/vgs.yaml +80 -0
- data/test/test_ruby-lvm-attributes.rb +0 -0
- metadata +115 -0
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
Binary file
|
data/History.txt
ADDED
data/Manifest.txt
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile
|
5
|
+
Todo.txt
|
6
|
+
bin/generate_field_data
|
7
|
+
lib/lvm/attributes.rb
|
8
|
+
lib/lvm/attributes/2.02.26/lvs.yaml
|
9
|
+
lib/lvm/attributes/2.02.26/lvsseg.yaml
|
10
|
+
lib/lvm/attributes/2.02.26/pvs.yaml
|
11
|
+
lib/lvm/attributes/2.02.26/pvsseg.yaml
|
12
|
+
lib/lvm/attributes/2.02.26/vgs.yaml
|
13
|
+
lib/lvm/attributes/2.02.27/lvs.yaml
|
14
|
+
lib/lvm/attributes/2.02.27/lvsseg.yaml
|
15
|
+
lib/lvm/attributes/2.02.27/pvs.yaml
|
16
|
+
lib/lvm/attributes/2.02.27/pvsseg.yaml
|
17
|
+
lib/lvm/attributes/2.02.27/vgs.yaml
|
18
|
+
lib/lvm/attributes/2.02.29/lvs.yaml
|
19
|
+
lib/lvm/attributes/2.02.29/lvsseg.yaml
|
20
|
+
lib/lvm/attributes/2.02.29/pvs.yaml
|
21
|
+
lib/lvm/attributes/2.02.29/pvsseg.yaml
|
22
|
+
lib/lvm/attributes/2.02.29/vgs.yaml
|
23
|
+
lib/lvm/attributes/2.02.30/lvs.yaml
|
24
|
+
lib/lvm/attributes/2.02.30/lvsseg.yaml
|
25
|
+
lib/lvm/attributes/2.02.30/pvs.yaml
|
26
|
+
lib/lvm/attributes/2.02.30/pvsseg.yaml
|
27
|
+
lib/lvm/attributes/2.02.30/vgs.yaml
|
28
|
+
test/test_ruby-lvm-attributes.rb
|
data/README.txt
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
= ruby-lvm-attrib
|
2
|
+
|
3
|
+
* http://ruby-lvm-attrib.rubyforge.org
|
4
|
+
* mailto:mkent@magoazul.com
|
5
|
+
|
6
|
+
== DESCRIPTION:
|
7
|
+
|
8
|
+
This is a list of attributes for lvm objects. They are generated from the
|
9
|
+
source code and broken down by version.
|
10
|
+
|
11
|
+
At their core these files exist to determine which arguments to pass
|
12
|
+
lvs/vgs/pvs and the subsequent type conversions.
|
13
|
+
|
14
|
+
Currently this is split from the main ruby-lvm gem since these files require
|
15
|
+
updating to follow LVM2 releases.
|
16
|
+
|
17
|
+
== FEATURES/PROBLEMS:
|
18
|
+
|
19
|
+
* This library may go away depending on future progress of ruby-lvm.
|
20
|
+
|
21
|
+
== SYNOPSIS:
|
22
|
+
|
23
|
+
require 'lvm/attributes'
|
24
|
+
|
25
|
+
attributes = Attributes.load("2.0.36", "vgs.yaml")
|
26
|
+
|
27
|
+
== REQUIREMENTS:
|
28
|
+
|
29
|
+
* None
|
30
|
+
|
31
|
+
== INSTALL:
|
32
|
+
|
33
|
+
* sudo gem install ruby-lvm-attrib
|
34
|
+
|
35
|
+
== FEEDBACK:
|
36
|
+
|
37
|
+
Please feel free to submit patches or constructive criticism, I'm still pretty
|
38
|
+
new to ruby and object oriented programming in general.
|
39
|
+
|
40
|
+
== LICENSE:
|
41
|
+
|
42
|
+
(The MIT License)
|
43
|
+
|
44
|
+
Copyright (c) 2008 Matthew Kent, Bravenet Web Services Inc.
|
45
|
+
|
46
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
47
|
+
a copy of this software and associated documentation files (the
|
48
|
+
'Software'), to deal in the Software without restriction, including
|
49
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
50
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
51
|
+
permit persons to whom the Software is furnished to do so, subject to
|
52
|
+
the following conditions:
|
53
|
+
|
54
|
+
The above copyright notice and this permission notice shall be
|
55
|
+
included in all copies or substantial portions of the Software.
|
56
|
+
|
57
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
58
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
59
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
60
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
61
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
62
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
63
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
$:.unshift(File.dirname(__FILE__) + "/lib")
|
6
|
+
require 'lvm/attributes'
|
7
|
+
|
8
|
+
Hoe.new('ruby-lvm-attrib', LVM::Attributes::VERSION) do |p|
|
9
|
+
p.developer('Matthew Kent', 'mkent@magoazul.com')
|
10
|
+
p.remote_rdoc_dir = ''
|
11
|
+
end
|
12
|
+
|
13
|
+
# vim: syntax=Ruby
|
data/Todo.txt
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Build yaml files which provide arguments passed to {lv,pv,vg}s and subsequent
|
4
|
+
# type conversions.
|
5
|
+
#
|
6
|
+
# ./generate_field_data ~/LVM2.2.02.38
|
7
|
+
|
8
|
+
require 'fileutils'
|
9
|
+
require 'yaml'
|
10
|
+
|
11
|
+
VERSION_FILE = "/VERSION"
|
12
|
+
COLUMNS_FILE = "/lib/report/columns.h"
|
13
|
+
|
14
|
+
debug = false
|
15
|
+
|
16
|
+
TYPE_CONVERSION_MAP = {
|
17
|
+
# Only types we can really trust
|
18
|
+
"uint32" => "Integer",
|
19
|
+
"int32" => "Integer",
|
20
|
+
# These were determined by reading the code, they invoke _(u)int32_disp right away
|
21
|
+
"pvmdas" => "Integer",
|
22
|
+
"vgmdas" => "Integer",
|
23
|
+
"lvcount" => "Integer",
|
24
|
+
"lvsegcount" => "Integer",
|
25
|
+
"segstartpe" => "Integer",
|
26
|
+
# listed to return STR?
|
27
|
+
"lvkmaj" => "Integer",
|
28
|
+
"lvkmin" => "Integer",
|
29
|
+
"snpercent" => "Float",
|
30
|
+
"copypercent" => "Float",
|
31
|
+
# size32/64, these do unit formatting unless overridden on command line. We
|
32
|
+
# typically want them in bytes so we can convert them to Integers safely
|
33
|
+
"size32" => "Integer",
|
34
|
+
"size64" => "Integer",
|
35
|
+
# These types return size32/size64 as well
|
36
|
+
"lvkreadahead" => "Integer",
|
37
|
+
"pvsize" => "Integer",
|
38
|
+
"devsize" => "Integer",
|
39
|
+
"pvfree" => "Integer",
|
40
|
+
"pvused" => "Integer",
|
41
|
+
"pvmdafree" => "Integer",
|
42
|
+
"vgsize" => "Integer",
|
43
|
+
"vgfree" => "Integer",
|
44
|
+
"vgmda_free" => "Integer",
|
45
|
+
"chunksize" => "Integer",
|
46
|
+
"segstart" => "Integer",
|
47
|
+
"segsize" => "Integer",
|
48
|
+
"vgmdafree" => "Integer",
|
49
|
+
# Weird one, can be "auto" or size32
|
50
|
+
"lvreadahead" => "String"
|
51
|
+
}
|
52
|
+
|
53
|
+
lvm_source = ARGV[0]
|
54
|
+
|
55
|
+
version = File.readlines(lvm_source + VERSION_FILE)[0].split(' ')[0]
|
56
|
+
|
57
|
+
lvs = []
|
58
|
+
lvssegs = []
|
59
|
+
pvs = []
|
60
|
+
pvssegs = []
|
61
|
+
vgs = []
|
62
|
+
File.readlines(lvm_source + COLUMNS_FILE).each do |line|
|
63
|
+
# eg: FIELD(LVS, lv, STR, "LV UUID", lvid.id[1], 38, uuid, "lv_uuid", "Unique identifier")
|
64
|
+
if line =~ %r{^FIELD\((.*)\)$}
|
65
|
+
fields = $1.split(', ')
|
66
|
+
fields.each { |f| f.gsub!(%r{^"}, ''); f.gsub!(%r{"$}, '') }
|
67
|
+
p fields if debug
|
68
|
+
app = fields[0]
|
69
|
+
general_type = fields[2]
|
70
|
+
specific_type = fields[6]
|
71
|
+
column = fields[7]
|
72
|
+
method = fields[7].dup
|
73
|
+
description = fields[8]
|
74
|
+
p app, general_type, specific_type, column, method, description if debug
|
75
|
+
|
76
|
+
if general_type == "NUM"
|
77
|
+
attribute_type = TYPE_CONVERSION_MAP[specific_type]
|
78
|
+
if attribute_type.nil?
|
79
|
+
puts "Oops, missing type conversion data of column '#{attribute}' use by '#{app}' which says its going to return a '#{specific_type}'"
|
80
|
+
puts "Figure out the missing type and rerun."
|
81
|
+
exit 1
|
82
|
+
end
|
83
|
+
else
|
84
|
+
attribute_type = "String"
|
85
|
+
end
|
86
|
+
|
87
|
+
# our shorter nicer method names, according to the man page these can be
|
88
|
+
# dropped when passing column names as arguments as well, but i found a few
|
89
|
+
# with issues (seg_start).
|
90
|
+
case app
|
91
|
+
when "LVS"
|
92
|
+
method.sub!(%r{^lv_}, '')
|
93
|
+
when "SEGS"
|
94
|
+
method.sub!(%r{^seg_}, '')
|
95
|
+
when "PVS"
|
96
|
+
method.sub!(%r{^pv_}, '')
|
97
|
+
when "PVSEGS"
|
98
|
+
method.sub!(%r{^pvseg_}, '')
|
99
|
+
when "VGS"
|
100
|
+
method.sub!(%r{^vg_}, '')
|
101
|
+
end
|
102
|
+
|
103
|
+
attribute = {
|
104
|
+
:method => method,
|
105
|
+
:column => column,
|
106
|
+
:type_hint => attribute_type,
|
107
|
+
:description => description
|
108
|
+
}
|
109
|
+
|
110
|
+
case app
|
111
|
+
when "LVS"
|
112
|
+
lvs << attribute
|
113
|
+
when "SEGS"
|
114
|
+
lvssegs << attribute
|
115
|
+
when "PVS"
|
116
|
+
pvs << attribute
|
117
|
+
when "PVSEGS"
|
118
|
+
pvssegs << attribute
|
119
|
+
when "VGS"
|
120
|
+
vgs << attribute
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# we use vg_uuid as our crossover attribute that links vg->lv and vg->pv
|
126
|
+
attribute = { :method => "vg_uuid",
|
127
|
+
:column => "vg_uuid",
|
128
|
+
:type_hint => "String",
|
129
|
+
:description => "For VolumeGroup to LogicalVolume relationship." }
|
130
|
+
lvs << attribute
|
131
|
+
attribute = { :method => "vg_uuid",
|
132
|
+
:column => "vg_uuid",
|
133
|
+
:type_hint => "String",
|
134
|
+
:description => "For VolumeGroup to PhysicalVolume relationship." }
|
135
|
+
pvs << attribute
|
136
|
+
|
137
|
+
# and we link lv->lvsegment, pv->pvsegment
|
138
|
+
attribute = { :method => "lv_uuid",
|
139
|
+
:column => "lv_uuid",
|
140
|
+
:type_hint => "String",
|
141
|
+
:description => "For LogicalVolume to LogicalVolumeSegment relationship." }
|
142
|
+
lvssegs << attribute
|
143
|
+
attribute = { :method => "pv_uuid",
|
144
|
+
:column => "pv_uuid",
|
145
|
+
:type_hint => "String",
|
146
|
+
:description => "For PhysicalVolume to PhysicalVolumeSegment relationship." }
|
147
|
+
pvssegs << attribute
|
148
|
+
|
149
|
+
lvs.sort! {|x,y| x[:column] <=> y[:column]}
|
150
|
+
lvssegs.sort! {|x,y| x[:column] <=> y[:column]}
|
151
|
+
pvs.sort! {|x,y| x[:column] <=> y[:column]}
|
152
|
+
pvssegs.sort! {|x,y| x[:column] <=> y[:column]}
|
153
|
+
vgs.sort! {|x,y| x[:column] <=> y[:column]}
|
154
|
+
|
155
|
+
FileUtils.mkdir(version)
|
156
|
+
|
157
|
+
disclaimer=<<go
|
158
|
+
# These are column to object attribute mappings
|
159
|
+
# generated by #{$0} based on
|
160
|
+
# #{lvm_source}/lib/report/columns.h
|
161
|
+
go
|
162
|
+
|
163
|
+
File.open("#{version}/lvs.yaml", "w") { |f| f.write(disclaimer); f.write(lvs.to_yaml) }
|
164
|
+
File.open("#{version}/lvsseg.yaml", "w") { |f| f.write(disclaimer); f.write(lvssegs.to_yaml)}
|
165
|
+
File.open("#{version}/pvs.yaml", "w") { |f| f.write(disclaimer); f.write(pvs.to_yaml) }
|
166
|
+
File.open("#{version}/pvsseg.yaml", "w") { |f| f.write(disclaimer); f.write(pvssegs.to_yaml)}
|
167
|
+
File.open("#{version}/vgs.yaml", "w") { |f| f.write(disclaimer); f.write(vgs.to_yaml) }
|
168
|
+
|
169
|
+
puts "Done."
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module LVM
|
4
|
+
module Attributes
|
5
|
+
VERSION = '0.0.1'
|
6
|
+
|
7
|
+
def load(version, name)
|
8
|
+
cwd = File.dirname(__FILE__)
|
9
|
+
|
10
|
+
# was going to be symlinks, but rubygems didn't seem to want to package
|
11
|
+
# them
|
12
|
+
if version == "2.02.28"
|
13
|
+
version = "2.02.27"
|
14
|
+
elsif ((31..39).map { |x| "2.02.#{x}" }).include?(version)
|
15
|
+
version = "2.02.30"
|
16
|
+
end
|
17
|
+
|
18
|
+
file = File.join(cwd, "attributes", version, name)
|
19
|
+
|
20
|
+
return YAML.load_file(file)
|
21
|
+
end
|
22
|
+
module_function :load
|
23
|
+
end # module Attributes
|
24
|
+
end # module LVM
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# These are column to object attribute mappings
|
2
|
+
# generated by ./generate_field_data based on
|
3
|
+
# /home/iscsidev/LVM2.2.02.26/lib/report/columns.h
|
4
|
+
---
|
5
|
+
- :method: copy_percent
|
6
|
+
:type_hint: Float
|
7
|
+
:column: copy_percent
|
8
|
+
:description: For mirrors and pvmove
|
9
|
+
- :method: attr
|
10
|
+
:type_hint: String
|
11
|
+
:column: lv_attr
|
12
|
+
:description: Various attributes - see man page.
|
13
|
+
- :method: kernel_major
|
14
|
+
:type_hint: String
|
15
|
+
:column: lv_kernel_major
|
16
|
+
:description: Currently assigned major number or -1 if LV is not active.
|
17
|
+
- :method: kernel_minor
|
18
|
+
:type_hint: String
|
19
|
+
:column: lv_kernel_minor
|
20
|
+
:description: Currently assigned minor number or -1 if LV is not active.
|
21
|
+
- :method: major
|
22
|
+
:type_hint: Integer
|
23
|
+
:column: lv_major
|
24
|
+
:description: Persistent major number or -1 if not persistent.
|
25
|
+
- :method: minor
|
26
|
+
:type_hint: Integer
|
27
|
+
:column: lv_minor
|
28
|
+
:description: Persistent minor number or -1 if not persistent.
|
29
|
+
- :method: name
|
30
|
+
:type_hint: String
|
31
|
+
:column: lv_name
|
32
|
+
:description: Name. LVs created for internal use are enclosed in brackets.
|
33
|
+
- :method: size
|
34
|
+
:type_hint: Integer
|
35
|
+
:column: lv_size
|
36
|
+
:description: Size of LV in current units.
|
37
|
+
- :method: tags
|
38
|
+
:type_hint: String
|
39
|
+
:column: lv_tags
|
40
|
+
:description: Tags
|
41
|
+
- :method: uuid
|
42
|
+
:type_hint: String
|
43
|
+
:column: lv_uuid
|
44
|
+
:description: Unique identifier
|
45
|
+
- :method: mirror_log
|
46
|
+
:type_hint: String
|
47
|
+
:column: mirror_log
|
48
|
+
:description: For mirrors
|
49
|
+
- :method: modules
|
50
|
+
:type_hint: String
|
51
|
+
:column: modules
|
52
|
+
:description: Kernel device-mapper modules required for this LV.
|
53
|
+
- :method: move_pv
|
54
|
+
:type_hint: String
|
55
|
+
:column: move_pv
|
56
|
+
:description: For pvmove
|
57
|
+
- :method: origin
|
58
|
+
:type_hint: String
|
59
|
+
:column: origin
|
60
|
+
:description: For snapshots
|
61
|
+
- :method: seg_count
|
62
|
+
:type_hint: Integer
|
63
|
+
:column: seg_count
|
64
|
+
:description: Number of segments in LV.
|
65
|
+
- :method: snap_percent
|
66
|
+
:type_hint: Float
|
67
|
+
:column: snap_percent
|
68
|
+
:description: For snapshots
|
69
|
+
- :method: vg_uuid
|
70
|
+
:type_hint: String
|
71
|
+
:column: vg_uuid
|
72
|
+
:description: For VolumeGroup to LogicalVolume relationship.
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# These are column to object attribute mappings
|
2
|
+
# generated by ./generate_field_data based on
|
3
|
+
# /home/iscsidev/LVM2.2.02.26/lib/report/columns.h
|
4
|
+
---
|
5
|
+
- :method: chunk_size
|
6
|
+
:type_hint: Integer
|
7
|
+
:column: chunk_size
|
8
|
+
:description: For snapshots
|
9
|
+
- :method: chunksize
|
10
|
+
:type_hint: Integer
|
11
|
+
:column: chunksize
|
12
|
+
:description: For snapshots
|
13
|
+
- :method: devices
|
14
|
+
:type_hint: String
|
15
|
+
:column: devices
|
16
|
+
:description: Underlying devices used with starting extent numbers.
|
17
|
+
- :method: lv_uuid
|
18
|
+
:type_hint: String
|
19
|
+
:column: lv_uuid
|
20
|
+
:description: For LogicalVolume to LogicalVolumeSegment relationship.
|
21
|
+
- :method: region_size
|
22
|
+
:type_hint: Integer
|
23
|
+
:column: region_size
|
24
|
+
:description: For mirrors
|
25
|
+
- :method: regionsize
|
26
|
+
:type_hint: Integer
|
27
|
+
:column: regionsize
|
28
|
+
:description: For mirrors
|
29
|
+
- :method: size
|
30
|
+
:type_hint: Integer
|
31
|
+
:column: seg_size
|
32
|
+
:description: Size of segment in current units.
|
33
|
+
- :method: start
|
34
|
+
:type_hint: Integer
|
35
|
+
:column: seg_start
|
36
|
+
:description: Offset within the LV to the start of the segment in current units.
|
37
|
+
- :method: tags
|
38
|
+
:type_hint: String
|
39
|
+
:column: seg_tags
|
40
|
+
:description: Tags
|
41
|
+
- :method: segtype
|
42
|
+
:type_hint: String
|
43
|
+
:column: segtype
|
44
|
+
:description: Type of LV segment
|
45
|
+
- :method: stripe_size
|
46
|
+
:type_hint: Integer
|
47
|
+
:column: stripe_size
|
48
|
+
:description: For stripes
|
49
|
+
- :method: stripes
|
50
|
+
:type_hint: Integer
|
51
|
+
:column: stripes
|
52
|
+
:description: Number of stripes or mirror legs.
|
53
|
+
- :method: stripesize
|
54
|
+
:type_hint: Integer
|
55
|
+
:column: stripesize
|
56
|
+
:description: For stripes
|