Skip to content

Commit

Permalink
feat: bgp session (#151)
Browse files Browse the repository at this point in the history
This PR adds functionality of BGP session management to ansible
collection
  • Loading branch information
t0mk authored Feb 19, 2024
2 parents b7384b6 + b785a78 commit 3b44cb8
Show file tree
Hide file tree
Showing 13 changed files with 1,064 additions and 33 deletions.
63 changes: 33 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

This is repository for Ansible collection registered in Ansible Galaxy as [equinix.cloud](https://galaxy.ansible.com/ui/repo/published/equinix/cloud/). The collection contains various plugins for managing Equinix services.

For users transitioning from the [equinix.metal collection](https://github.com/equinix/ansible-collection-metal), please refer to our [Migration Guide](MIGRATION.md) for detailed instructions on migrating to this collection (`equinix.cloud`).
For users transitioning from the [equinix.metal collection](https://github.com/equinix/ansible-collection-metal), please refer to our [Migration Guide](MIGRATION.MD) for detailed instructions on migrating to this collection (`equinix.cloud`).

<!--start requires_ansible-->
## Ansible version compatibility
Expand All @@ -23,18 +23,20 @@ Modules for managing Equinix infrastructure.

Name | Description |
--- | ------------ |
[equinix.cloud.metal_connection](./docs/modules/metal_connection.md)|Manage an Interconnection in Equinix Metal|
[equinix.cloud.metal_device](./docs/modules/metal_device.md)|Create, update, or delete Equinix Metal devices|
[equinix.cloud.metal_gateway](./docs/modules/metal_gateway.md)|Manage Metal Gateway in Equinix Metal|
[equinix.cloud.metal_hardware_reservation](./docs/modules/metal_hardware_reservation.md)|Lookup a single hardware_reservation by ID in Equinix Metal|
[equinix.cloud.metal_ip_assignment](./docs/modules/metal_ip_assignment.md)|Manage Equinix Metal IP assignments|
[equinix.cloud.metal_organization](./docs/modules/metal_organization.md)|Lookup a single organization by ID in Equinix Metal|
[equinix.cloud.metal_project](./docs/modules/metal_project.md)|Manage Projects in Equinix Metal|
[equinix.cloud.metal_project_ssh_key](./docs/modules/metal_project_ssh_key.md)|Manage a project ssh key in Equinix Metal|
[equinix.cloud.metal_reserved_ip_block](./docs/modules/metal_reserved_ip_block.md)|Create/delete blocks of reserved IP addresses in a project.|
[equinix.cloud.metal_ssh_key](./docs/modules/metal_ssh_key.md)|Manage personal SSH keys in Equinix Metal|
[equinix.cloud.metal_vlan](./docs/modules/metal_vlan.md)|Manage a VLAN resource in Equinix Metal|
[equinix.cloud.metal_vrf](./docs/modules/metal_vrf.md)|Manage a VRF resource in Equinix Metal|
[equinix.cloud.metal_bgp_session](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_bgp_session.md)|Manage BGP sessions in Equinix Metal|
[equinix.cloud.metal_connection](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_connection.md)|Manage an Interconnection in Equinix Metal|
[equinix.cloud.metal_device](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_device.md)|Create, update, or delete Equinix Metal devices|
[equinix.cloud.metal_gateway](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_gateway.md)|Manage Metal Gateway in Equinix Metal|
[equinix.cloud.metal_hardware_reservation](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_hardware_reservation.md)|Lookup a single hardware_reservation by ID in Equinix Metal|
[equinix.cloud.metal_ip_assignment](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_ip_assignment.md)|Manage Equinix Metal IP assignments|
[equinix.cloud.metal_organization](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_organization.md)|Lookup a single organization by ID in Equinix Metal|
[equinix.cloud.metal_project](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_project.md)|Manage Projects in Equinix Metal|
[equinix.cloud.metal_project_bgp_config](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_project_bgp_config.md)|Manage BGP Config for Equinix Metal Project|
[equinix.cloud.metal_project_ssh_key](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_project_ssh_key.md)|Manage a project ssh key in Equinix Metal|
[equinix.cloud.metal_reserved_ip_block](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_reserved_ip_block.md)|Create/delete blocks of reserved IP addresses in a project.|
[equinix.cloud.metal_ssh_key](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_ssh_key.md)|Manage personal SSH keys in Equinix Metal|
[equinix.cloud.metal_vlan](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_vlan.md)|Manage a VLAN resource in Equinix Metal|
[equinix.cloud.metal_vrf](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_vrf.md)|Manage a VRF resource in Equinix Metal|


### Info Modules
Expand All @@ -43,21 +45,22 @@ Modules for retrieving information about existing Equinix infrastructure.

Name | Description |
--- | ------------ |
[equinix.cloud.metal_available_ips_info](./docs/modules/metal_available_ips_info.md)|Get list of avialable IP addresses from a reserved IP block|
[equinix.cloud.metal_connection_info](./docs/modules/metal_connection_info.md)|Gather information about Interconnections|
[equinix.cloud.metal_device_info](./docs/modules/metal_device_info.md)|Select list of Equinix Metal devices|
[equinix.cloud.metal_gateway_info](./docs/modules/metal_gateway_info.md)|Gather information about Metal Gateways|
[equinix.cloud.metal_hardware_reservation_info](./docs/modules/metal_hardware_reservation_info.md)|Gather information about Equinix Metal hardware_reservations|
[equinix.cloud.metal_ip_assignment_info](./docs/modules/metal_ip_assignment_info.md)|Gather IP address assignments for a device|
[equinix.cloud.metal_metro_info](./docs/modules/metal_metro_info.md)|Gather information about Equinix Metal metros|
[equinix.cloud.metal_operating_system_info](./docs/modules/metal_operating_system_info.md)|Gather information about Operating Systems available for devices in Equinix Metal|
[equinix.cloud.metal_organization_info](./docs/modules/metal_organization_info.md)|Gather information about Equinix Metal organizations|
[equinix.cloud.metal_project_info](./docs/modules/metal_project_info.md)|Gather information about Equinix Metal projects|
[equinix.cloud.metal_project_ssh_key_info](./docs/modules/metal_project_ssh_key_info.md)|Gather project SSH keys.|
[equinix.cloud.metal_reserved_ip_block_info](./docs/modules/metal_reserved_ip_block_info.md)|Gather list of reserved IP blocks|
[equinix.cloud.metal_ssh_key_info](./docs/modules/metal_ssh_key_info.md)|Gather personal SSH keys|
[equinix.cloud.metal_vlan_info](./docs/modules/metal_vlan_info.md)|Gather VLANs.|
[equinix.cloud.metal_vrf_info](./docs/modules/metal_vrf_info.md)|Gather VRFs|
[equinix.cloud.metal_available_ips_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_available_ips_info.md)|Get list of avialable IP addresses from a reserved IP block|
[equinix.cloud.metal_bgp_session_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_bgp_session_info.md)|Gather information BGP sessions in Equinix Metal|
[equinix.cloud.metal_connection_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_connection_info.md)|Gather information about Interconnections|
[equinix.cloud.metal_device_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_device_info.md)|Select list of Equinix Metal devices|
[equinix.cloud.metal_gateway_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_gateway_info.md)|Gather information about Metal Gateways|
[equinix.cloud.metal_hardware_reservation_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_hardware_reservation_info.md)|Gather information about Equinix Metal hardware_reservations|
[equinix.cloud.metal_ip_assignment_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_ip_assignment_info.md)|Gather IP address assignments for a device|
[equinix.cloud.metal_metro_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_metro_info.md)|Gather information about Equinix Metal metros|
[equinix.cloud.metal_operating_system_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_operating_system_info.md)|Gather information about Operating Systems available for devices in Equinix Metal|
[equinix.cloud.metal_organization_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_organization_info.md)|Gather information about Equinix Metal organizations|
[equinix.cloud.metal_project_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_project_info.md)|Gather information about Equinix Metal projects|
[equinix.cloud.metal_project_ssh_key_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_project_ssh_key_info.md)|Gather project SSH keys.|
[equinix.cloud.metal_reserved_ip_block_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_reserved_ip_block_info.md)|Gather list of reserved IP blocks|
[equinix.cloud.metal_ssh_key_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_ssh_key_info.md)|Gather personal SSH keys|
[equinix.cloud.metal_vlan_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_vlan_info.md)|Gather VLANs.|
[equinix.cloud.metal_vrf_info](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/modules/metal_vrf_info.md)|Gather VRFs|


### Inventory Plugins
Expand All @@ -66,7 +69,7 @@ Dynamically add Equinix infrastructure to an Ansible inventory.

Name |
--- |
[equinix.cloud.metal_device](./docs/inventory/metal_device.rst)|
[equinix.cloud.metal_device](https://github.com/equinix-labs/ansible-collection-equinix/blob/0.3.0/docs/inventory/metal_device.md)|


<!--end collection content-->
Expand All @@ -83,7 +86,7 @@ The Python module dependencies are not installed by `ansible-galaxy`. They can
be manually installed using pip:

```shell
pip install -r https://raw.githubusercontent.com/equinix-labs/ansible-collection-equinix/main/requirements.txt
pip install -r https://raw.githubusercontent.com/equinix-labs/ansible-collection-equinix/0.3.0/requirements.txt
```

## Usage
Expand Down
80 changes: 80 additions & 0 deletions docs/modules/metal_bgp_session.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# metal_bgp_session

Manage BGP sessions in Equinix Metal.Create, update or delete BGP session. To look up an existing session, pass only the *id* attribute.


- [Examples](#examples)
- [Parameters](#parameters)
- [Return Values](#return-values)

## Examples

```yaml
- name: Start first test bgp session
hosts: localhost
tasks:
- equinix.cloud.metal_bgp_session:
device_id: 8ea9837a-6d19-4607-b166-f7f7bb04b022
address_family: ipv6
default_route: true

```

```yaml
- name: Delete bgp session
hosts: localhost
tasks:
- equinix.cloud.metal_bgp_session:
id: 1273edef-39af-4df0-85bb-02a847a484d1
state: absent

```










## Parameters

| Field | Type | Required | Description |
|-----------|------|----------|------------------------------------------------------------------------------|
| `id` | <center>`str`</center> | <center>Optional</center> | UUID of the BGP session to look up |
| `device_id` | <center>`str`</center> | <center>Optional</center> | Device ID for the BGP session |
| `address_family` | <center>`str`</center> | <center>Optional</center> | BGP session address family, "ipv4" or "ipv6" |
| `default_route` | <center>`bool`</center> | <center>Optional</center> | Boolean flag to set the default route policy. False by default. |






## Return Values

- `metal_bgp_session` - The module object

- Sample Response:
```json

[
{
"address_family": "ipv4",
"default_route": true,
"device_id": "2066d33e-7c43-4d78-87a3-aaa434913f7f",
"id": "fc2d43e6-d606-47f7-9611-9d77aee443b5"
},
{
"address_family": "ipv6",
"default_route": true,
"device_id": "bfab58c0-0723-49aa-a64e-6caf1b8ea2e2",
"id": "277d4a7a-82dd-4e7c-bf79-8a1de6882982"
}
]

```


62 changes: 62 additions & 0 deletions docs/modules/metal_bgp_session_info.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# metal_bgp_session_info

Gather information BGP sessions in Equinix Metal. You can fetch it by device ID or project ID.


- [Examples](#examples)
- [Parameters](#parameters)
- [Return Values](#return-values)

## Examples

```yaml
- name: Gather information about all BGP sessions in a project
hosts: localhost
tasks:
- equinix.cloud.metal_bgp_session_info:
project_id: 2a5122b9-c323-4d5c-b53c-9ad3f54273e7

```

```yaml

```










## Parameters

| Field | Type | Required | Description |
|-----------|------|----------|------------------------------------------------------------------------------|
| `device_id` | <center>`str`</center> | <center>Optional</center> | Find BGP sessions by device ID. |
| `project_id` | <center>`str`</center> | <center>Optional</center> | Find BGP sessions by project ID. |






## Return Values

- `resources` - Found resources

- Sample Response:
```json
[
{
"address_family": "ipv6",
"default_route": true,
"device_id": "b068984f-f7d9-43a2-aa45-de04dcf4fe06",
"id": "03912bd6-a158-47ad-8bc7-c93df338fe0d"
}
]
```


62 changes: 62 additions & 0 deletions docs/modules/metal_project_bgp_config.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# metal_project_bgp_config

You can use this module to enable BGP Config for a project. To lookup BGP Config of an existing project, call the module only with `project_id`.


- [Examples](#examples)
- [Parameters](#parameters)
- [Return Values](#return-values)

## Examples

```yaml
- name: Enable local BGP Config in Equinix Metal project
hosts: localhost
tasks:
- equinix.cloud.metal_project_bgp_config:
deployment_type: local
asn: 65000
md5: null
use_case: "ansible test"
project_id: "{{ test_project.id }}"

```










## Parameters

| Field | Type | Required | Description |
|-----------|------|----------|------------------------------------------------------------------------------|
| `project_id` | <center>`str`</center> | <center>**Required**</center> | UUID of the project where BGP Config should be enabled |
| `asn` | <center>`int`</center> | <center>**Required**</center> | Autonomous System Number for local BGP deployment |
| `deployment_type` | <center>`str`</center> | <center>**Required**</center> | "local" or "global". Local deployment type is likely to be usable immediately, "global" will need to be reviewed by Equinix Metal support. |
| `md5` | <center>`str`</center> | <center>Optional</center> | Password for BGP session in plaintext (not a checksum) |
| `use_case` | <center>`str`</center> | <center>Optional</center> | Description of your BGP use-case for Equinix Metal support |






## Return Values

- `metal_project_bgp_config` - The module object

- Sample Response:
```json

{
"changed": true
}

```


33 changes: 33 additions & 0 deletions plugins/module_utils/metal/api_routes.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,12 @@ def get_routes(mpc):
equinix_metal.MetalGatewaysApi(mpc).find_metal_gateway_by_id,
extra_kwargs={"include": ["ip_reservation"]},
),
("metal_bgp_session", action.GET): spec_types.Specs(
equinix_metal.BGPApi(mpc).find_bgp_session_by_id,
),
('metal_project_bgp_config', action.GET): spec_types.Specs(
equinix_metal.BGPApi(mpc).find_bgp_config_by_project,
),

# LISTERS
('metal_project_device', action.LIST): spec_types.Specs(
Expand Down Expand Up @@ -140,6 +146,14 @@ def get_routes(mpc):
{'project_id': 'project_id'},
extra_kwargs={"include": ["ip_reservation"]},
),
('metal_bgp_session', action.LIST): spec_types.Specs(
equinix_metal.DevicesApi(mpc).find_bgp_sessions,
{'id': 'device_id'},
),
('metal_bgp_session_by_project', action.LIST): spec_types.Specs(
equinix_metal.BGPApi(mpc).find_bgp_config_by_project,
{'id': 'project_id'},
),

# DELETERS
('metal_device', action.DELETE): spec_types.Specs(
Expand Down Expand Up @@ -170,6 +184,10 @@ def get_routes(mpc):
equinix_metal.MetalGatewaysApi(mpc).delete_metal_gateway,
extra_kwargs={"include": ["ip_reservation"]},
),
('metal_bgp_session', action.DELETE): spec_types.Specs(
equinix_metal.BGPApi(mpc).delete_bgp_session,
),


# CREATORS
('metal_device', action.CREATE): spec_types.Specs(
Expand Down Expand Up @@ -249,6 +267,16 @@ def get_routes(mpc):
{"include": ["ip_reservation"]},
),

('metal_bgp_session', action.CREATE): spec_types.Specs(
equinix_metal.DevicesApi(mpc).create_bgp_session,
{'id': 'device_id'},
equinix_metal.BGPSessionInput,
),
('metal_project_bgp_config', action.CREATE): spec_types.Specs(
equinix_metal.BGPApi(mpc).request_bgp_config,
{'id': 'project_id'},
equinix_metal.BgpConfigRequestInput,
),

# UPDATERS
('metal_device', action.UPDATE): spec_types.Specs(
Expand Down Expand Up @@ -286,4 +314,9 @@ def get_routes(mpc):
{},
equinix_metal.VrfUpdateInput,
),
('metal_bgp_session', action.UPDATE): spec_types.Specs(
equinix_metal.BGPApi(mpc).update_bgp_session,
{},
equinix_metal.BGPSessionInput,
),
}
Loading

0 comments on commit 3b44cb8

Please sign in to comment.