Project

General

Profile

Download (3.22 KB) Statistics
| Branch: | Tag: | Revision:

hammer-cli-csv / lib / hammer_cli_csv / lifecycle_environments.rb @ d76bdbc0

1
module HammerCLICsv
2
  class CsvCommand
3
    class LifecycleEnvironmentsCommand < BaseCommand
4
      command_name 'lifecycle-environments'
5
      desc         'import or export lifecycle environments'
6

    
7
      ORGANIZATION = 'Organization'
8
      PRIORENVIRONMENT = 'Prior Environment'
9
      DESCRIPTION = 'Description'
10

    
11
      def export(csv)
12
        csv << [NAME, ORGANIZATION, PRIORENVIRONMENT, DESCRIPTION]
13
        @api.resource(:organizations).call(:index, {
14
            'per_page' => 999999
15
        })['results'].each do |organization|
16
          next if option_organization && organization['name'] != option_organization
17

    
18
          @api.resource(:lifecycle_environments).call(:index, {
19
              'per_page' => 999999,
20
              'organization_id' => organization['id']
21
          })['results'].sort { |a, b| a['created_at'] <=> b['created_at'] }.each do |environment|
22
            if environment['name'] != 'Library'
23
              name = environment['name']
24
              prior = environment['prior']['name']
25
              description = environment['description']
26
              csv << [name, organization['name'], prior, description]
27
            end
28
          end
29
        end
30
      end
31

    
32
      def import
33
        @existing = {}
34
        @api.resource(:organizations).call(:index, {
35
            'per_page' => 999999
36
        })['results'].each do |organization|
37
          @api.resource(:lifecycle_environments).call(:index, {
38
              'per_page' => 999999,
39
              'organization_id' => foreman_organization(:name => organization['name'])
40
          })['results'].each do |environment|
41
            @existing[organization['name']] ||= {}
42
            @existing[organization['name']][environment['name']] = environment['id'] if environment
43
          end
44
        end
45

    
46
        thread_import do |line|
47
          create_environments_from_csv(line)
48
        end
49
      end
50

    
51
      def create_environments_from_csv(line)
52
        return if option_organization && line[ORGANIZATION] != option_organization
53

    
54
        count(line[COUNT]).times do |number|
55
          name = namify(line[NAME], number)
56
          prior = line[PRIORENVIRONMENT] == 'Library' ? 'Library' :
57
                                            namify(line[PRIORENVIRONMENT], number)
58
          raise "Organization '#{line[ORGANIZATION]}' does not exist" if !@existing.include? line[ORGANIZATION]
59
          if !@existing[line[ORGANIZATION]].include? name
60
            print "Creating environment '#{name}'..." if option_verbose?
61
            @api.resource(:lifecycle_environments).call(:create, {
62
                'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
63
                'name' => name,
64
                #'prior' => lifecycle_environment(line[ORGANIZATION], :name => prior),
65
                'prior_id' => lifecycle_environment(line[ORGANIZATION], :name => prior),
66
                'description' => line[DESCRIPTION]
67
            })
68
          else
69
            print "Updating environment '#{name}'..." if option_verbose?
70
            @api.resource(:lifecycle_environments).call(:update, {
71
                'id' => @existing[line[ORGANIZATION]][name],
72
                'description' => line[DESCRIPTION]
73
            })
74
          end
75
          print "done\n" if option_verbose?
76
        end
77
      end
78
    end
79
  end
80
end