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
|
|
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
|