This repository has been archived by the owner on Jan 30, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRakefile
67 lines (58 loc) · 2.28 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
require 'rake/clean'
require 'rspec/core/rake_task'
require 'maestro/plugin/rake_tasks'
require 'json' # to merge manifests
$:.push File.expand_path('../src', __FILE__)
CLEAN.include('manifest.json', '*-plugin-*.zip', 'vendor', 'package', 'tmp', '.bundle', 'manifest.template.json')
task :default => :all
task :all => [:clean, :spec, :bundle, :package]
RSpec::Core::RakeTask.new
Maestro::Plugin::RakeTasks::BundleTask.new
Maestro::Plugin::RakeTasks::PackageTask.new
task :package => :mergemanifest
desc "Generate manifest"
task :mergemanifest do
# merge manifests into manifest.json
manifest = []
merge_manifests(manifest, "provision")
merge_manifests(manifest, "deprovision")
merge_manifests(manifest, "find")
merge_manifests(manifest, "update")
merge_manifests(manifest, "create")
merge_manifests(manifest, "modify")
merge_manifests(manifest, "associate-address")
merge_manifests(manifest, "disassociate-address")
File.open("manifest.template.json",'w'){ |f| f.write(JSON.pretty_generate(manifest)) }
end
# Parse all partial manifests and merge them
def merge_manifests(manifest, action)
files = FileList["manifests/*-#{action}.json"]
parent = JSON.parse(IO.read("manifests/#{action}.json"))
files.each do |f|
provider = f.match(/manifests\/(.*)-#{action}.json/)[1]
puts "Processing file [#{provider}] #{f}"
# merge connection options into both provision and deprovision for each provider
connect_parent_f = "manifests/#{provider}-connect.json"
if File.exist? connect_parent_f
connect_parent = JSON.parse(IO.read(connect_parent_f))
# no fields are required for deprovision, set them to nil
connect_parent["task"]["inputs"].each{|k,v| v["value"]=nil; v["required"]=false} if action == "deprovision"
merged = merge_manifest(parent, JSON.parse(IO.read(f)))
merged = merge_manifest(merged, connect_parent)
else
merged = merge_manifest(parent, JSON.parse(IO.read(f)))
end
manifest << merged
end
end
def merge_manifest(parent, json)
json.merge(parent) do |key, jsonval, parentval|
if parentval.kind_of?(Hash)
merged = merge_manifest(parentval, jsonval)
elsif parentval.kind_of?(Array)
jsonval.map {|i| i.kind_of?(Hash) ? merge_manifest(parentval.first, i) : jsonval}
else
jsonval
end
end
end