cbf 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +2 -2
- data/cbf.gemspec +1 -1
- data/lib/cbf/version.rb +1 -1
- data/lib/cbf.rb +2 -2
- data/lib/generators/heat.rb +4 -0
- data/lib/parsers/aeolus_v1.rb +15 -7
- data/spec/generators/heat_spec.rb +69 -0
- data/spec/parsers/aeolus_v1_spec.rb +16 -0
- metadata +7 -5
data/Gemfile.lock
CHANGED
data/cbf.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.homepage = "https://github.com/tomassedovic/cbf"
|
14
14
|
s.license = 'Apache License, Version 2.0'
|
15
15
|
|
16
|
-
s.add_runtime_dependency "nokogiri", "~> 1.5.
|
16
|
+
s.add_runtime_dependency "nokogiri", "~> 1.5.0"
|
17
17
|
|
18
18
|
s.add_development_dependency "rake", "~> 10.0.2"
|
19
19
|
|
data/lib/cbf/version.rb
CHANGED
data/lib/cbf.rb
CHANGED
data/lib/generators/heat.rb
CHANGED
@@ -52,6 +52,10 @@ module CBF
|
|
52
52
|
},
|
53
53
|
}
|
54
54
|
|
55
|
+
if resource.include? :key_name
|
56
|
+
resource_body['Properties']['KeyName'] = resolve_parameter_ref_or_value(name, resource[:key_name])
|
57
|
+
end
|
58
|
+
|
55
59
|
files = template[:files].select { |f| f[:resource] == name }
|
56
60
|
generated_files = files.map { |f| generate_file(f) }
|
57
61
|
|
data/lib/parsers/aeolus_v1.rb
CHANGED
@@ -16,15 +16,15 @@ module CBF
|
|
16
16
|
end
|
17
17
|
validate!(doc)
|
18
18
|
|
19
|
-
assemblies = (doc / 'assemblies/assembly').map { |a| parse_assembly(a)}
|
20
|
-
assembly_params = (doc / 'assemblies/assembly').map { |a| parse_assembly_parameters(a) }.flatten
|
19
|
+
assemblies = (doc / 'assemblies/assembly').map { |a| parse_assembly(a, options)}
|
20
|
+
assembly_params = (doc / 'assemblies/assembly').map { |a| parse_assembly_parameters(a, options) }.flatten
|
21
21
|
resource_params = (doc / 'parameters/parameter').map { |el| parse_parameter(el) }
|
22
22
|
{
|
23
23
|
:name => doc.root.attr('name'),
|
24
24
|
:description => (doc % 'description').text,
|
25
25
|
:resources => assemblies,
|
26
26
|
:services => (doc / 'services/service').map { |el| parse_service(el) },
|
27
|
-
:parameters => assembly_params +
|
27
|
+
:parameters => assembly_params + resource_params,
|
28
28
|
:files => (doc / '//executable|//files/file').map { |el| parse_file(el, resource_params) },
|
29
29
|
:outputs => (doc / 'assembly//return').map { |el| parse_return(el) },
|
30
30
|
}
|
@@ -39,21 +39,29 @@ module CBF
|
|
39
39
|
raise ValidationError unless errors.empty?
|
40
40
|
end
|
41
41
|
|
42
|
-
def parse_assembly(assembly)
|
42
|
+
def parse_assembly(assembly, opts)
|
43
43
|
name = assembly['name']
|
44
|
-
{
|
44
|
+
result = {
|
45
45
|
:name => name,
|
46
46
|
:type => :instance,
|
47
47
|
:hardware_profile => {:parameter => 'hardware_profile'},
|
48
48
|
:image => {:parameter => 'image'},
|
49
49
|
}
|
50
|
+
if opts[:require_instance_keys]
|
51
|
+
result[:key_name] = {:parameter => 'key_name'}
|
52
|
+
end
|
53
|
+
return result
|
50
54
|
end
|
51
55
|
|
52
|
-
def parse_assembly_parameters(assembly)
|
53
|
-
[
|
56
|
+
def parse_assembly_parameters(assembly, opts)
|
57
|
+
params = [
|
54
58
|
assembly_parameter('image', assembly['name'], (assembly % 'image')['id']),
|
55
59
|
assembly_parameter('hardware_profile', assembly['name'], assembly['hwp']),
|
56
60
|
]
|
61
|
+
if opts[:require_instance_keys]
|
62
|
+
params << assembly_parameter('key_name', assembly['name'], nil)
|
63
|
+
end
|
64
|
+
return params
|
57
65
|
end
|
58
66
|
|
59
67
|
def assembly_parameter(name, assembly_name, default_value)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Copyright 2012 Red Hat, Inc.
|
2
|
+
# Licensed under the Apache License, Version 2.0, see README for details.
|
3
|
+
|
4
|
+
require 'spec_helper'
|
5
|
+
require 'cbf'
|
6
|
+
|
7
|
+
describe 'Heat generator' do
|
8
|
+
it "must produce a minimal Heat template" do
|
9
|
+
source = {
|
10
|
+
:description => 'sample template',
|
11
|
+
:parameters => [],
|
12
|
+
:resources => [],
|
13
|
+
:files => [],
|
14
|
+
}
|
15
|
+
|
16
|
+
template = CBF.generate(:heat, source)
|
17
|
+
template.wont_be_empty
|
18
|
+
|
19
|
+
parsed = JSON.parse(template)
|
20
|
+
parsed['Description'].must_equal(source[:description])
|
21
|
+
parsed.must_include 'Parameters'
|
22
|
+
parsed.must_include 'Resources'
|
23
|
+
parsed.must_include 'Outputs'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "must specify required properties for instance resources" do
|
27
|
+
source = {
|
28
|
+
:description => 'sample template',
|
29
|
+
:parameters => [],
|
30
|
+
:resources => [{
|
31
|
+
:name => 'my instance',
|
32
|
+
:type => :instance,
|
33
|
+
:image => 'test-image-id',
|
34
|
+
:hardware_profile => 'test-hwp',
|
35
|
+
}],
|
36
|
+
:files => [],
|
37
|
+
}
|
38
|
+
|
39
|
+
t = JSON.parse(CBF.generate(:heat, source))
|
40
|
+
t['Resources'].must_include 'my instance'
|
41
|
+
t['Resources']['my instance'].must_include 'Properties'
|
42
|
+
properties = t['Resources']['my instance']['Properties']
|
43
|
+
properties.must_include 'ImageId'
|
44
|
+
properties['ImageId'].must_equal 'test-image-id'
|
45
|
+
properties.must_include 'InstanceType'
|
46
|
+
properties['InstanceType'].must_equal 'test-hwp'
|
47
|
+
end
|
48
|
+
|
49
|
+
it "must generate KeyName for instances when specified" do
|
50
|
+
source = {
|
51
|
+
:description => 'sample template',
|
52
|
+
:parameters => [],
|
53
|
+
:resources => [{
|
54
|
+
:name => 'my instance',
|
55
|
+
:type => :instance,
|
56
|
+
:image => 'test-image-id',
|
57
|
+
:hardware_profile => 'test-hwp',
|
58
|
+
:key_name => 'my-key'
|
59
|
+
}],
|
60
|
+
:files => [],
|
61
|
+
}
|
62
|
+
|
63
|
+
t = JSON.parse(CBF.generate(:heat, source))
|
64
|
+
|
65
|
+
properties = t['Resources']['my instance']['Properties']
|
66
|
+
properties.must_include 'KeyName'
|
67
|
+
properties['KeyName'].must_equal 'my-key'
|
68
|
+
end
|
69
|
+
end
|
@@ -60,4 +60,20 @@ describe 'Aeolus deployable version 1 parser' do
|
|
60
60
|
CBF.parse(:aeolus_v1, '<deployable></deployable>')
|
61
61
|
end.must_raise CBF::ValidationError
|
62
62
|
end
|
63
|
+
|
64
|
+
it "must generate keyname parameters when asked to" do
|
65
|
+
deployable_path = "#{SAMPLES_PATH}/aeolus_v1/wordpress.xml"
|
66
|
+
result = CBF.parse(:aeolus_v1, open(deployable_path), {:require_instance_keys => true})
|
67
|
+
|
68
|
+
result[:parameters].must_include({:type => :string,
|
69
|
+
:name => 'key_name',:service => nil, :resource => 'webserver'})
|
70
|
+
result[:parameters].must_include({:type => :string,
|
71
|
+
:name => 'key_name', :service => nil, :resource => 'database'})
|
72
|
+
|
73
|
+
result[:resources][0].must_include :key_name
|
74
|
+
result[:resources][0][:key_name].must_equal({:parameter => 'key_name'})
|
75
|
+
|
76
|
+
result[:resources][1].must_include :key_name
|
77
|
+
result[:resources][1][:key_name].must_equal({:parameter => 'key_name'})
|
78
|
+
end
|
63
79
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cbf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.5.
|
21
|
+
version: 1.5.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.5.
|
29
|
+
version: 1.5.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rake
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- lib/generators/heat.rb
|
66
66
|
- lib/parsers/aeolus_v1.rb
|
67
67
|
- lib/parsers/aeolus_v1.rng.xml
|
68
|
+
- spec/generators/heat_spec.rb
|
68
69
|
- spec/parsers/aeolus_v1_spec.rb
|
69
70
|
- spec/samples/aeolus_v1/drupal.xml
|
70
71
|
- spec/samples/aeolus_v1/sample.xml
|
@@ -91,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
92
|
version: '0'
|
92
93
|
segments:
|
93
94
|
- 0
|
94
|
-
hash:
|
95
|
+
hash: 289159412579649615
|
95
96
|
requirements: []
|
96
97
|
rubyforge_project:
|
97
98
|
rubygems_version: 1.8.23
|
@@ -99,6 +100,7 @@ signing_key:
|
|
99
100
|
specification_version: 3
|
100
101
|
summary: Convert between various cloud deployment formats.
|
101
102
|
test_files:
|
103
|
+
- spec/generators/heat_spec.rb
|
102
104
|
- spec/parsers/aeolus_v1_spec.rb
|
103
105
|
- spec/samples/aeolus_v1/drupal.xml
|
104
106
|
- spec/samples/aeolus_v1/sample.xml
|