Sha256: 7fcdff4a5c8cb5e9d22995ff9fd78f95561cb3b3449bf3056b770d200ce63855

Contents?: true

Size: 1.95 KB

Versions: 31

Compression:

Stored size: 1.95 KB

Contents

# frozen_string_literal: true

require 'bolt/project_manager/migrator'

module Bolt
  class ProjectManager
    class InventoryMigrator < Migrator
      def migrate(inventory_file, backup_dir)
        inventory1to2(inventory_file, backup_dir)
      end

      # Migrates an inventory v1 file to inventory v2.
      #
      private def inventory1to2(inventory_file, backup_dir)
        unless File.exist?(inventory_file)
          return true
        end

        data = Bolt::Util.read_yaml_hash(inventory_file, 'inventory')
        data.delete('version') if data['version'] != 2
        migrated = migrate_group(data)

        return true unless migrated

        @outputter.print_message "Migrating inventory\n\n"

        backup_file(inventory_file, backup_dir)

        begin
          File.write(inventory_file, data.to_yaml)
          @outputter.print_action_step(
            "Successfully migrated Bolt inventory to the latest version."
          )
          true
        rescue StandardError => e
          raise Bolt::FileError.new(
            "Unable to write to #{inventory_file}: #{e.message}. See "\
            "http://pup.pt/bolt-inventory to manually update.",
            inventory_file
          )
        end
      end

      # Walks an inventory hash and replaces all 'nodes' keys with 'targets'
      # keys and all 'name' keys nested in a 'targets' hash with 'uri' keys.
      # Data is modified in place.
      #
      private def migrate_group(group)
        migrated = false
        if group.key?('nodes')
          migrated = true
          targets = group['nodes'].map do |target|
            target['uri'] = target.delete('name') if target.is_a?(Hash)
            target
          end
          group.delete('nodes')
          group['targets'] = targets
        end
        (group['groups'] || []).each do |subgroup|
          migrated_group = migrate_group(subgroup)
          migrated ||= migrated_group
        end
        migrated
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
bolt-3.17.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.16.1 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.16.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.15.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.14.1 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.13.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.12.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.11.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.10.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.9.2 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.9.1 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.9.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.8.1 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.8.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.7.1 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.7.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.6.1 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.6.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.5.0 lib/bolt/project_manager/inventory_migrator.rb
bolt-3.4.0 lib/bolt/project_manager/inventory_migrator.rb