community.general.packet_ip_subnet module – Assign IP subnet to a bare metal server

Note

This module is part of the community.general collection (version 9.5.0).

You might already have this collection installed if you are using the ansible package. It is not included in ansible-core. To check whether it is installed, run ansible-galaxy collection list.

To install it, use: ansible-galaxy collection install community.general. You need further requirements to be able to use this module, see Requirements for details.

To use it in a playbook, specify: community.general.packet_ip_subnet.

New in community.general 0.2.0

Synopsis

  • Assign or unassign IPv4 or IPv6 subnets to or from a device in the Packet host.

  • IPv4 subnets must come from already reserved block.

  • IPv6 subnets must come from publicly routable /56 block from your project.

  • See https://support.packet.com/kb/articles/elastic-ips for more info on IP block reservation.

Requirements

The below requirements are needed on the host that executes this module.

  • packet-python >= 1.35

Parameters

Parameter

Comments

auth_token

string

Packet API token. You can also supply it in environment variable PACKET_API_TOKEN.

cidr

aliases: name

string / required

IPv4 or IPv6 subnet which you want to manage. It must come from a reserved block for your project in the Packet Host.

device_count

integer

The number of devices to retrieve from the project. The max allowed value is 1000.

See https://www.packet.com/developers/api/#retrieve-all-devices-of-a-project for more info.

Default: 100

device_id

string

UUID of a device to/from which to assign/remove a subnet.

hostname

string

A hostname of a device to/from which to assign/remove a subnet.

project_id

string

UUID of a project of the device to/from which to assign/remove a subnet.

state

string

Desired state of the IP subnet on the specified device.

With state=present, you must specify either hostname or device_id. Subnet with given CIDR will then be assigned to the specified device.

With state=absent, you can specify either hostname or device_id. The subnet will be removed from specified devices.

If you leave both hostname and device_id empty, the subnet will be removed from any device it’s assigned to.

Choices:

  • "present" ← (default)

  • "absent"

Attributes

Attribute

Support

Description

check_mode

Support: full

Can run in check_mode and return changed status prediction without modifying target.

diff_mode

Support: none

Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode.

Examples

# All the examples assume that you have your Packet API token in env var PACKET_API_TOKEN.
# You can also pass it to the auth_token parameter of the module instead.

- name: Create 1 device and assign an arbitrary public IPv4 subnet to it
  hosts: localhost
  tasks:

  - packet_device:
      project_id: 89b497ee-5afc-420a-8fb5-56984898f4df
      hostnames: myserver
      operating_system: ubuntu_16_04
      plan: baremetal_0
      facility: sjc1
      state: active

# Pick an IPv4 address from a block allocated to your project.

  - community.general.packet_ip_subnet:
      project_id: 89b497ee-5afc-420a-8fb5-56984898f4df
      hostname: myserver
      cidr: "147.75.201.78/32"

# Release IP address 147.75.201.78

- name: Unassign IP address from any device in your project
  hosts: localhost
  tasks:
  - community.general.packet_ip_subnet:
      project_id: 89b497ee-5afc-420a-8fb5-56984898f4df
      cidr: "147.75.201.78/32"
      state: absent

Return Values

Common return values are documented here, the following are the fields unique to this module:

Key

Description

changed

boolean

True if an IP address assignments were altered in any way (created or removed).

Returned: success

Sample: true

device_id

string

UUID of the device associated with the specified IP address.

Returned: success

subnet

dictionary

Dict with data about the handled IP subnet.

Returned: success

Sample: {"address": "147.75.90.241", "address_family": 4, "assigned_to": {"href": "/devices/61f9aa5e-0530-47f5-97c2-113828e61ed0"}, "cidr": 31, "created_at": "2017-08-07T15:15:30Z", "enabled": true, "gateway": "147.75.90.240", "href": "/ips/31eda960-0a16-4c0f-b196-f3dc4928529f", "id": "1eda960-0a16-4c0f-b196-f3dc4928529f", "manageable": true, "management": true, "netmask": "255.255.255.254", "network": "147.75.90.240", "public": true}

Authors

  • Tomas Karasek (@t0mk)

  • Nurfet Becirevic (@nurfet-becirevic)