summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Coldrick <adam.coldrick@codethink.co.uk>2014-05-22 15:30:19 +0000
committerAdam Coldrick <adam.coldrick@codethink.co.uk>2014-05-23 16:32:53 +0000
commit61b90dd2fd2fbed7e8d4b9dc15642b25702891fd (patch)
treedea3727dc7e8b204ccf95f41fae32e5b7dba8c1e
parent898a7a286fc002543df02142867606403df2de30 (diff)
downloadmorph-61b90dd2fd2fbed7e8d4b9dc15642b25702891fd.tar.gz
Allow the user to specify deployments in a cluster
Instead of taking the name of a cluster morphology and zero or more parameters for overriding the cluster morphology, morph deploy should take the name of a cluster morphology and the names of zero or more system deployments that are defined in the cluster morphology. If no deployment names are given then all deployments are deployed. The parameters can still be passed in the same format as before using the `--param="SYSTEM.KEY=VALUE"` option.
-rw-r--r--morphlib/plugins/deploy_plugin.py30
1 files changed, 22 insertions, 8 deletions
diff --git a/morphlib/plugins/deploy_plugin.py b/morphlib/plugins/deploy_plugin.py
index 1d582949..a69d3a22 100644
--- a/morphlib/plugins/deploy_plugin.py
+++ b/morphlib/plugins/deploy_plugin.py
@@ -35,10 +35,9 @@ class DeployPlugin(cliapp.Plugin):
'existing cluster of systems rather than do '
'an initial deployment',
group=group_deploy)
-
self.app.add_subcommand(
'deploy', self.deploy,
- arg_synopsis='CLUSTER [SYSTEM.KEY=VALUE]')
+ arg_synopsis='CLUSTER [DEPLOYMENT...] [SYSTEM.KEY=VALUE]')
def disable(self):
pass
@@ -275,7 +274,6 @@ class DeployPlugin(cliapp.Plugin):
'/', 0)
cluster_name = morphlib.util.strip_morph_extension(args[0])
- env_vars = args[1:]
ws = morphlib.workspace.open('.')
sb = morphlib.sysbranchdir.open_from_within('.')
@@ -302,6 +300,17 @@ class DeployPlugin(cliapp.Plugin):
"Error: morph deploy is only supported for cluster"
" morphologies.")
+ # parse the rest of the args
+ all_deployments = set()
+ deployments = set()
+ for system in cluster_morphology['systems']:
+ all_deployments.update([sys_id for sys_id in system['deploy']])
+ for item in args[1:]:
+ if not item in all_deployments:
+ break
+ deployments.add(item)
+ env_vars = args[len(deployments) + 1:]
+ print env_vars
bb = morphlib.buildbranch.BuildBranch(sb, build_ref_prefix,
push_temporary=False)
with contextlib.closing(bb) as bb:
@@ -335,7 +344,7 @@ class DeployPlugin(cliapp.Plugin):
self.deploy_system(build_command, deploy_tempdir,
root_repo_dir, bb.root_repo_url,
bb.root_ref, system, env_vars,
- parent_location='')
+ deployments, parent_location='')
finally:
shutil.rmtree(deploy_tempdir)
@@ -343,7 +352,11 @@ class DeployPlugin(cliapp.Plugin):
def deploy_system(self, build_command, deploy_tempdir,
root_repo_dir, build_repo, ref, system, env_vars,
- parent_location):
+ deployments, parent_location):
+ sys_ids = [sys_id for sys_id, _ in system['deploy'].iteritems()]
+ if deployments and not \
+ any(sys_id in deployments for sys_id in sys_ids):
+ return
old_status_prefix = self.app.status_prefix
system_status_prefix = '%s[%s]' % (old_status_prefix, system['morph'])
self.app.status_prefix = system_status_prefix
@@ -356,8 +369,9 @@ class DeployPlugin(cliapp.Plugin):
artifact = build_command.resolve_artifacts(srcpool)
deploy_defaults = system.get('deploy-defaults', {})
- deployments = system['deploy']
- for system_id, deploy_params in deployments.iteritems():
+ for system_id, deploy_params in system['deploy'].iteritems():
+ if not system_id in deployments and deployments:
+ continue
deployment_status_prefix = '%s[%s]' % (
system_status_prefix, system_id)
self.app.status_prefix = deployment_status_prefix
@@ -398,7 +412,7 @@ class DeployPlugin(cliapp.Plugin):
for subsystem in system.get('subsystems', []):
self.deploy_system(build_command, deploy_tempdir,
root_repo_dir, build_repo,
- ref, subsystem, env_vars,
+ ref, subsystem, env_vars, [],
parent_location=system_tree)
if parent_location:
deploy_location = os.path.join(parent_location,