diff --git a/lib/train/platforms/detect/helpers/os_common.rb b/lib/train/platforms/detect/helpers/os_common.rb index 907e16e2..03d45a9c 100644 --- a/lib/train/platforms/detect/helpers/os_common.rb +++ b/lib/train/platforms/detect/helpers/os_common.rb @@ -92,7 +92,7 @@ def unix_uuid uuid = unix_uuid_from_chef uuid = unix_uuid_from_machine_file if uuid.nil? uuid = uuid_from_command if uuid.nil? - uuid = unix_write_uuid if uuid.nil? + raise Train::TransportError, 'Cannot find a UUID for your node.' if uuid.nil? uuid end @@ -111,30 +111,15 @@ def unix_uuid_from_machine_file /etc/machine-id /var/lib/dbus/machine-id /var/db/dbus/machine-id - /etc/machine-uuid - #{ENV['HOME']}/.local/etc/machine-uuid ).each do |path| file = @backend.file(path) next unless file.exist? && !file.size.zero? - return file.content.chomp if path =~ /(uuid|guid)/ + return file.content.chomp if path =~ /guid/ return uuid_from_string(file.content.chomp) end nil end - def unix_write_uuid - uuid = SecureRandom.uuid - result = @backend.run_command("echo \"#{uuid}\" > /etc/machine-uuid") - unless result.exit_status.zero? - # fallback to user location - local_uuid_path = "#{ENV['HOME']}/.local/etc/machine-uuid" - warn "Cannot write uuid to `/etc/machine-uuid`, falling back to `#{local_uuid_path}` instead." - result = @backend.run_command("mkdir -p #{ENV['HOME']}/.local/etc; echo \"#{uuid}\" > #{local_uuid_path}") - raise "Cannot write uuid to `#{local_uuid_path}`." unless result.exit_status.zero? - end - uuid - end - # This takes a command from the platform detect block to run. # We expect the command to return a unique identifier which # we turn into a UUID. diff --git a/lib/train/platforms/detect/helpers/os_windows.rb b/lib/train/platforms/detect/helpers/os_windows.rb index 83179ed2..c29cb20c 100644 --- a/lib/train/platforms/detect/helpers/os_windows.rb +++ b/lib/train/platforms/detect/helpers/os_windows.rb @@ -82,7 +82,7 @@ def windows_uuid uuid = windows_uuid_from_machine_file if uuid.nil? uuid = windows_uuid_from_wmic if uuid.nil? uuid = windows_uuid_from_registry if uuid.nil? - uuid = windows_write_uuid if uuid.nil? + raise Train::TransportError, 'Cannot find a UUID for your node.' if uuid.nil? uuid end @@ -90,8 +90,6 @@ def windows_uuid_from_machine_file %W( #{ENV['SYSTEMDRIVE']}\\chef\\chef_guid #{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}\\.chef\\chef_guid - #{ENV['SYSTEMROOT']}\\machine-uuid - #{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}\\.system\\machine-uuid ).each do |path| file = @backend.file(path) return file.content.chomp if file.exist? && !file.size.zero? @@ -118,18 +116,5 @@ def windows_uuid_from_registry return unless result.exit_status.zero? result.stdout.chomp end - - def windows_write_uuid - uuid = SecureRandom.uuid - result = @backend.run_command("'#{uuid}' | Out-File -encoding ASCII #{ENV['SYSTEMROOT']}\\machine-uuid") - unless result.exit_status.zero? - # fallback to user location - local_uuid_path = "#{ENV['HOMEDRIVE']}#{ENV['HOMEPATH']}\\.system\\machine-uuid" - warn "Cannot write uuid to `#{ENV['SYSTEMROOT']}\\machine-uuid`, falling back to `#{local_uuid_path}` instead." - result = @backend.run_command("new-item -force -path #{local_uuid_path} -value '#{uuid}' -type file") - raise "Cannot write uuid to `#{local_uuid_path}\\machine-uuid`." unless result.exit_status.zero? - end - uuid - end end end diff --git a/test/unit/platforms/detect/uuid_test.rb b/test/unit/platforms/detect/uuid_test.rb index 2c7294a3..fdcd988a 100644 --- a/test/unit/platforms/detect/uuid_test.rb +++ b/test/unit/platforms/detect/uuid_test.rb @@ -80,19 +80,6 @@ def mock_platform(name, commands = {}, files = {}, plat_options = {}) plat.uuid.must_equal '5e430326-b5aa-56f8-975f-c3ca1c21df91' end - it 'finds a linux uuid from /etc/machine-uuid' do - files = { '/etc/machine-uuid' => 'd400073f-0920-41aa-8dd3-2ea59b18f5ce' } - plat = mock_platform('linux', {}, files) - plat.uuid.must_equal 'd400073f-0920-41aa-8dd3-2ea59b18f5ce' - end - - it 'finds a linux uuid from uuid_command' do - plat_options = { uuid_command: "system_profiler SPHardwareDataType | awk '/UUID/ { print $3; }'"} - commands = { "system_profiler SPHardwareDataType | awk '/UUID/ { print $3; }'" => 'd400073f-0920-41aa-8dd3-2ea59b18f5ce' } - plat = mock_platform('mac_os_x', commands, {}, plat_options) - plat.uuid.must_equal '2ee3c95b-4023-570d-8177-f939901a3c51' - end - it 'finds a linux uuid from /etc/machine-id' do files = { '/etc/machine-id' => '123141dsfadf' } plat = mock_platform('linux', {}, files) @@ -126,22 +113,6 @@ def mock_platform(name, commands = {}, files = {}, plat_options = {}) plat.uuid.must_equal '5e430326-b5aa-56f8-975f-c3ca1c21df91' end - - it 'finds a windows uuid from C:\windows\machine-uuid' do - ENV['SYSTEMROOT'] = 'C:\windows' - files = { 'C:\windows\machine-uuid' => '5e430326-b5aa-56f8-975f-c3ca1c21df91' } - plat = mock_platform('windows', {}, files) - plat.uuid.must_equal '5e430326-b5aa-56f8-975f-c3ca1c21df91' - end - - it 'finds a windows uuid from C:\Users\test\.system\machine-uuid' do - ENV['HOMEDRIVE'] = 'C:\\' - ENV['HOMEPATH'] = 'Users\test' - files = { 'C:\Users\test\.system\machine-uuid' => '5e430326-b5aa-56f8-975f-c3ca1c21df91' } - plat = mock_platform('windows', {}, files) - plat.uuid.must_equal '5e430326-b5aa-56f8-975f-c3ca1c21df91' - end - it 'generates a uuid from a string' do plat = mock_platform('linux') uuid = Train::Platforms::Detect::UUID.new(plat)