##### SUMMARY
Currently the module ufw does not allow to specify two network interfaces for forwarding rules (rule='allow' routed='yes').
What I'd like to achieve is this rule:
`ufw route allow in on ethX out on ethY to 10.0.0.0/8 from 192.168.0.0/24`

To my knowledge, the best one can do is pick one interface and decide to flag it with "in" or "out" traffic using the `direction` property. So the equivalent of either:
`ufw route allow in on ethX to 10.0.0.0/8 from 192.168.0.0/24` or 
`ufw route allow out on ethY to 10.0.0.0/8 from 192.168.0.0/24`

Is there a mechanism to provide both interfaces to the module?

##### ISSUE TYPE
- Feature request

##### COMPONENT NAME
module ufw

##### ANSIBLE VERSION
```
ansible 2.8.2
  config file = /mnt/c/dev/sandboxes/ansible/ansible.cfg
  configured module search path = [u'/home/me/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /home/me/virtualenvs/ansible/local/lib/python2.7/site-packages/ansible
  executable location = /home/me/virtualenvs/ansible/bin/ansible
  python version = 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
```

##### CONFIGURATION
```
ANSIBLE_PIPELINING(/mnt/c/dev/sandboxes/ansible/ansible.cfg) = True
DEFAULT_ROLES_PATH(/mnt/c/dev/sandboxes/ansible/ansible.cfg) = [u'/mnt/c/dev/sandboxes/ansible/.imported_roles', u'/mnt/c/dev/sandboxes/ansible/roles']
DEFAULT_VAULT_PASSWORD_FILE(env: ANSIBLE_VAULT_PASSWORD_FILE) = /home/me/.vault_pass.txt
```

##### OS / ENVIRONMENT
Ubuntu Linux 18.04 LTS


##### STEPS TO REPRODUCE
Cannot really (re)produce, we just can't express it. There is a single parameter `interface` and we would need 2. (Or a convention to pass a tuple of interfaces into `interface`, comma separated?)


##### EXPECTED RESULTS
Being able to specify an "in" interface and an "out" interface.
In the following snippet, only the "out" interface can be mentioned.
```yaml
changed: [testvm1] => (item={u'direction': u'out', u'to_ip': u'0.0.0.0/0', u'interface': u'ethY', u'route': u'yes', u'from_ip': u'192.168.0.0/24', u'rule': u'allow'}) => {
    "ansible_loop_var": "item",
    "changed": true,
    "commands": [
        "/usr/sbin/ufw status verbose",
        "/bin/grep -h '^### tuple' /lib/ufw/user.rules /lib/ufw/user6.rules /etc/ufw/user.rules /etc/ufw/user6.rules /var/lib/ufw/user.rules /var/lib/ufw/user6.rules",
        "/usr/sbin/ufw --version",
        "/usr/sbin/ufw route allow out on ethY from 192.168.0.0/24 to 0.0.0.0/0",
        "/usr/sbin/ufw status verbose",
        "/bin/grep -h '^### tuple' /lib/ufw/user.rules /lib/ufw/user6.rules /etc/ufw/user.rules /etc/ufw/user6.rules /var/lib/ufw/user.rules /var/lib/ufw/user6.rules"
    ],
    "invocation": {
        "module_args": {
            "app": null,
            "comment": null,
            "default": null,
            "delete": false,
            "direction": "out",
            "from_ip": "192.168.0.0/24",
            "from_port": null,
            "insert": null,
            "insert_relative_to": "zero",
            "interface": "ethY",
            "log": false,
            "logging": null,
            "proto": null,
            "route": true,
            "rule": "allow",
            "state": null,
            "to_ip": "0.0.0.0/0",
            "to_port": null
        }
    },
    "item": {
        "direction": "out",
        "from_ip": "192.168.0.0/24",
        "interface": "ethY",
        "route": "yes",
        "rule": "allow",
        "to_ip": "0.0.0.0/0"
    },
    "msg": "Status: active\nLogging: off\nDefault: deny (incoming), allow (outgoing), deny (routed)\nNew profiles: skip\n\nTo                         Action      From\n--                         ------      ----\n10.0.0.0/8 on ethY         ALLOW FWD   10.254.33.0/24"
}
```
##### ACTUAL RESULTS
We must choose which interface we want to specify as there is only one `interface` parameter. (In my case, I will specify the output interface preferably over the incoming interface and count on the address range to be selective enough but YMVV)

r = r"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}"
    r += r"(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"
    return re.compile(r)
def compile_ipv6_regexp():
    """
    validation pattern provided by :
    https://stackoverflow.com/questions/53497/regular-expression-that-matches-
    valid-ipv6-addresses#answer-17871737
    """
    r = r"(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:"
    r += r"|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}"
    r += r"(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4})"
    r += r"{1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]"
    r += r"{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]"
    r += r"{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4})"
    r += r"{0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]"
    r += r"|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}"
    r += r"[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}"
    r += r"[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))"
    return re.compile(r)
def main():
    command_keys = ['state', 'default', 'rule', 'logging']
    module = AnsibleModule(
        argument_spec=dict(
            state=dict(type='str', choices=['enabled', 'disabled', 'reloaded', 'reset']),
            default=dict(type='str', aliases=['policy'], choices=['allow', 'deny', 'reject']),
            logging=dict(type='str', choices=['full', 'high', 'low', 'medium', 'off', 'on']),
            direction=dict(type='str', choices=['in', 'incoming', 'out', 'outgoing', 'routed']),
            delete=dict(type='bool', default=False),
            route=dict(type='bool', default=False),