#  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: Get MTU of mgmt5
  hosts: infiniband
  gather_facts: no
  connection: local
  vars_files:
    - test_vars/test_infiniband_vars.yml
  tasks:
    - name: Set credentials and variables
      set_fact:
        username: "{{ username }}"
        password: "{{ password }}"
        filtered_dict: {}
      no_log: true
      tags: reboot,mtu

    - 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 }}"
      tags: reboot,mtu

    - name: get MTU from ib {{ validation_port }}
      uri:
        url: http://{{ inventory_hostname }}/admin/launch?script=json
        method: POST
        body_format: json
        headers:
          Cookie: "{{ login.set_cookie.split(';')[0] }}"
        body:
          {
          "commands": 
           [
             "show interfaces ib {{ validation_port }}"
           ]
          }
        return_content: yes
      register: value
      tags: mtu

    - name: print reistered o/p
      debug:
        msg: "{{ value }}"
      tags: mtu

    - name: reboot IB switch
      uri:
        url: http://{{ inventory_hostname }}/admin/launch?script=json
        method: POST
        body_format: json
        headers:
          Cookie: "{{ login.set_cookie.split(';')[0] }}"
        body:
          {
          "commands":
           [
             "reload"
           ]
          }
        return_content: yes
      tags: reboot