Skip to content

Commit 8423c25

Browse files
committed
lib(): allow usage of generic key in deployment-dependencies
We don't remove consistency checks, but it is possible to deactivate it using the `bosh-deployment` generic key. So either a valid `deployment-name` is used, either the generic-key. closes #150
1 parent e2be835 commit 8423c25

File tree

14 files changed

+119
-91
lines changed

14 files changed

+119
-91
lines changed

Readme.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ In `deployment-dependencies.yml`, it is possible to:
323323
324324
``` yaml
325325
deployment:
326-
micro-bosh:
326+
bosh-deployment: # or micro-bosh:
327327
cli_version: v1
328328
releases:
329329
...
@@ -335,7 +335,7 @@ Following is a `deployment-dependencies.yml` sample (should be placed in the bos
335335
336336
---
337337
deployment:
338-
micro-bosh:
338+
bosh-deployment: # or micro-bosh:
339339
releases:
340340
route-registrar-boshrelease:
341341
base_location: https://bosh.io/d/github.com/
@@ -350,6 +350,9 @@ deployment:
350350
smoke_tests:
351351
```
352352

353+
Staring with COA [2.2](https://github.com/orange-cloudfoundry/cf-ops-automation/releases/tag/v2.2.0), it is possible to use
354+
a generic key (`bosh-deployment`) or `<deployment-name>` (ie: the directory name) under `deployment`
355+
353356
### Cloudfoundry application resources template format
354357

355358
For each cf-application, when a `enable-cf-app.yml` file is found, it is going to spruce all files in the template dir ending with ```-tpl.yml```
@@ -574,7 +577,7 @@ run `./init-template.sh`, and it creates empty placeholder.
574577
575578
---
576579
deployment:
577-
micro-bosh:
580+
bosh-deployment: #or micro-bosh:
578581
releases:
579582
route-registrar-boshrelease:
580583
base_location: https://bosh.io/d/github.com/

docs/reference_dataset/template_repository/another-world-root-depls/another-bosh-deployment-sample/deployment-dependencies.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
deployment:
3-
nginx:
3+
bosh-deployment:
44
releases:
55
nginx:
66
base_location: https://bosh.io/d/github.com/

docs/reference_dataset/template_repository/hello-world-root-depls/bosh-deployment-sample/deployment-dependencies.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
deployment:
3-
bosh-deployment-sample:
4-
# DEPRECATED: uncomment next line to use bosh_cli v1 to deploy manifest
5-
# cli_version: v1
3+
bosh-deployment: # prior to COA 2.2, this tag must be named like the deployment (here bosh-deployment-sample),
4+
# after COA 2.2, it is possible to use 'bosh-deployment' key
5+
# cli_version: v1 # DEPRECATED: uncomment to use bosh_cli v1 to deploy manifest
66
resources:
77
secrets:
88
# DEPRECATED: this deployment depends on another secrets deployment, so it also have to scan change onto the other one
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
---
22
deployment:
3-
generic-app:
3+
bosh-deployment:
44
releases: {}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
---
22
deployment:
3-
pipeline-sample:
3+
bosh-deployment:
44
releases: {}

lib/deployment.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ def disable
2828
end
2929

3030
def self.default(deployment_name)
31-
details = {
31+
Deployment.new(deployment_name, default_details)
32+
end
33+
34+
def self.default_details
35+
{
3236
'stemcells' => {},
3337
'releases' => {}
3438
}
35-
36-
Deployment.new(deployment_name, details)
3739
end
3840
end

lib/deployment_factory.rb

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,19 @@ def initialize(root_deployment_name, version_reference = {}, config = Config.new
1414
validate_version_reference
1515
end
1616

17-
def load_file(filename)
18-
raise 'invalid filename. Cannot be nil' if filename.nil?
19-
raise "file not found: #{filename}" unless File.exist?(filename)
20-
puts "processing #{filename}"
17+
def load_file(filename = '')
18+
validate_file(filename)
19+
puts "DeploymentFactory - processing #{filename}"
20+
deployment_name = File.dirname(filename)&.split(File::SEPARATOR)&.last
2121
yaml_file = YAML.load_file(filename) || {}
22-
load(yaml_file)
23-
end
24-
25-
def load(data = {})
26-
raise "invalid data. Cannot load 'nil' data" if data.nil?
27-
deployments = []
28-
data['deployment']&.each do |deployment_name, deployment_details|
29-
update_deployment_details(deployment_details)
30-
deployments << Deployment.new(deployment_name, deployment_details)
31-
end
32-
raise "Invalid data. Missing root: 'deployment' or '<deployment_name>'" if deployments.empty?
33-
deployments
22+
load(deployment_name, yaml_file)
3423
end
3524

36-
def update_deployment_details(deployment_details)
37-
update_boshrelease_version(deployment_details)
38-
add_stemcell_info(deployment_details)
25+
def load(deployment_name = '', data = {})
26+
raise "invalid deployment_name. Cannot be empty" if deployment_name.empty?
27+
raise "invalid data. Cannot load empty data" if data.empty?
28+
deployment_info = load_deployment_info(data)
29+
process_deployment_info(deployment_info, deployment_name)
3930
end
4031

4132
def stemcell_name
@@ -48,6 +39,32 @@ def stemcell_version
4839

4940
private
5041

42+
def validate_file(filename)
43+
raise 'invalid filename. Cannot be empty' if filename.to_s.empty?
44+
raise "file not found: #{filename}" unless File.exist?(filename)
45+
end
46+
47+
def process_deployment_info(deployment_info, deployment_name)
48+
deployments = []
49+
deployment_info.each do |current_deployment_name, deployment_details|
50+
raise "Invalid deployment_name: expected <#{deployment_name}> or <bosh-deployment> - Found <#{current_deployment_name}> " unless deployment_name == current_deployment_name || current_deployment_name == 'bosh-deployment'
51+
update_deployment_details(deployment_details)
52+
deployments << Deployment.new(deployment_name, deployment_details)
53+
end
54+
deployments
55+
end
56+
57+
def load_deployment_info(data)
58+
deployment_info = data['deployment'] || {}
59+
raise "Invalid data. Missing root: 'deployment'" if deployment_info.empty?
60+
deployment_info
61+
end
62+
63+
def update_deployment_details(deployment_details)
64+
update_boshrelease_version(deployment_details)
65+
add_stemcell_info(deployment_details)
66+
end
67+
5168
def add_stemcell_info(deployment_details)
5269
return if deployment_details.nil?
5370
deployment_details['stemcells'] = { stemcell_name => {} }

lib/directory_initializer.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
class DirectoryInitializer
88
attr_reader :root_deployment_name, :secrets_dir, :template_dir
99

10+
DEFAULT_DEPLOYMENT_DEPENDENCIES_CONTENT = { 'deployment' => { 'bosh-deployment' => Deployment.default_details } }.freeze
11+
1012
def initialize(root_deployment_name, secrets_dir, template_dir, terraform_dir = '')
1113
@root_deployment_name = root_deployment_name
1214
@secrets_dir = secrets_dir
@@ -44,7 +46,7 @@ def setup_templates!
4446
create_non_existing_files files_to_create
4547
end
4648

47-
def add_deployment(deployment_name)
49+
def add_deployment(deployment_name, deployment_dependencies_content = DEFAULT_DEPLOYMENT_DEPENDENCIES_CONTENT)
4850
dirs_to_create = files_to_create = []
4951

5052
dirs_to_create << "#{@template_dir}/#{@root_deployment_name}/#{deployment_name}"
@@ -56,7 +58,7 @@ def add_deployment(deployment_name)
5658
files_to_create << "#{@secrets_dir}/#{@root_deployment_name}/#{deployment_name}/secrets/secrets.yml"
5759
create_non_existing_files files_to_create
5860

59-
generate_default_bosh_deployment_dependencies(deployment_name)
61+
generate_default_bosh_deployment_dependencies(deployment_name, deployment_dependencies_content)
6062
end
6163

6264
def enable_deployment(deployment_name)
@@ -73,11 +75,9 @@ def disable_deployment(deployment_name)
7375

7476
private
7577

76-
def generate_default_bosh_deployment_dependencies(deployment_name)
77-
deployment = Deployment.default(deployment_name)
78+
def generate_default_bosh_deployment_dependencies(deployment_name, deployment_dependencies_content)
7879
filename = File.join(@template_dir, @root_deployment_name, deployment_name, 'deployment-dependencies.yml')
79-
file_content = { 'deployment' => { deployment_name => deployment.details } }
80-
File.open(filename, 'w') { |file| file << YAML.dump(file_content) }
80+
File.open(filename, 'w') { |file| file << YAML.dump(deployment_dependencies_content) }
8181
end
8282

8383
def generate_empty_map_yaml(filename)

lib/root_deployment.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ def overview_from_hash(deployment_factory)
2929
deployment = if File.exist?(enable_deployment_file)
3030
base_location = File.join(@dependency_root_path, @root_deployment_name, dirname)
3131
deployers_config = DeploymentDeployersConfig.new(dirname, base_location, filename, deployment_factory)
32-
deployment = deployers_config.load_configs
33-
raise "#{filename} - Invalid deployment: expected <#{dirname}> - Found <#{deployment.name}>" if deployment.name != dirname
34-
deployment
32+
deployers_config.load_configs
3533
else
3634
puts "Deployment #{dirname} is inactive"
3735
Deployment.new(dirname).disable

scripts/init-template.sh

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,16 @@ touch ${DEPLOYMENT_TYPE}/${DEPLOYMENT_NAME}/template/${DEPLOYMENT_NAME}-tpl.yml
4949

5050
echo "Creating dummy deployment-dependencies-sample.yml"
5151
target=${DEPLOYMENT_TYPE}/${DEPLOYMENT_NAME}/deployment-dependencies-sample.yml
52-
echo "---" >$target
53-
echo "deployment:" >>$target
54-
echo " ${DEPLOYMENT_NAME}:" >>$target
55-
echo " stemcells:" >>$target
56-
echo " bosh-openstack-kvm-ubuntu-trusty-go_agent:" >>$target
57-
echo " releases:" >>$target
58-
echo " xxx_boshrelease:" >>$target
59-
echo " base_location: https://bosh.io/d/github.com/" >>$target
60-
echo " repository:" >>$target
61-
echo "" >>$target
52+
echo "---" >"${target}"
53+
{
54+
echo "deployment:"
55+
echo " bosh-deployment:"
56+
echo " releases:"
57+
echo " xxx_boshrelease:"
58+
echo " base_location: https://bosh.io/d/github.com/"
59+
echo " repository:"
60+
echo ""
61+
} >>"${target}"
6262

6363
echo "####### WARNING #########"
6464
echo "Don't forget to rename ${DEPLOYMENT_TYPE}/${DEPLOYMENT_TYPE}/deployment-dependencies-sample.yml to ${DEPLOYMENT_TYPE}/${DEPLOYMENT_TYPE}/deployment-dependencies.yml when you're done !"

0 commit comments

Comments
 (0)