# cs_portforward – Manages port forwarding rules on Apache CloudStack based clouds

- Synopsis
- Requirements
- Parameters
- Notes
- Examples
- Return Values
- Status

## Synopsis

- Create, update and remove port forwarding rules.

## Requirements

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

- python >= 2.6
- cs >= 0.6.10

## Parameters

Parameter | Choices/Defaults | Comments
--- | --- | ---
account string |  | Account the vm is related to.

api_http_method
string

Choices:
- get
- post

HTTP method used to query the API endpoint.
If not given, the `CLOUDSTACK_METHOD` env variable is considered.
As the last option, the value is taken from the ini config file, also see the notes.
Fallback value is `get` if not specified.

api_key string |  | API key of the CloudStack API. If not given, the `CLOUDSTACK_KEY` env variable is considered. As the last option, the value is taken from the ini config file, also see the notes.
api_region string | Default: "cloudstack" | Name of the ini section in the `cloustack.ini` file. If not given, the `CLOUDSTACK_REGION` env variable is considered.
api_secret string |  | Secret key of the CloudStack API. If not set, the `CLOUDSTACK_SECRET` env variable is considered. As the last option, the value is taken from the ini config file, also see the notes.
api_timeout integer |  | HTTP timeout in seconds. If not given, the `CLOUDSTACK_TIMEOUT` env variable is considered. As the last option, the value is taken from the ini config file, also see the notes. Fallback value is 10 seconds if not specified.
api_url string |  | URL of the CloudStack API e.g. https://cloud.example.com/client/api. If not given, the `CLOUDSTACK_ENDPOINT` env variable is considered. As the last option, the value is taken from the ini config file, also see the notes.
domain string |  | Domain the vm is related to.
ip_address string / required |  | Public IP address the rule is assigned to.
network string |  | Name of the network.

open_firewall
boolean

Choices:
- no ←
- yes

Whether the firewall rule for public port should be created, while creating the new rule.
Use cs_firewall for managing firewall rules.

poll_async
boolean

Choices:
- no
- yes ←

Poll async jobs until job has finished.

private_end_port integer |  | End private port for this rule. If not specified equal private_port.
private_port integer / required |  | Start private port for this rule.
project string |  | Name of the project the vm is located in.

protocol
string

Choices:
- tcp ←
- udp

Protocol of the port forwarding rule.

public_end_port integer |  | End public port for this rule. If not specified equal public_port.
public_port integer / required |  | Start public port for this rule.

state
string

Choices:
- present ←
- absent

State of the port forwarding rule.

tags list added in 2.4 |  | List of tags. Tags are a list of dictionaries having keys key and value. To delete all tags, set a empty list e.g. tags: []. aliases: tag
vm string |  | Name of virtual machine which we make the port forwarding rule for. Required if state=present.
vm_guest_ip string |  | VM guest NIC secondary IP address for the port forwarding rule.
vpc string |  | Name of the VPC.
zone string |  | Name of the zone in which the virtual machine is in. If not set, default zone is used.

## Notes

Note

- Ansible uses the `cs` library’s configuration method if credentials are not provided by the arguments `api_url`, `api_key`, `api_secret`. Configuration is read from several locations, in the following order. The `CLOUDSTACK_ENDPOINT`, `CLOUDSTACK_KEY`, `CLOUDSTACK_SECRET` and `CLOUDSTACK_METHOD`. `CLOUDSTACK_TIMEOUT` environment variables. A `CLOUDSTACK_CONFIG` environment variable pointing to an `.ini` file. A `cloudstack.ini` file in the current working directory. A `.cloudstack.ini` file in the users home directory. Optionally multiple credentials and endpoints can be specified using ini sections in `cloudstack.ini`. Use the argument `api_region` to select the section name, default section is `cloudstack`. See https://github.com/exoscale/cs for more information.
- A detailed guide about cloudstack modules can be found in the CloudStack Cloud Guide.
- This module supports check mode.

## Examples

    - name: 1.2.3.4:80 -> web01:8080
      cs_portforward:
        ip_address: 1.2.3.4
        vm: web01
        public_port: 80
        private_port: 8080
      delegate_to: localhost

    - name: forward SSH and open firewall
      cs_portforward:
        ip_address: '{{ public_ip }}'
        vm: '{{ inventory_hostname }}'
        public_port: '{{ ansible_ssh_port }}'
        private_port: 22
        open_firewall: true
      delegate_to: localhost

    - name: forward DNS traffic, but do not open firewall
      cs_portforward:
        ip_address: 1.2.3.4
        vm: '{{ inventory_hostname }}'
        public_port: 53
        private_port: 53
        protocol: udp
      delegate_to: localhost

    - name: remove ssh port forwarding
      cs_portforward:
        ip_address: 1.2.3.4
        public_port: 22
        private_port: 22
        state: absent
      delegate_to: localhost

## Return Values

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

Key | Returned | Description
--- | --- | ---
id string | success | UUID of the public IP address. Sample: a6f7a5fc-43f8-11e5-a151-feff819cdc9f
ip_address string | success | Public IP address. Sample: 1.2.3.4
network string | success | Name of the network. Sample: dmz
private_end_port integer | success | End port on the virtual machine's IP address. Sample: 80
private_port integer | success | Start port on the virtual machine's IP address. Sample: 80
protocol string | success | Protocol. Sample: tcp
public_end_port integer | success | End port on the public IP address. Sample: 80
public_port integer | success | Start port on the public IP address. Sample: 80
tags list | success | Tags related to the port forwarding.
vm_display_name string | success | Display name of the virtual machine. Sample: web-01
vm_guest_ip string | success | IP of the virtual machine. Sample: 10.101.65.152
vm_name string | success | Name of the virtual machine. Sample: web-01
vpc string | success | Name of the VPC. Sample: my_vpc

## Status

- This module is guaranteed to have backward compatible interface changes going forward. [stableinterface]
- This module is maintained by the Ansible Community. [community]

### Authors

- René Moser (@resmo)

Hint

If you notice any issues in this documentation, you can edit this document to improve it.