Search code examples
ansibleansible-inventoryansible-api

Ansible : error in calling the groups through restapi


I am trying fetch to distinct groups in the inventory through a variable.this is the command am trying to run in the playbook to add hosts to the Nagios XI. Am trying to do this using Rest API through CURL command. Am getting error as Incorrect pattern. Can some one please advise about the issue. or help me out with how we can call two groups from the inventory in the same command.

- name: add host to nagios XI.
      shell: curl -XPOST "http://16.231.22.60/nagiosxi/api/v1/config/host?apikey=qfOQpKFORCNo7HPunDUsSjW7f2rNNmrdVv3kvYpmQcNdSS2grV2jeXKsgbv3QgfL&pretty=1" -d "host_name={{ item.hostname }}&address={{ item.address }}&use=xiwizard_ncpa_host&max_check_attempts=5&check_period=xi_timeperiod_24x7&notification_interval=60&notification_period=xi_timeperiod_24x7&notifications_enabled=0&contacts=nagiosadmin&contact_groups=Candle Admins,Candle-L1-L2-Internal&applyconfig=1"
      with_items:
        - { hostname: "{{ groups['grp1'] }}", address: "{{ groups['grp2'] }}"}

EDIT: code formatting


Solution

  • Understanding that your hostname and address from each group match each other you can do the following:

    Inventory:

    [grp1]
    host1
    host2
    host3
    
    [grp2]
    10.100.10.1
    10.100.10.2
    10.100.10.3
    

    Play:

    ---
    - name: Debug Together
      hosts: localhost
      gather_facts: False
    
      tasks:
        - name: Add host to nagios XI
          shell: shell: curl -XPOST "http://16.231.22.60/nagiosxi/api/v1/config/host?apikey=qfOQpKFORCNo7HPunDUsSjW7f2rNNmrdVv3kvYpmQcNdSS2grV2jeXKsgbv3QgfL&pretty=1" -d "host_name={{ item.0 }}&address={{ item.1 }}&use=xiwizard_ncpa_host&max_check_attempts=5&check_period=xi_timeperiod_24x7&notification_interval=60&notification_period=xi_timeperiod_24x7&notifications_enabled=0&contacts=nagiosadmin&contact_groups=Candle Admins,Candle-L1-L2-Internal&applyconfig=1"
          with_together:
            - "{{ groups['grp1'] }}"
            - "{{ groups['grp2'] }}"
    

    You will get something like:

    TASK [debug] ******************************************************************************************************************
    ok: [localhost] => (item=None) => {
        "item.0,  item.1": "(u'host1', u'10.100.10.1')"
    }
    ok: [localhost] => (item=None) => {
        "item.0,  item.1": "(u'host2', u'10.100.10.2')"
    }
    ok: [localhost] => (item=None) => {
        "item.0,  item.1": "(u'host3', u'10.100.10.3')"
    }
    

    Comming from my test:

    - name:
      debug:
        var: item.0,  item.1
      with_together:
        - "{{ groups['grp1'] }}"
        - "{{ groups['grp2'] }}"