CloudyScripts 1.8.31 → 1.8.32

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.
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ require 'rake/testtask'
12
12
 
13
13
  spec = Gem::Specification.new do |s|
14
14
  s.name = 'CloudyScripts'
15
- s.version = '1.8.31'
15
+ s.version = '1.8.32'
16
16
  s.has_rdoc = true
17
17
  s.extra_rdoc_files = ['README.rdoc', 'LICENSE']
18
18
  s.summary = 'Scripts to facilitate programming for infrastructure clouds.'
@@ -79,11 +79,31 @@ class RemoteCommandHandler
79
79
  get_output("e2label #{device}").strip
80
80
  end
81
81
 
82
+ # Get device label
83
+ def get_device_label_ext(device, fs_type)
84
+ if fs_type.eql?("xfs")
85
+ cmd = "xfs_admin -l #{device} | sed -r -e 's/^label[[:blank:]]*=[[:blank:]]*\"(.*)\"$/\\1/'"
86
+ else
87
+ cmd = "e2label #{device}"
88
+ end
89
+ get_output(cmd).strip
90
+ end
91
+
82
92
  # Set device label
83
93
  def set_device_label(device, label)
84
94
  remote_execute("e2label #{device} #{label}", nil, false)
85
95
  end
86
96
 
97
+ # Set device label
98
+ def set_device_label_ext(device, label, fs_type)
99
+ if fs_type.eql?("xfs")
100
+ cmd = "xfs_admin -L #{label} #{device}"
101
+ else
102
+ cmd = "e2label #{device} #{label}"
103
+ end
104
+ remote_execute("e2label #{device} #{label}", nil, false)
105
+ end
106
+
87
107
  # Get filesystem type
88
108
  def get_root_fs_type()
89
109
  get_output("cat /etc/mtab | grep -E '[[:blank:]]+\/[[:blank:]]+' | cut -d ' ' -f 3").strip
@@ -428,7 +428,7 @@ module StateTransitionHelper
428
428
  # * image_id => ID of the AMI created and registered
429
429
  def register_snapshot(snapshot_id, name, root_device_name, description, kernel_id, ramdisk_id, architecture)
430
430
  post_message("going to register snapshot #{snapshot_id}...")
431
- @logger.debug "register snapshot #{snapshot_id} as #{name}"
431
+ @logger.debug "register snapshot #{snapshot_id} as #{name} using AKI '#{kernel_id}' ARI '#{ramdisk_id}' and arch '#{architecture}'"
432
432
  res = ec2_handler().register_image_updated(:snapshot_id => snapshot_id,
433
433
  :kernel_id => kernel_id, :architecture => architecture,
434
434
  :root_device_name => root_device_name,
@@ -474,11 +474,11 @@ module StateTransitionHelper
474
474
  if status == false
475
475
  raise Exception.new("failed to create #{type} filesystem on #{device} device on #{dns_name}")
476
476
  end
477
- post_message("filesystem system successfully created")
477
+ post_message("#{fs_type} filesystem system successfully created on device #{device}")
478
478
  if !label.nil? && !label.empty?
479
479
  post_message("going to add label #{label} for device #{device}...")
480
480
  @logger.debug "add label '#{label}' to device '#{device}'"
481
- if remote_handler().set_device_label(device, label)
481
+ if remote_handler().set_device_label_ext(device, label, fs_type)
482
482
  post_message("label #{label} added to device #{device}")
483
483
  else
484
484
  raise Exception.new("failed to add label #{label} to device #{device}")
@@ -622,6 +622,35 @@ module StateTransitionHelper
622
622
  return root_fs_type
623
623
  end
624
624
 
625
+ # Get root filesytem type and label
626
+ def get_root_partition_fs_type_and_label()
627
+ post_message("Retrieving '/' root partition filesystem type and label...")
628
+ @logger.debug "get root partition filesystel type"
629
+ # get root device and then its fs type
630
+ root_fs_type = remote_handler().get_root_fs_type()
631
+ @logger.debug "Found '#{root_fs_type}' as root filesystem type"
632
+ if root_fs_type.nil? || root_fs_type.empty?
633
+ raise Exception.new("Failed to retrieve filesystem type for '/' root partition")
634
+ else
635
+ post_message("'/' root partition contains an #{root_fs_type} filesystem")
636
+ end
637
+ root_device = remote_handler().get_root_device()
638
+ @logger.debug "Found '#{root_device}' as root device"
639
+ if root_device.nil? || root_device.empty?
640
+ raise Exception.new("Failed to retrieve root device for '/' root partition")
641
+ else
642
+ post_message("'/' root partitition on root device '#{root_device}'")
643
+ end
644
+ root_label = remote_handler().get_device_label_ext(root_device, root_fs_type)
645
+ @logger.debug "Found label '#{root_label}'"
646
+ if root_label.nil? || root_label.empty?
647
+ post_message("'/' root partition has no label specified")
648
+ else
649
+ post_message("'/' root partition label '#{root_label}' for root device node '#{root_device}'")
650
+ end
651
+ return root_fs_type, root_label
652
+ end
653
+
625
654
  # Get partition filesytem type
626
655
  def get_partition_fs_type(part)
627
656
  post_message("Retrieving '#{part}' partition filesystem type...")
@@ -637,6 +666,35 @@ module StateTransitionHelper
637
666
  return part_fs_type
638
667
  end
639
668
 
669
+ # Get partition filesytem type and label
670
+ def get_partition_fs_type_and_label(part)
671
+ post_message("Retrieving '#{part}' partition filesystem type...")
672
+ @logger.debug "get #{part} partition filesystel type"
673
+ # get partition device and then its fs type
674
+ part_fs_type = remote_handler().get_partition_fs_type(part)
675
+ @logger.debug "Found '#{part_fs_type}' as filesystem type"
676
+ if part_fs_type.nil? || part_fs_type.empty?
677
+ raise Exception.new("Failed to retrieve filesystem type for '#{part}' partition")
678
+ else
679
+ post_message("'#{part}' partition contains an #{part_fs_type} filesystem")
680
+ end
681
+ part_device = remote_handler().get_partition_device(part)
682
+ @logger.debug "Found '#{part_device}' as partition device"
683
+ if part_device.nil? || part_device.empty?
684
+ raise Exception.new("Failed to retrieve device for '#{part}' partition")
685
+ else
686
+ post_message("'#{part}' partitition on device '#{part_device}'")
687
+ end
688
+ part_label = remote_handler().get_device_label_ext(part_device, part_fs_type)
689
+ @logger.debug "Found label '#{part_label}'"
690
+ if part_label.nil? || part_label.empty?
691
+ post_message("'#{part}' partition has no label specified")
692
+ else
693
+ post_message("'#{part}' partition label '#{part_label}' for device node '#{part_device}'")
694
+ end
695
+ return part_fs_type, part_label
696
+ end
697
+
640
698
  # Copy all files of a running linux distribution via rsync to a mounted directory
641
699
  # Input Parameters:
642
700
  # * destination_path => where to copy to
@@ -851,6 +909,8 @@ module StateTransitionHelper
851
909
  }
852
910
  }
853
911
  target_aki = ''
912
+ post_message("mapping AKI '#{source_aki}' from #{source_region} region to #{target_region} region...")
913
+
854
914
  if map[source_region] == nil
855
915
  Exception.new("source region not supported")
856
916
  elsif map[target_region] == nil
@@ -862,12 +922,14 @@ module StateTransitionHelper
862
922
  pv_grub_info = map[source_region][source_aki]
863
923
  map[target_region].each() {|key, value|
864
924
  if pv_grub_info.eql?(value)
925
+ @logger.debug "found AKI: #{key} for #{value}"
865
926
  target_aki = key
866
927
  break
867
928
  end
868
929
  }
869
930
  end
870
931
  end
932
+ post_message("AKI mapped to #{target_aki}")
871
933
  return target_aki
872
934
  end
873
935
 
@@ -121,8 +121,9 @@ class CopyAmi < Ec2Script
121
121
  connect(@context[:source_dns_name], @context[:source_ssh_username], nil, @context[:source_ssh_keydata])
122
122
  mount_fs(mount_point, device)
123
123
  # get root partition label and filesystem type
124
- @context[:label] = get_root_partition_label()
125
- @context[:fs_type] = get_root_partition_fs_type()
124
+ #@context[:label] = get_root_partition_label()
125
+ #@context[:fs_type] = get_root_partition_fs_type()
126
+ @context[:fs_type], @context[:label] = get_root_partition_fs_type_and_label()
126
127
  disconnect()
127
128
  SourceVolumeReadyState.new(@context)
128
129
  end
@@ -97,8 +97,9 @@ class CopySnapshot< Ec2Script
97
97
  connect(@context[:source_dns_name], @context[:source_ssh_username], nil, @context[:source_ssh_keydata])
98
98
  mount_fs(mount_point, device)
99
99
  # get partition label and filesystem type
100
- @context[:label] = get_partition_label(mount_point)
101
- @context[:fs_type] = get_partition_fs_type(mount_point)
100
+ #@context[:label] = get_partition_label(mount_point)
101
+ #@context[:fs_type] = get_partition_fs_type(mount_point)
102
+ @context[:fs_type], @context[:label] = get_partition_fs_type_and_label(mount_point)
102
103
  disconnect()
103
104
  SourceVolumeReadyState.new(@context)
104
105
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: CloudyScripts
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 119
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 8
9
- - 31
10
- version: 1.8.31
9
+ - 32
10
+ version: 1.8.32
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matthias Jung
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-28 00:00:00 +00:00
18
+ date: 2011-07-29 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency