F5Networks / f5-ansible

Imperative Ansible modules for F5 BIG-IP products
GNU General Public License v3.0
376 stars 231 forks source link

DNS: bigip_gtm_pool_member errors with "instance names and partitions cannot contain '/'" #716

Closed alonsocamaro closed 6 years ago

alonsocamaro commented 6 years ago
ISSUE TYPE
COMPONENT NAME

bigip_gtm_pool_member

ANSIBLE VERSION
[root@ansible-tower-32 ~]# ansible --version
ansible 2.5.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Feb 20 2018, 09:19:12) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]
PYTHON VERSION
[root@ansible-tower-32 ~]# python -V
Python 2.7.5
BIGIP VERSION
[root@dns:Active:Standalone] config # tmsh show sys version

Sys::Version
Main Package
  Product     BIG-IP
  Version     12.1.3
  Build       0.0.378
  Edition     Final
  Date        Mon Nov 27 16:41:03 PST 2017
LIBRARY VERSIONS
[root@ansible-tower-32 ~]# pip freeze | egrep '(f5-sdk|bigsuds)'
You are using pip version 8.1.2, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
bigsuds==1.0.6
f5-sdk==3.0.14
[root@ansible-tower-32 ~]# source /var/lib/awx/venv/ansible/bin/activate
(ansible) [root@ansible-tower-32 ~]# pip freeze | egrep '(f5-sdk|bigsuds)'
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
bigsuds==1.0.6
f5-sdk==3.0.14
OS / ENVIRONMENT

RHEL 7.4 with Ansible Tower 3.2

SUMMARY

When trying to add a GTM pool member to an existing pool the module fails

- name: Create BIG-IP DNS pool member (inner loop)
  bigip_gtm_pool_member:
    server: "{{ bigip_dns }}"
    server_port: "{{ bigip_dns_port }}"
    user: "{{ bigip_user }}"
    password: "{{ bigip_adminpass }}"
    validate_certs: "no"
    partition: "{{ bigip_dns_partition }}"
    server_name: "BIGIP_DC_{{ dcname }}"
    virtual_server: "/{{ application }}/{{ inner_item }}__routestatus"
    type: a
    pool: "{{ inner_item }}_pool"
    state: present
  delegate_to: localhost
  with_items: "{{ wideips }}"
  loop_control:
    loop_var: inner_item

It fails with the following error:

InvalidInstanceNameOrFolder(error_message)\nicontrol.exceptions.InvalidInstanceNameOrFolder: instance names and partitions cannot contain '/', but it's: BIGIP_DC_onp:/sock-shop/f5plaza.dc-onp.mcd.bd.f5.com__routestatus

See next for full output

{
    "_ansible_parsed": false,
    "inner_item": "f5plaza.mcd.bd.f5.com",
    "exception": "Traceback (most recent call last):\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 684, in <module>\n    main()\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 675, in main\n    results = mm.exec_module()\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 484, in exec_module\n    changed = self.present()\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 506, in present\n    if self.exists():\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 521, in exists\n    partition=self.want.partition\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/f5/bigip/resource.py\", line 1130, in exists\n    return self._exists(**kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/f5/bigip/resource.py\", line 1142, in _exists\n    session.get(base_uri, **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 264, in wrapper\n    **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 212, in generate_bigip_uri\n    **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 180, in _validate_uri_parts\n    _validate_name_partition_subpath(name)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 150, in _validate_name_partition_subpath\n    raise InvalidInstanceNameOrFolder(error_message)\nicontrol.exceptions.InvalidInstanceNameOrFolder: instance names and partitions cannot contain '/', but it's: BIGIP_DC_onp:/sock-shop/f5plaza.dc-onp.mcd.bd.f5.com__routestatus\n",
    "changed": false,
    "_ansible_item_label": "f5plaza.mcd.bd.f5.com",
    "_ansible_delegated_vars": {
        "ansible_delegated_host": "localhost",
        "ansible_host": "localhost"
    },
    "module_stderr": "Traceback (most recent call last):\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 684, in <module>\n    main()\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 675, in main\n    results = mm.exec_module()\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 484, in exec_module\n    changed = self.present()\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 506, in present\n    if self.exists():\n  File \"/tmp/ansible_jP68wo/ansible_module_bigip_gtm_pool_member.py\", line 521, in exists\n    partition=self.want.partition\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/f5/bigip/resource.py\", line 1130, in exists\n    return self._exists(**kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/f5/bigip/resource.py\", line 1142, in _exists\n    session.get(base_uri, **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 264, in wrapper\n    **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 212, in generate_bigip_uri\n    **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 180, in _validate_uri_parts\n    _validate_name_partition_subpath(name)\n  File \"/var/lib/awx/venv/ansible/lib/python2.7/site-packages/icontrol/session.py\", line 150, in _validate_name_partition_subpath\n    raise InvalidInstanceNameOrFolder(error_message)\nicontrol.exceptions.InvalidInstanceNameOrFolder: instance names and partitions cannot contain '/', but it's: BIGIP_DC_onp:/sock-shop/f5plaza.dc-onp.mcd.bd.f5.com__routestatus\n",
    "_ansible_item_result": true,
    "module_stdout": "",
    "rc": 1,
    "msg": "MODULE FAILURE",
    "_ansible_ignore_errors": null,
    "_ansible_no_log": false
}

Although the error is about using "/", just in case I want to show that the virtual-server actually exists:

[root@dns:Active:Standalone] config # tmsh list gtm server BIGIP_DC_onp | grep /sock-shop/f5plaza.dc-onp.mcd.bd.f5.com__routestatus
        /sock-shop/f5plaza.dc-onp.mcd.bd.f5.com__routestatus {
alonsocamaro commented 6 years ago

Btw, it also errors without having '/' at the beginning:

TASK [setup-dns : Create BIG-IP DNS pool member (inner loop)] ******************
20:56:28
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: icontrol.exceptions.InvalidInstanceNameOrFolder: instance names and partitions cannot contain '/', but it's: BIGIP_DC_onp:sock-shop/f5plaza.dc-onp.mcd.bd.f5.com__routestatus
caphrim007 commented 6 years ago

this is a bug in the f5-sdk

caphrim007 commented 6 years ago

this should now be fixed in f5-sdk devel