mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-09 04:00:31 -07:00
module lxd_container - added target parameter for cluster deployments (#711)
* module lxd_container - added target support for LXD cluster deployments. https://github.com/ansible-collections/community.general/issues/637 * lxd_container.py fixed PEP8 issues. * Update plugins/modules/cloud/lxd/lxd_container.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/modules/cloud/lxd/lxd_container.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/modules/cloud/lxd/lxd_container.py Added type: str for target parameter description. Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru> * lxd_container.py - added example of using target parameter * lxd_container.py - fixed PEP8 issue, trailing whitespace. * Update plugins/modules/cloud/lxd/lxd_container.py Cosmetic fix, adding newline between two blocks of examples. Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru> Co-authored-by: Felix Fontein <felix@fontein.de> Co-authored-by: Andrew Klychkov <aaklychkov@mail.ru>
This commit is contained in:
parent
95531d24ea
commit
6df7fd3026
2 changed files with 46 additions and 2 deletions
2
changelogs/fragments/711-lxd-target.yml
Normal file
2
changelogs/fragments/711-lxd-target.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- lxd_container - added support of ``--target`` flag for cluster deployments (https://github.com/ansible-collections/community.general/issues/637).
|
|
@ -72,6 +72,14 @@ options:
|
||||||
- Define the state of a container.
|
- Define the state of a container.
|
||||||
required: false
|
required: false
|
||||||
default: started
|
default: started
|
||||||
|
target:
|
||||||
|
description:
|
||||||
|
- For cluster deployments. Will attempt to create a container on a target node.
|
||||||
|
If container exists elsewhere in a cluster, then container will not be replaced or moved.
|
||||||
|
The name should respond to same name of the node you see in C(lxc cluster list).
|
||||||
|
type: str
|
||||||
|
required: false
|
||||||
|
version_added: 1.0.0
|
||||||
timeout:
|
timeout:
|
||||||
description:
|
description:
|
||||||
- A timeout for changing the state of the container.
|
- A timeout for changing the state of the container.
|
||||||
|
@ -243,6 +251,33 @@ EXAMPLES = '''
|
||||||
src: /etc/hosts
|
src: /etc/hosts
|
||||||
dest: /tmp/mycontainer-hosts
|
dest: /tmp/mycontainer-hosts
|
||||||
flat: true
|
flat: true
|
||||||
|
|
||||||
|
# An example for LXD cluster deployments. This example will create two new container on specific
|
||||||
|
# nodes - 'node01' and 'node02'. In 'target:', 'node01' and 'node02' are names of LXD cluster
|
||||||
|
# members that LXD cluster recognizes, not ansible inventory names, see: 'lxc cluster list'.
|
||||||
|
# LXD API calls can be made to any LXD member, in this example, we send API requests to
|
||||||
|
#'node01.example.com', which matches ansible inventory name.
|
||||||
|
- hosts: node01.example.com
|
||||||
|
tasks:
|
||||||
|
- name: Create LXD container
|
||||||
|
community.general.lxd_container:
|
||||||
|
name: new-container-1
|
||||||
|
state: started
|
||||||
|
source:
|
||||||
|
type: image
|
||||||
|
mode: pull
|
||||||
|
alias: ubuntu/xenial/amd64
|
||||||
|
target: node01
|
||||||
|
|
||||||
|
- name: Create container on another node
|
||||||
|
community.general.lxd_container:
|
||||||
|
name: new-container-2
|
||||||
|
state: started
|
||||||
|
source:
|
||||||
|
type: image
|
||||||
|
mode: pull
|
||||||
|
alias: ubuntu/xenial/amd64
|
||||||
|
target: node02
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = '''
|
||||||
|
@ -273,7 +308,7 @@ import time
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException
|
from ansible_collections.community.general.plugins.module_utils.lxd import LXDClient, LXDClientException
|
||||||
|
from ansible.module_utils.six.moves.urllib.parse import urlencode
|
||||||
|
|
||||||
# LXD_ANSIBLE_STATES is a map of states that contain values of methods used
|
# LXD_ANSIBLE_STATES is a map of states that contain values of methods used
|
||||||
# when a particular state is evoked.
|
# when a particular state is evoked.
|
||||||
|
@ -319,6 +354,7 @@ class LXDContainerManagement(object):
|
||||||
self.wait_for_ipv4_addresses = self.module.params['wait_for_ipv4_addresses']
|
self.wait_for_ipv4_addresses = self.module.params['wait_for_ipv4_addresses']
|
||||||
self.force_stop = self.module.params['force_stop']
|
self.force_stop = self.module.params['force_stop']
|
||||||
self.addresses = None
|
self.addresses = None
|
||||||
|
self.target = self.module.params['target']
|
||||||
|
|
||||||
self.key_file = self.module.params.get('client_key', None)
|
self.key_file = self.module.params.get('client_key', None)
|
||||||
self.cert_file = self.module.params.get('client_cert', None)
|
self.cert_file = self.module.params.get('client_cert', None)
|
||||||
|
@ -378,7 +414,10 @@ class LXDContainerManagement(object):
|
||||||
def _create_container(self):
|
def _create_container(self):
|
||||||
config = self.config.copy()
|
config = self.config.copy()
|
||||||
config['name'] = self.name
|
config['name'] = self.name
|
||||||
self.client.do('POST', '/1.0/containers', config)
|
if self.target:
|
||||||
|
self.client.do('POST', '/1.0/containers?' + urlencode(dict(target=self.target)), config)
|
||||||
|
else:
|
||||||
|
self.client.do('POST', '/1.0/containers', config)
|
||||||
self.actions.append('create')
|
self.actions.append('create')
|
||||||
|
|
||||||
def _start_container(self):
|
def _start_container(self):
|
||||||
|
@ -607,6 +646,9 @@ def main():
|
||||||
choices=LXD_ANSIBLE_STATES.keys(),
|
choices=LXD_ANSIBLE_STATES.keys(),
|
||||||
default='started'
|
default='started'
|
||||||
),
|
),
|
||||||
|
target=dict(
|
||||||
|
type='str',
|
||||||
|
),
|
||||||
timeout=dict(
|
timeout=dict(
|
||||||
type='int',
|
type='int',
|
||||||
default=30
|
default=30
|
||||||
|
|
Loading…
Add table
Reference in a new issue