Skip to content

Commit

Permalink
Support overriding BOSH job instance_definition.
Browse files Browse the repository at this point in the history
  • Loading branch information
mboldt committed Jun 28, 2019
1 parent 75a2787 commit de4e5c5
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 12 deletions.
3 changes: 3 additions & 0 deletions sample/tile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@ packages:
max_in_flight: 1
properties:
password: red!s
instance_definition:
constraints:
min: 2
- name: sanity-tests
templates:
- name: sanity-tests
Expand Down
14 changes: 14 additions & 0 deletions tile_generator/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,13 +327,27 @@ def latest_stemcell(self, os):
return latest_major
return None # TODO - Look for latest on bosh.io for given os

def _build_instance_definition(self, job):
instance_def = {
'configurable': True,
'default': job.get('instances', 1),
'name': 'instances',
'type': 'integer'
}
if job.get('singleton') or job.get('lifecycle') == 'errand':
instance_def['configurable'] = False
instance_def['default'] = 1
merge_dict(instance_def, job.get('instance_definition', {}))
return instance_def

def normalize_jobs(self):
for release in self.get('releases', {}).values():
for job in release.get('jobs', []):
job['type'] = job.get('type', job['name'])
job['template'] = job.get('template', job['type'])
job['properties'] = job.get('properties', {})
job['manifest'] = self.build_job_manifest(job)
job['instance_definition'] = self._build_instance_definition(job)

def build_job_manifest(self, job):
# TODO: This whole thing needs to be changed to new world order
Expand Down
86 changes: 85 additions & 1 deletion tile_generator/test_config_expected_output.json
Original file line number Diff line number Diff line change
Expand Up @@ -1027,6 +1027,15 @@
"default_internet_connected": false,
"dynamic_ip": 1,
"ephemeral_disk": 4096,
"instance_definition": {
"configurable": true,
"constraints": {
"min": 2
},
"default": 2,
"name": "instances",
"type": "integer"
},
"instances": 2,
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -1204,6 +1213,12 @@
"cpu": 2,
"dynamic_ip": 1,
"ephemeral_disk": 4096,
"instance_definition": {
"configurable": false,
"default": 1,
"name": "instances",
"type": "integer"
},
"lifecycle": "errand",
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -1406,6 +1421,12 @@
"jobs": [
{
"dynamic_ip": 1,
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"instances": 1,
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -1616,6 +1637,12 @@
},
{
"dynamic_ip": 1,
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"instances": 1,
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -1829,6 +1856,12 @@
"jobs": [
{
"dynamic_ip": 1,
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"instances": 1,
"manifest": {
"app_instances": "(( .properties.app_instances.value ))",
Expand Down Expand Up @@ -2058,6 +2091,12 @@
"is_cf": true,
"jobs": [
{
"instance_definition": {
"configurable": false,
"default": 1,
"name": "instances",
"type": "integer"
},
"lifecycle": "errand",
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -2228,6 +2267,12 @@
"type": "deploy-all"
},
{
"instance_definition": {
"configurable": false,
"default": 1,
"name": "instances",
"type": "integer"
},
"lifecycle": "errand",
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -2390,6 +2435,12 @@
"type": "delete-all"
},
{
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
"app_domains": [
Expand Down Expand Up @@ -3003,7 +3054,7 @@
"files": [
{
"name": "utils.sh",
"path": "/home/user/Work/tile-generator/tile_generator/templates/src/common/utils.sh"
"path": "/Users/mboldt/pivotal/tile-generator/tile_generator/templates/src/common/utils.sh"
}
],
"name": "common"
Expand All @@ -3019,6 +3070,15 @@
"default_internet_connected": false,
"dynamic_ip": 1,
"ephemeral_disk": 4096,
"instance_definition": {
"configurable": true,
"constraints": {
"min": 2
},
"default": 2,
"name": "instances",
"type": "integer"
},
"instances": 2,
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -3196,6 +3256,12 @@
"cpu": 2,
"dynamic_ip": 1,
"ephemeral_disk": 4096,
"instance_definition": {
"configurable": false,
"default": 1,
"name": "instances",
"type": "integer"
},
"lifecycle": "errand",
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -3387,6 +3453,12 @@
"jobs": [
{
"dynamic_ip": 1,
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"instances": 1,
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -3597,6 +3669,12 @@
},
{
"dynamic_ip": 1,
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"instances": 1,
"manifest": {
"allow_paid_service_plans": "(( .properties.allow_paid_service_plans.value ))",
Expand Down Expand Up @@ -3810,6 +3888,12 @@
"jobs": [
{
"dynamic_ip": 1,
"instance_definition": {
"configurable": true,
"default": 1,
"name": "instances",
"type": "integer"
},
"instances": 1,
"manifest": {
"app_instances": "(( .properties.app_instances.value ))",
Expand Down
2 changes: 2 additions & 0 deletions tile_generator/test_metadata_expected_output.yml
Original file line number Diff line number Diff line change
Expand Up @@ -996,6 +996,8 @@ job_types:
dynamic_ip: 1
instance_definition:
configurable: true
constraints:
min: 2
default: 2
name: instances
type: integer
Expand Down
13 changes: 2 additions & 11 deletions tile_generator/tile_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -591,19 +591,10 @@ def _build_job_types(self):
if job.get('default_internet_connected') != None:
bosh_release_job['default_internet_connected'] = job.get('default_internet_connected')

instance_def = {
'configurable': True,
'default': job.get('instances', 1),
'name': 'instances',
'type': 'integer'
}
if job.get('singleton') or job.get('lifecycle') == 'errand':
instance_def['configurable'] = False
instance_def['default'] = 1
if self.config['metadata_version'] < 1.7:
bosh_release_job['instance_definitions'] = [instance_def]
bosh_release_job['instance_definitions'] = [job.get('instance_definition')]
else:
bosh_release_job['instance_definition'] = instance_def
bosh_release_job['instance_definition'] = job.get('instance_definition')

job_types.append(bosh_release_job)

Expand Down

0 comments on commit de4e5c5

Please sign in to comment.