mirror of
https://opendev.org/openstack/ansible-collections-openstack.git
synced 2026-05-13 13:02:21 +00:00
Refactored port and port_info modules
Define port's module attribute 'name' as a required attribute because
this parameter is used to find, update and delete ports. Technically,
a name is not required to create a port, but idempotency cannot be
implemented without an identifier to refer to a port. In this
collection we use resource names to find and identify resources. We
do not offer a dedicated id attribute in most modules.
Use port's module attribute 'network' when finding, creating,
updating or deleting ports if the user provided this attribute.
This allows to reduce ambiguity when equal names are used across
different networks.
Added 'description' parameter to port module.
Renamed port's module attributes 'vnic_type' to 'binding_vnic_type'
and 'admin_state_up' to 'is_admin_state_up' to match openstacksdk's
attribute names which are used e.g. in module results. Added aliases
for the old attribute names to keep backward compatibility.
Renamed port_info's module attribute 'port' to 'name' and added
the former as an alias to be consistent with other *_info modules.
Dropped default=None and required=False from argument_spec of port
module because those are the default in Ansible [1][2].
Dropped 'id' field from port module's results to be consistent across
other modules. Use 'port.id' instead.
Sorted argument specs and documentation of the port module and
marked attributes which are not updatable.
Updated RETURN fields documentation for the module results of both
port and port_info modules.
Added integration tests to check the update mechanism of the port
module.
Added assertions for module results to catch future changes in the
openstacksdk and our Ansible modules.
Dropped openstacksdk version check since we require a recent release
anyway.
Fixed indentation in integration tests.
Merged integration tests of port_info module into port module,
because the former does not create any ports and assumes that
ports have been created earlier.
[1] https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_documenting.html
[2] 61af59c808/lib/ansible/module_utils/common/parameters.py (L489)
Signed-off-by: Jakob Meng <code@jakobmeng.de>
Change-Id: Iacca78649f8e01ae95649d8d462f5d0a1740405e
This commit is contained in:
@@ -11,10 +11,11 @@ author: OpenStack Ansible SIG
|
||||
description:
|
||||
- Retrieve information about ports from OpenStack.
|
||||
options:
|
||||
port:
|
||||
name:
|
||||
description:
|
||||
- Unique name or ID of a port.
|
||||
type: str
|
||||
aliases: ['port']
|
||||
filters:
|
||||
description:
|
||||
- A dictionary of meta data to use for further filtering. Elements
|
||||
@@ -41,10 +42,10 @@ EXAMPLES = '''
|
||||
# Gather information about a single port
|
||||
- openstack.cloud.port_info:
|
||||
cloud: mycloud
|
||||
port: 6140317d-e676-31e1-8a4a-b1913814a471
|
||||
name: 6140317d-e676-31e1-8a4a-b1913814a471
|
||||
|
||||
# Gather information about all ports that have device_id set to a specific value
|
||||
# and with a status of ACTIVE.
|
||||
# Gather information about all ports that have device_id set to a specific
|
||||
# value and with a status of ACTIVE.
|
||||
- openstack.cloud.port_info:
|
||||
cloud: mycloud
|
||||
filters:
|
||||
@@ -54,34 +55,37 @@ EXAMPLES = '''
|
||||
|
||||
RETURN = '''
|
||||
ports:
|
||||
description: List of port dictionaries. A subset of the dictionary keys
|
||||
listed below may be returned, depending on your cloud provider.
|
||||
description: |
|
||||
List of port dictionaries. A subset of the dictionary keys listed below
|
||||
may be returned, depending on your cloud provider.
|
||||
returned: always
|
||||
type: list
|
||||
elements: dict
|
||||
contains:
|
||||
allowed_address_pairs:
|
||||
description: A set of zero or more allowed address pairs. An
|
||||
address pair consists of an IP address and MAC address.
|
||||
description: Allowed address pairs.
|
||||
returned: success
|
||||
type: list
|
||||
sample: []
|
||||
binding_host_id:
|
||||
description: The UUID of the host where the port is allocated.
|
||||
description: |
|
||||
The ID of the host where the port is allocated. In some cases,
|
||||
different implementations can run on different hosts.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "b4bd682d-234a-4091-aa5b-4b025a6a7759"
|
||||
binding_profile:
|
||||
description: A dictionary the enables the application running on
|
||||
the host to pass and receive VIF port-specific
|
||||
information to the plug-in.
|
||||
description: |
|
||||
A dictionary the enables the application running on the
|
||||
specified host to pass and receive vif port-specific
|
||||
information to the plug-in.
|
||||
returned: success
|
||||
type: dict
|
||||
sample: {}
|
||||
binding_vif_details:
|
||||
description: A dictionary that enables the application to pass
|
||||
information about functions that the Networking API
|
||||
provides.
|
||||
description: |
|
||||
A dictionary that enables the application to pass
|
||||
information about functions that the Networking API provides.
|
||||
returned: success
|
||||
type: dict
|
||||
binding_vif_type:
|
||||
@@ -89,13 +93,14 @@ ports:
|
||||
returned: success
|
||||
type: dict
|
||||
binding_vnic_type:
|
||||
description: The virtual network interface card (vNIC) type that is
|
||||
bound to the neutron port.
|
||||
description: |
|
||||
The virtual network interface card (vNIC) type that is
|
||||
bound to the neutron port.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "normal"
|
||||
created_at:
|
||||
description: Date the port was created
|
||||
description: Timestamp when the port was created.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "2022-02-03T13:28:25Z"
|
||||
@@ -104,69 +109,78 @@ ports:
|
||||
returned: success
|
||||
type: str
|
||||
description:
|
||||
description: Description of a port
|
||||
description: The port description.
|
||||
returned: success
|
||||
type: str
|
||||
device_id:
|
||||
description: The UUID of the device that uses this port.
|
||||
description: Device ID of this port.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "b4bd682d-234a-4091-aa5b-4b025a6a7759"
|
||||
device_owner:
|
||||
description: The UUID of the entity that uses this port.
|
||||
description: Device owner of this port, e.g. C(network:dhcp).
|
||||
returned: success
|
||||
type: str
|
||||
sample: "network:router_interface"
|
||||
device_profile:
|
||||
description: Device profile
|
||||
description: |
|
||||
Device profile of this port, refers to Cyborg device-profiles:
|
||||
https://docs.openstack.org/api-ref/accelerator/v2/index.html#
|
||||
device-profiles.
|
||||
returned: success
|
||||
type: str
|
||||
dns_assignment:
|
||||
description: DNS assignment information.
|
||||
description: DNS assignment for the port.
|
||||
returned: success
|
||||
type: list
|
||||
dns_domain:
|
||||
description: A valid DNS domain
|
||||
description: DNS domain assigned to the port.
|
||||
returned: success
|
||||
type: str
|
||||
dns_name:
|
||||
description: DNS name
|
||||
description: DNS name for the port.
|
||||
returned: success
|
||||
type: str
|
||||
extra_dhcp_opts:
|
||||
description: A set of zero or more extra DHCP option pairs.
|
||||
An option pair consists of an option value and name.
|
||||
description: |
|
||||
A set of zero or more extra DHCP option pairs.
|
||||
An option pair consists of an option value and name.
|
||||
returned: success
|
||||
type: list
|
||||
sample: []
|
||||
fixed_ips:
|
||||
description: The IP addresses for the port. Includes the IP address
|
||||
and UUID of the subnet.
|
||||
description: |
|
||||
IP addresses for the port. Includes the IP address and subnet
|
||||
ID.
|
||||
returned: success
|
||||
type: list
|
||||
id:
|
||||
description: The UUID of the port.
|
||||
description: The port ID.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "3ec25c97-7052-4ab8-a8ba-92faf84148de"
|
||||
ip_allocation:
|
||||
description: Indicates when ports use either deferred, immediate
|
||||
or no IP allocation (none).
|
||||
description: |
|
||||
The ip_allocation indicates when ports use deferred,
|
||||
immediate or no IP allocation.
|
||||
returned: success
|
||||
type: str
|
||||
is_admin_state_up:
|
||||
description: The administrative state of the router, which is
|
||||
up (true) or down (false).
|
||||
description: |
|
||||
The administrative state of the port, which is up C(True) or
|
||||
down C(False).
|
||||
returned: success
|
||||
type: bool
|
||||
sample: true
|
||||
is_port_security_enabled:
|
||||
description: The port security status. The status is enabled (true) or disabled (false).
|
||||
description: |
|
||||
The port security status, which is enabled C(True) or disabled
|
||||
C(False).
|
||||
returned: success
|
||||
type: bool
|
||||
sample: false
|
||||
mac_address:
|
||||
description: The MAC address.
|
||||
description: The MAC address of an allowed address pair.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "00:00:5E:00:53:42"
|
||||
@@ -176,42 +190,43 @@ ports:
|
||||
type: str
|
||||
sample: "port_name"
|
||||
network_id:
|
||||
description: The UUID of the attached network.
|
||||
description: The ID of the attached network.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "dd1ede4f-3952-4131-aab6-3b8902268c7d"
|
||||
numa_affinity_policy:
|
||||
description: The port NUMA affinity policy requested during the
|
||||
virtual machine scheduling. Values are None, required,
|
||||
preferred or legacy.
|
||||
description: |
|
||||
The NUMA affinity policy defined for this port.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "required"
|
||||
project_id:
|
||||
description: The ID of the project.
|
||||
description: The ID of the project who owns the network.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "aa1ede4f-3952-4131-aab6-3b8902268c7d"
|
||||
propagate_uplink_status:
|
||||
description: The uplink status propagation of the port.
|
||||
description: Whether to propagate uplink status of the port.
|
||||
returned: success
|
||||
type: bool
|
||||
sample: false
|
||||
qos_network_policy_id:
|
||||
description: The ID of the QoS policy of the network where this
|
||||
port is plugged.
|
||||
description: |
|
||||
The ID of the QoS policy attached to the network where the
|
||||
port is bound.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "1e4f3958-c0c9-4dec-82fa-ed2dc1c5cb34"
|
||||
qos_policy_id:
|
||||
description: The ID of the QoS policy associated with the port.
|
||||
description: The ID of the QoS policy attached to the port.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "b20bb47f-5d6d-45a6-8fe7-2c1b44f0db73"
|
||||
resource_request:
|
||||
description: Expose Placement resources i.e. minimum-bandwidth
|
||||
and traits i.e. vnic-type, physnet requested by a
|
||||
port to Nova and Placement
|
||||
description: |
|
||||
The port-resource-request exposes Placement resources
|
||||
(i.e.: minimum-bandwidth) and traits (i.e.: vnic-type, physnet)
|
||||
requested by a port to Nova and Placement.
|
||||
returned: success
|
||||
type: str
|
||||
revision_number:
|
||||
@@ -220,11 +235,11 @@ ports:
|
||||
type: int
|
||||
sample: 0
|
||||
security_group_ids:
|
||||
description: The UUIDs of any attached security groups.
|
||||
description: The IDs of any attached security groups.
|
||||
returned: success
|
||||
type: list
|
||||
status:
|
||||
description: The port status.
|
||||
description: The port status. Value is C(ACTIVE) or C(DOWN).
|
||||
returned: success
|
||||
type: str
|
||||
sample: "ACTIVE"
|
||||
@@ -234,47 +249,47 @@ ports:
|
||||
type: list
|
||||
sample: []
|
||||
tenant_id:
|
||||
description: The UUID of the tenant who owns the network. Deprecated.
|
||||
description: Same as I(project_id). Deprecated.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "51fce036d7984ba6af4f6c849f65ef00"
|
||||
trunk_details:
|
||||
description: The details about the trunk.
|
||||
description: |
|
||||
The trunk referring to this parent port and its subports.
|
||||
Present for trunk parent ports if C(trunk-details) extension
|
||||
is loaded.
|
||||
returned: success
|
||||
type: dict
|
||||
updated_at:
|
||||
description: Last port update
|
||||
description: Timestamp when the port was last updated.
|
||||
returned: success
|
||||
type: str
|
||||
sample: "2022-02-03T13:28:25Z"
|
||||
|
||||
'''
|
||||
|
||||
from ansible_collections.openstack.cloud.plugins.module_utils.openstack import OpenStackModule
|
||||
|
||||
|
||||
class NetworkPortInfoModule(OpenStackModule):
|
||||
class PortInfoModule(OpenStackModule):
|
||||
argument_spec = dict(
|
||||
port=dict(),
|
||||
filters=dict(type='dict', default={}),
|
||||
name=dict(aliases=['port']),
|
||||
filters=dict(type='dict'),
|
||||
)
|
||||
module_kwargs = dict(
|
||||
supports_check_mode=True
|
||||
)
|
||||
|
||||
def run(self):
|
||||
port = self.params['port']
|
||||
filters = self.params['filters']
|
||||
|
||||
ports = self.conn.search_ports(port, filters)
|
||||
|
||||
ports = [p.to_dict(computed=False) for p in ports]
|
||||
ports = [p.to_dict(computed=False) for p in
|
||||
self.conn.search_ports(
|
||||
name_or_id=self.params['name'],
|
||||
filters=self.params['filters'])]
|
||||
|
||||
self.exit_json(changed=False, ports=ports)
|
||||
|
||||
|
||||
def main():
|
||||
module = NetworkPortInfoModule()
|
||||
module = PortInfoModule()
|
||||
module()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user