#  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.
---
- block: 
      
   - name: Get iDRAC IP details
     dellemc.openmanage.idrac_system_info:
      idrac_ip: "{{ item | trim }}"
      idrac_user: "{{ idrac_username }}"
      idrac_password: "{{ idrac_password }}"
     register: idrac_ip
     run_once: true
     ignore_errors: yes 
     tags: "TC_004"   

   - name: Validate iDRAC IP
     assert:
      that: 
        - idrac_ip.system_info.iDRACNIC[0].ProductInfo == idrac_search_key
      fail_msg: "{{ item | trim }} {{ idrac_fail_msg }}"
      success_msg: "{{ item | trim }} {{ idrac_success_msg }}"
     tags: "TC_004" 

   - name: Authenticate infiniband Switch
     uri:
       url: http://{{ item | trim }}/admin/launch?script=rh&template=login&action=login
       method: POST
       body_format: form-urlencoded
       body:
         f_user_id: "{{ ib_username }}"
         f_password: "{{ ib_password }}"
         enter: Sign in
       status_code: "{{ infiniband_status_code }}"
     register: login
     ignore_errors: yes
     run_once: true
     tags: "TC_005"  
          
   - name: Assert infiniband switch
     uri:
       url: http://{{ item | trim }}/admin/launch?script=json
       method: POST
       body_format: json
       headers:
         Cookie: "{{ login.set_cookie.split(';')[0] }}"
       body:
         {
         "commands":
          [
            "show version"
          ]
         }
     register: infinibandswitch_info
     when: login.failed == false  or 'set_cookie' not in login
     ignore_errors: yes
     run_once: true
     tags: "TC_005"
              
   - name: Validate infiniband  IP
     assert:
      that: 
        - infinibandswitch_info.json.data['Product name'] == infiniband_search_key
      fail_msg: "{{ infiniband_fail_msg }}"
      success_msg: "{{ infiniband_success_msg }}"
     ignore_errors: yes
     tags: "TC_005"
          
   - name: Get ethernet IP details
     dellos10_command:
       provider:
         host: "{{ item | trim }}"
         username: "{{ ethernet_switch_username }}"
         password: "{{ ethernet_switch_password }}"
       commands: ['show version']
     register: ethernet_info
     ignore_errors: yes
     run_once: true
     when: ethernet_switch_support
     tags: "TC_006"

   - name: Validate ethernet  IP
     assert:
      that: 
        - ethernet_info.stdout | regex_search(ethernet_search_key)
      fail_msg: " {{ item | trim }} {{ ethernet_fail_msg }}"
      success_msg: "{{ item | trim }} {{ ethernet_success_msg }}"
     tags: "TC_006"
           
   - name: Get auth string for powervault
     shell: echo -n {{ powervault_me4_username }}_{{powervault_me4_password}} | sha256sum
     changed_when: false
     when: powervault_support 
     register: auth_string
     ignore_errors: yes
     run_once: true
     tags: "TC_007"
         
   - name: Get session key for powervault
     uri:
       url: https://{{ item | trim }}/api/login/{{ auth_string.stdout | replace(" -", "") }}
       method: GET
       headers:
         {'datatype': 'json'}
       validate_certs: no
     when: powervault_support 
     register: session_key
     ignore_errors: yes
     run_once: true
     tags: "TC_007"
        
   - name: Assert me4_powervault
     uri:
       url: https://{{ item | trim }}/api/show/system
       method: GET
       body_format: json
       validate_certs: no
       use_proxy: no
       headers:
         {'sessionKey': "{{ session_key.json.status[0].response }}", 'datatype':'json'} 
     register: system_info
     ignore_errors: yes
     run_once: true
     tags: "TC_007"

   - name: Validate me4_powervault  IP
     assert:
      that: 
        - "'{{ me4_powervault_search_key }}' in system_info.json.system[0]['scsi-product-id']"
      fail_msg: "{{ item | trim }} {{ powervault_fail_msg }}"
      success_msg: "{{ item | trim }} {{ powervault_success_msg }}"
     ignore_errors: yes
     tags: "TC_007"
       
  rescue:
    - debug:
       msg: "{{ failed_msg }}"