Update tags when changing server
Tags are not included in the metadata and are not supported by PUT /servers/{server_id}, requiring a specific mechanism for modification. With this fix, existing tags on the server will be completely replaced by the new set of tags provided during the update Also optimized tags tests a bit Change-Id: I2673ed57d848654427dcb7ed7aceba811a3dd314
This commit is contained in:
parent
5f4db3583e
commit
e065818024
@ -241,40 +241,6 @@
|
|||||||
name: "{{ server_name }}"
|
name: "{{ server_name }}"
|
||||||
wait: true
|
wait: true
|
||||||
|
|
||||||
- name: Create server with tags
|
|
||||||
openstack.cloud.server:
|
|
||||||
cloud: "{{ cloud }}"
|
|
||||||
state: present
|
|
||||||
name: "{{ server_name }}"
|
|
||||||
image: "{{ image_name }}"
|
|
||||||
flavor: "{{ flavor_name }}"
|
|
||||||
network: "{{ server_network }}"
|
|
||||||
auto_ip: false
|
|
||||||
tags:
|
|
||||||
- first
|
|
||||||
- second
|
|
||||||
wait: true
|
|
||||||
register: server
|
|
||||||
|
|
||||||
- debug: var=server
|
|
||||||
|
|
||||||
- name: Get info about tags
|
|
||||||
openstack.cloud.server_info:
|
|
||||||
cloud: "{{ cloud }}"
|
|
||||||
server: "{{ server_name }}"
|
|
||||||
register: info
|
|
||||||
|
|
||||||
- name: Check filter results
|
|
||||||
assert:
|
|
||||||
that: info.servers[0].tags == ["first", "second"]
|
|
||||||
|
|
||||||
- name: Delete server with tags
|
|
||||||
openstack.cloud.server:
|
|
||||||
cloud: "{{ cloud }}"
|
|
||||||
state: absent
|
|
||||||
name: "{{ server_name }}"
|
|
||||||
wait: true
|
|
||||||
|
|
||||||
- name: Create server from volume
|
- name: Create server from volume
|
||||||
openstack.cloud.server:
|
openstack.cloud.server:
|
||||||
cloud: "{{ cloud }}"
|
cloud: "{{ cloud }}"
|
||||||
@ -433,6 +399,9 @@
|
|||||||
- port-id: "{{ port.port.id }}"
|
- port-id: "{{ port.port.id }}"
|
||||||
reuse_ips: false
|
reuse_ips: false
|
||||||
state: present
|
state: present
|
||||||
|
tags:
|
||||||
|
- first
|
||||||
|
- second
|
||||||
wait: true
|
wait: true
|
||||||
register: server
|
register: server
|
||||||
|
|
||||||
@ -447,6 +416,7 @@
|
|||||||
|selectattr('OS-EXT-IPS:type', 'equalto', 'floating')
|
|selectattr('OS-EXT-IPS:type', 'equalto', 'floating')
|
||||||
|map(attribute='addr')
|
|map(attribute='addr')
|
||||||
|list|length == 0
|
|list|length == 0
|
||||||
|
- server.server.tags == ["first", "second"]
|
||||||
|
|
||||||
- name: Find all floating ips for debugging
|
- name: Find all floating ips for debugging
|
||||||
openstack.cloud.floating_ip_info:
|
openstack.cloud.floating_ip_info:
|
||||||
@ -488,6 +458,8 @@
|
|||||||
- '{{ server_security_group }}'
|
- '{{ server_security_group }}'
|
||||||
- '{{ server_alt_security_group }}'
|
- '{{ server_alt_security_group }}'
|
||||||
state: present
|
state: present
|
||||||
|
tags:
|
||||||
|
- yellow
|
||||||
wait: true
|
wait: true
|
||||||
register: server_updated
|
register: server_updated
|
||||||
|
|
||||||
@ -509,6 +481,7 @@
|
|||||||
- server_updated.server.addresses[server_network]|length == 2
|
- server_updated.server.addresses[server_network]|length == 2
|
||||||
- port.port.fixed_ips[0].ip_address in
|
- port.port.fixed_ips[0].ip_address in
|
||||||
server_updated.server.addresses[server_network]|map(attribute='addr')
|
server_updated.server.addresses[server_network]|map(attribute='addr')
|
||||||
|
- server_updated.server.tags == ['yellow']
|
||||||
# TODO: Verify networks once openstacksdk's issue #2010352 has been solved
|
# TODO: Verify networks once openstacksdk's issue #2010352 has been solved
|
||||||
# Ref.: https://storyboard.openstack.org/#!/story/2010352
|
# Ref.: https://storyboard.openstack.org/#!/story/2010352
|
||||||
#- server_updated.server.addresses.public|length > 0
|
#- server_updated.server.addresses.public|length > 0
|
||||||
@ -543,6 +516,8 @@
|
|||||||
- '{{ server_security_group }}'
|
- '{{ server_security_group }}'
|
||||||
- '{{ server_alt_security_group }}'
|
- '{{ server_alt_security_group }}'
|
||||||
state: present
|
state: present
|
||||||
|
tags:
|
||||||
|
- yellow
|
||||||
wait: true
|
wait: true
|
||||||
register: server_updated_again
|
register: server_updated_again
|
||||||
|
|
||||||
@ -551,6 +526,7 @@
|
|||||||
that:
|
that:
|
||||||
- server.server.id == server_updated_again.server.id
|
- server.server.id == server_updated_again.server.id
|
||||||
- server_updated_again is not changed
|
- server_updated_again is not changed
|
||||||
|
- server_updated_again.server.tags == ['yellow']
|
||||||
|
|
||||||
# TODO: Drop failure test once openstacksdk's issue #2010352 has been solved
|
# TODO: Drop failure test once openstacksdk's issue #2010352 has been solved
|
||||||
# Ref.: https://storyboard.openstack.org/#!/story/2010352
|
# Ref.: https://storyboard.openstack.org/#!/story/2010352
|
||||||
|
@ -210,6 +210,7 @@ options:
|
|||||||
- A list of tags should be added to instance
|
- A list of tags should be added to instance
|
||||||
type: list
|
type: list
|
||||||
elements: str
|
elements: str
|
||||||
|
default: []
|
||||||
terminate_volume:
|
terminate_volume:
|
||||||
description:
|
description:
|
||||||
- If C(true), delete volume when deleting the instance and if it has
|
- If C(true), delete volume when deleting the instance and if it has
|
||||||
@ -831,7 +832,7 @@ class ServerModule(OpenStackModule):
|
|||||||
scheduler_hints=dict(type='dict'),
|
scheduler_hints=dict(type='dict'),
|
||||||
security_groups=dict(default=[], type='list', elements='str'),
|
security_groups=dict(default=[], type='list', elements='str'),
|
||||||
state=dict(default='present', choices=['absent', 'present']),
|
state=dict(default='present', choices=['absent', 'present']),
|
||||||
tags=dict(type='list', elements='str'),
|
tags=dict(type='list', default=[], elements='str'),
|
||||||
terminate_volume=dict(default=False, type='bool'),
|
terminate_volume=dict(default=False, type='bool'),
|
||||||
userdata=dict(),
|
userdata=dict(),
|
||||||
volume_size=dict(type='int'),
|
volume_size=dict(type='int'),
|
||||||
@ -897,7 +898,8 @@ class ServerModule(OpenStackModule):
|
|||||||
return {
|
return {
|
||||||
**self._build_update_ips(server),
|
**self._build_update_ips(server),
|
||||||
**self._build_update_security_groups(server),
|
**self._build_update_security_groups(server),
|
||||||
**self._build_update_server(server)}
|
**self._build_update_server(server),
|
||||||
|
**self._build_update_tags(server)}
|
||||||
|
|
||||||
def _build_update_ips(self, server):
|
def _build_update_ips(self, server):
|
||||||
auto_ip = self.params['auto_ip']
|
auto_ip = self.params['auto_ip']
|
||||||
@ -1037,6 +1039,13 @@ class ServerModule(OpenStackModule):
|
|||||||
|
|
||||||
return update
|
return update
|
||||||
|
|
||||||
|
def _build_update_tags(self, server):
|
||||||
|
required_tags = self.params.get('tags')
|
||||||
|
if set(server["tags"]) == set(required_tags):
|
||||||
|
return {}
|
||||||
|
update = dict(tags=required_tags)
|
||||||
|
return update
|
||||||
|
|
||||||
def _create(self):
|
def _create(self):
|
||||||
for k in ['auto_ip', 'floating_ips', 'floating_ip_pools']:
|
for k in ['auto_ip', 'floating_ips', 'floating_ip_pools']:
|
||||||
if self.params[k] \
|
if self.params[k] \
|
||||||
@ -1111,6 +1120,7 @@ class ServerModule(OpenStackModule):
|
|||||||
def _update(self, server, update):
|
def _update(self, server, update):
|
||||||
server = self._update_ips(server, update)
|
server = self._update_ips(server, update)
|
||||||
server = self._update_security_groups(server, update)
|
server = self._update_security_groups(server, update)
|
||||||
|
server = self._update_tags(server, update)
|
||||||
server = self._update_server(server, update)
|
server = self._update_server(server, update)
|
||||||
# Refresh server attributes after security groups etc. have changed
|
# Refresh server attributes after security groups etc. have changed
|
||||||
#
|
#
|
||||||
@ -1183,6 +1193,16 @@ class ServerModule(OpenStackModule):
|
|||||||
# be postponed until all updates have been applied.
|
# be postponed until all updates have been applied.
|
||||||
return server
|
return server
|
||||||
|
|
||||||
|
def _update_tags(self, server, update):
|
||||||
|
tags = update.get('tags')
|
||||||
|
|
||||||
|
self.conn.compute.put(
|
||||||
|
"/servers/{server_id}/tags".format(server_id=server['id']),
|
||||||
|
json={"tags": tags},
|
||||||
|
microversion="2.26"
|
||||||
|
)
|
||||||
|
return server
|
||||||
|
|
||||||
def _parse_metadata(self, metadata):
|
def _parse_metadata(self, metadata):
|
||||||
if not metadata:
|
if not metadata:
|
||||||
return {}
|
return {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user