Skip to content

Commit

Permalink
Adding while loop to wait for cluster container creation (#4039) (#4095)
Browse files Browse the repository at this point in the history
* Adding while loop to wait

* Adding changelog fragment

* Adding parameter and more docs

* Adjusting docs

Co-authored-by: Travis Scotto <tscotto@webstaurantstore.com>
(cherry picked from commit 7aab449)

Co-authored-by: tman5 <10875976+tman5@users.noreply.github.com>
  • Loading branch information
patchback[bot] and tman5 authored Jan 28, 2022
1 parent 499f4b4 commit 0169cb8
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
2 changes: 2 additions & 0 deletions changelogs/fragments/4039-cluster-container-wait.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- "lxc_container - added ``wait_for_container`` parameter. If ``true`` the module will wait until the running task reports success as the status (https://github.com/ansible-collections/community.general/pull/4039)."
5 changes: 4 additions & 1 deletion plugins/module_utils/lxd.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,14 @@ def __init__(self, url, key_file=None, cert_file=None, debug=False):
else:
raise LXDClientException('URL scheme must be unix: or https:')

def do(self, method, url, body_json=None, ok_error_codes=None, timeout=None):
def do(self, method, url, body_json=None, ok_error_codes=None, timeout=None, wait_for_container=None):
resp_json = self._send_request(method, url, body_json=body_json, ok_error_codes=ok_error_codes, timeout=timeout)
if resp_json['type'] == 'async':
url = '{0}/wait'.format(resp_json['operation'])
resp_json = self._send_request('GET', url)
if wait_for_container:
while resp_json['metadata']['status'] == 'Running':
resp_json = self._send_request('GET', url)
if resp_json['metadata']['status'] != 'Success':
self._raise_err_from_json(resp_json)
return resp_json
Expand Down
16 changes: 14 additions & 2 deletions plugins/modules/cloud/lxd/lxd_container.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,13 @@
required: false
default: false
type: bool
wait_for_container:
description:
- If set to C(true), the tasks will wait till the task reports a
success status when performing container operations.
default: false
type: bool
version_added: 4.4.0
force_stop:
description:
- If this is true, the C(lxd_container) forces to stop the instance
Expand Down Expand Up @@ -414,6 +421,7 @@ def __init__(self, module):
self.force_stop = self.module.params['force_stop']
self.addresses = None
self.target = self.module.params['target']
self.wait_for_container = self.module.params['wait_for_container']

self.type = self.module.params['type']

Expand Down Expand Up @@ -487,9 +495,9 @@ def _create_instance(self):
config = self.config.copy()
config['name'] = self.name
if self.target:
self.client.do('POST', '{0}?{1}'.format(self.api_endpoint, urlencode(dict(target=self.target))), config)
self.client.do('POST', '{0}?{1}'.format(self.api_endpoint, urlencode(dict(target=self.target))), config, wait_for_container=self.wait_for_container)
else:
self.client.do('POST', self.api_endpoint, config)
self.client.do('POST', self.api_endpoint, config, wait_for_container=self.wait_for_container)
self.actions.append('create')

def _start_instance(self):
Expand Down Expand Up @@ -745,6 +753,10 @@ def main():
default='container',
choices=['container', 'virtual-machine'],
),
wait_for_container=dict(
type='bool',
default=False
),
wait_for_ipv4_addresses=dict(
type='bool',
default=False
Expand Down

0 comments on commit 0169cb8

Please sign in to comment.