bosh-compose 0.0.1
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.
- checksums.yaml +7 -0
- data/bin/bosh-compose +17 -0
- data/lib/bosh-compose.rb +79 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 24f4a2fbdce8c69f7c2a4b19643bf37832fa4a1c
|
4
|
+
data.tar.gz: 5e307978f0b2ac8a08184d544c165712ef2ae0d1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 611fe4257fcd477c3531b070a6850665a18c93a57490ff8fe88e5f16bd73d5466cbd658aa3044a3ad1e6e31a0c3d4d7e325dd857ea43857077f45424ad281b20
|
7
|
+
data.tar.gz: 1193894b081c753621c77928f73a2fb6236416b30a8ecffbfbade89229bc30bddf7900ad64a45c103139eec07256e38148b6dcd22c061bd8993cd066f907e122
|
data/bin/bosh-compose
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Add lib to load path
|
3
|
+
$:.unshift File.expand_path("../lib", File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require 'bosh-compose'
|
6
|
+
require 'thor'
|
7
|
+
|
8
|
+
class Cli < Thor
|
9
|
+
desc "render <template_path> <deployment_manifest_path>",
|
10
|
+
"renders a BOSH erb job template using provided manifest"
|
11
|
+
def render(template, manifest)
|
12
|
+
puts Bosh::Compose::Renderer.new().render(template, manifest)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Cli.start(ARGV)
|
17
|
+
|
data/lib/bosh-compose.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'json'
|
3
|
+
require 'bosh/template/renderer'
|
4
|
+
|
5
|
+
module Bosh
|
6
|
+
module Compose
|
7
|
+
class Renderer
|
8
|
+
def render(template_file, deployment_manifest_file)
|
9
|
+
spec = look_for_spec_relative_to(template_file)
|
10
|
+
|
11
|
+
manifest_yaml = File.read(deployment_manifest_file)
|
12
|
+
manifest = YAML.load(manifest_yaml)
|
13
|
+
manifest = set_defaults_from_spec(manifest, spec) if spec != nil
|
14
|
+
|
15
|
+
context = {
|
16
|
+
"index": 0,
|
17
|
+
"job": {
|
18
|
+
"name": "some-job-name"
|
19
|
+
},
|
20
|
+
"properties": manifest["properties"]
|
21
|
+
}
|
22
|
+
context_json = JSON.generate(context)
|
23
|
+
|
24
|
+
renderer = Bosh::Template::Renderer.new(context: context_json)
|
25
|
+
renderer.render(template_file)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Attempts to find a relevant spec file based on template file location
|
29
|
+
def look_for_spec_relative_to(template_file)
|
30
|
+
job_root = File.expand_path('..', File.dirname(template_file))
|
31
|
+
spec_path = File.join(job_root, 'spec')
|
32
|
+
if !File.exists? spec_path
|
33
|
+
STDERR.puts "no spec file found relative to template file"
|
34
|
+
return
|
35
|
+
end
|
36
|
+
|
37
|
+
STDERR.puts "found spec file at #{spec_path}, importing."
|
38
|
+
spec = File.read(spec_path)
|
39
|
+
return YAML.load(spec)
|
40
|
+
end
|
41
|
+
|
42
|
+
def set_defaults_from_spec(manifest, spec)
|
43
|
+
spec["properties"].map do |key, value|
|
44
|
+
if !manifest["properties"].key? key
|
45
|
+
add_nested_property(manifest["properties"], key, value["default"])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
return manifest
|
49
|
+
end
|
50
|
+
|
51
|
+
# car.make
|
52
|
+
# set_value("car.make")
|
53
|
+
# map[car] = [make]
|
54
|
+
#
|
55
|
+
# set_value("car.model")
|
56
|
+
# map[car] = [make, model]
|
57
|
+
#
|
58
|
+
# set_value("car.features.power_windows")
|
59
|
+
# map[car] = set_value("features.power_windows")
|
60
|
+
# map[car] = map[features] = [power_windows]
|
61
|
+
def add_nested_property(map, key, value)
|
62
|
+
if !key.include? '.'
|
63
|
+
if map[key].nil?
|
64
|
+
map[key] = value
|
65
|
+
end
|
66
|
+
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
70
|
+
keys = key.split '.'
|
71
|
+
if map[keys.first].nil?
|
72
|
+
map[keys.first] = {}
|
73
|
+
end
|
74
|
+
|
75
|
+
add_nested_property map[keys.first], keys.drop(1).join('.'), value
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bosh-compose
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Christian Ang
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bosh-template
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3262'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3262'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.19.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.19.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
description: A cli for BOSH job template rendering.
|
56
|
+
email: christian.ang@outlook.com
|
57
|
+
executables:
|
58
|
+
- bosh-compose
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- bin/bosh-compose
|
63
|
+
- lib/bosh-compose.rb
|
64
|
+
homepage: https://github.com/christianang/bosh-compose
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.5.1
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: A cli for BOSH job template rendering.
|
88
|
+
test_files: []
|