# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---

- name: Infiniband Facts
  hosts: all
  gather_facts: no
  connection: local
  tasks:
    - name: Set credentials and variables
      set_fact:
        username: "{{ lookup('env','ANSIBLE_NET_USERNAME') }}"
        password: "{{ lookup('env','ANSIBLE_NET_PASSWORD') }}"
        filtered_dict: {}
      no_log: true

    - name: Authenticate
      block:
        - name: Authenticate to switch- "{{ inventory_hostname }}"
          uri:
            url: http://{{ inventory_hostname }}/admin/launch?script=rh&template=login&action=login
            method: POST
            body_format: form-urlencoded
            body:
              f_user_id: "{{ username }}"
              f_password: "{{ password }}"
              enter: Sign in
            status_code: 302
          register: login
          no_log: true

        - name: Verify authentication status
          fail:
            msg: "Authentication failed"
          when: login.set_cookie is undefined

      rescue:
        - name: Filtered response creation
          set_fact:
            filtered_dict: "{{filtered_dict |combine({item.key: item.value})}}"
          when: item.key not in 'invocation'
          with_dict: "{{ login }}"
          no_log: true

        - name: Authentication failure response
          fail: 
            msg: "{{ filtered_dict }}"

    - name: Fetch facts from- "{{ inventory_hostname }}"
      uri:
        url: http://{{ inventory_hostname }}/admin/launch?script=json
        method: POST
        body_format: json
        headers:
          Cookie: "{{ login.set_cookie.split(';')[0] }}"
        body:
          {
          "commands": 
           [
             "show running-config",
             "show version",
             "show inventory",
             "show interfaces ib status"
           ]
          }
      register: facts

    - name: Show Facts from- "{{ inventory_hostname }}"
      debug:
        msg: "{{  item.data }}"
      with_items: "{{ facts.json.results }}"
      loop_control:
        label: "{{ item.executed_command }}"