1
|
|
|
module Rapis |
2
|
|
|
class Actions |
3
|
|
|
def initialize(client) |
4
|
|
|
@client = client |
5
|
|
|
@converter = Rapis::Converter.new |
6
|
|
|
end |
7
|
|
|
|
8
|
|
|
def create(options) |
9
|
|
|
ret = @client.create(options['name'], options['description']) |
10
|
|
|
Rapis.logger.info("API id: #{ret.id}") |
11
|
|
|
Rapis.logger.info("API name: #{ret.name}") |
12
|
|
|
Rapis.logger.info("API description: #{ret.description}") |
13
|
|
|
ret.warnings.each { |w| Rapis.logger.warn("WARNING: #{w}") } unless ret.warnings.nil? |
14
|
|
|
end |
15
|
|
|
|
16
|
|
|
def convert(options) |
17
|
|
|
output = @converter.to_h(File.read(options['file'])) |
18
|
|
|
case options['format'] |
19
|
|
|
when 'json' |
20
|
|
|
output = JSON.pretty_generate(output) |
21
|
|
|
Rapis::Utils.print_json(output) |
22
|
|
|
when 'yaml' |
23
|
|
|
output = YAML.dump(output) |
24
|
|
|
Rapis::Utils.print_yaml(output) |
25
|
|
|
else |
26
|
|
|
raise OperationError, "\"#{options['format']}\" format is not supported." |
27
|
|
|
end |
28
|
|
|
File.write(options['output'], output) unless options['output'].empty? |
29
|
|
|
end |
30
|
|
|
|
31
|
|
|
def list(options) |
32
|
|
|
apis = [] |
33
|
|
|
@client.get_apis.each do |a| |
34
|
|
|
if options['verbose'] |
35
|
|
|
api = Rapis::Utils.struct_to_hash(a) |
36
|
|
|
api['stages'] = [] |
37
|
|
|
else |
38
|
|
|
a_key = "#{a.id} (#{a.name})" |
39
|
|
|
api = { a_key => [] } |
40
|
|
|
end |
41
|
|
|
|
42
|
|
|
@client.get_stages(a.id).each do |s| |
43
|
|
|
if options['verbose'] |
44
|
|
|
api['stages'] << Rapis::Utils.struct_to_hash(s) |
45
|
|
|
else |
46
|
|
|
api[a_key] << s.stage_name |
47
|
|
|
end |
48
|
|
|
end |
49
|
|
|
Rapis::Utils.print_yaml(YAML.dump(api)) |
50
|
|
|
apis << api |
51
|
|
|
end |
52
|
|
|
apis |
53
|
|
|
end |
54
|
|
|
|
55
|
|
|
def export(options) |
56
|
|
|
dsl = @converter.to_dsl( |
57
|
|
|
@client.export_api(options['rest_api'], options['stage']) |
58
|
|
|
) |
59
|
|
|
Rapis::Utils.print_ruby(dsl) |
60
|
|
|
File.write(options['file'], dsl) if options['write'] |
61
|
|
|
end |
62
|
|
|
|
63
|
|
|
def diff(options) |
64
|
|
|
puts Rapis::Utils.diff( |
65
|
|
|
@client.export_api(options['rest_api'], options['stage']), |
66
|
|
|
@converter.to_h(File.read(options['file'])) |
67
|
|
|
) |
68
|
|
|
end |
69
|
|
|
|
70
|
|
|
def apply(options) |
71
|
|
|
ret = @client.put_api( |
72
|
|
|
options['rest_api'], |
73
|
|
|
@converter.to_h(File.read(options['file'])) |
74
|
|
|
) |
75
|
|
|
Rapis.logger.info("Applied the REST API configuration to \"#{ret.id}\" (#{ret.name})") |
76
|
|
|
ret.warnings.each { |w| Rapis.logger.warn("WARNING: #{w}") } unless ret.warnings.nil? |
77
|
|
|
end |
78
|
|
|
|
79
|
|
|
def deploy(options) |
80
|
|
|
args = {} |
81
|
|
|
args[:rest_api_id] = options['rest_api'] |
82
|
|
|
args[:stage_name] = options['stage'] |
83
|
|
|
args[:description] = options['description'] unless options['description'].empty? |
84
|
|
|
args[:stage_description] = options['stage_description'] unless options['description'].empty? |
85
|
|
|
args[:cache_cluster_enabled] = (options['cache'].to_f > 0.0) |
86
|
|
|
args[:cache_cluster_size] = options['cache'] if args[:cache_cluster_enabled] |
87
|
|
|
args[:variables] = options['variables'] unless options['variables'].empty? |
88
|
|
|
|
89
|
|
|
ret = @client.deploy(args) |
90
|
|
|
summary = YAML.dump(Rapis::Utils.struct_to_hash(ret.api_summary)) |
91
|
|
|
Rapis.logger.info("Deployment id: #{ret.id}") |
92
|
|
|
Rapis.logger.info("Deployment description: #{ret.description}") |
93
|
|
|
Rapis.logger.info("API summary :\n#{summary}") |
94
|
|
|
end |
95
|
|
|
end |
96
|
|
|
end |
97
|
|
|
|