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 CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cbf (0.0.1)
5
- nokogiri (~> 1.5.5)
4
+ cbf (0.0.2)
5
+ nokogiri (~> 1.5.0)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
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.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
@@ -1,3 +1,3 @@
1
1
  module CBF
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/cbf.rb CHANGED
@@ -8,8 +8,8 @@ require 'generators/heat'
8
8
 
9
9
  module CBF
10
10
 
11
- def self.convert(template, format)
12
- template = parse(format, template)
11
+ def self.convert(template, format, options={})
12
+ template = parse(format, template, options)
13
13
  Convertor.new(template)
14
14
  end
15
15
 
@@ -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
 
@@ -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 + resource_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.1
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: 2012-12-12 00:00:00.000000000 Z
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.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.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: 2388046718038059094
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