From 32fa21c95fbd7324ead570938139a4fd5268977c Mon Sep 17 00:00:00 2001 From: Johannes 'fish' Ziemke Date: Fri, 14 Mar 2014 11:11:56 +0100 Subject: [PATCH] Rename present to running, add new present state The new present state just makes sure that a container exists, not that it's running, although it get started one creation. This is very useful for data volumes. This also changes the old present, now running (default) state to only create the container if it's not found, otherwise it just get started. See also discussion on mailinglist: https://groups.google.com/forum/#!topic/ansible-devel/jB84gdhPzLQ This closes #6395 --- library/cloud/docker | 50 ++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/library/cloud/docker b/library/cloud/docker index a1e9a5074c8..46ef30d4fe0 100644 --- a/library/cloud/docker +++ b/library/cloud/docker @@ -148,7 +148,7 @@ options: - Set the state of the container required: false default: present - choices: [ "present", "stopped", "absent", "killed", "restarted" ] + choices: [ "present", "running", "stopped", "absent", "killed", "restarted" ] aliases: [] privileged: description: @@ -632,7 +632,7 @@ def main(): env = dict(), dns = dict(), detach = dict(default=True, type='bool'), - state = dict(default='present', choices=['absent', 'present', 'stopped', 'killed', 'restarted']), + state = dict(default='running', choices=['absent', 'present', 'running', 'stopped', 'killed', 'restarted']), debug = dict(default=False, type='bool'), privileged = dict(default=False, type='bool'), lxc_conf = dict(default=None), @@ -662,25 +662,35 @@ def main(): changed = False # start/stop containers - if state == "present": - - # make sure a container with `name` is running - if name and "/" + name not in map(lambda x: x.get('Name'), running_containers): + if state in [ "running", "present" ]: + + # make sure a container with `name` exists, if not create and start it + if name and "/" + name not in map(lambda x: x.get('Name'), deployed_containers): containers = manager.create_containers(1) - manager.start_containers(containers) - - # start more containers if we don't have enough - elif delta > 0: - containers = manager.create_containers(delta) - manager.start_containers(containers) - - # stop containers if we have too many - elif delta < 0: - containers_to_stop = running_containers[0:abs(delta)] - containers = manager.stop_containers(containers_to_stop) - manager.remove_containers(containers_to_stop) - - facts = manager.get_running_containers() + if state == "present": #otherwise it get (re)started later anyways.. + manager.start_containers(containers) + running_containers = manager.get_running_containers() + deployed_containers = manager.get_deployed_containers() + + if state == "running": + # make sure a container with `name` is running + if name and "/" + name not in map(lambda x: x.get('Name'), running_containers): + manager.start_containers(deployed_containers) + + # start more containers if we don't have enough + elif delta > 0: + containers = manager.create_containers(delta) + manager.start_containers(containers) + + # stop containers if we have too many + elif delta < 0: + containers_to_stop = running_containers[0:abs(delta)] + containers = manager.stop_containers(containers_to_stop) + manager.remove_containers(containers_to_stop) + + facts = manager.get_running_containers() + else: + acts = manager.get_deployed_containers() # stop and remove containers elif state == "absent":