netapp.ontap.na_ontap_restit – NetApp ONTAP Run any REST API on ONTAP
Note
This plugin is part of the netapp.ontap collection (version 21.1.1).
To install it use: ansible-galaxy collection install netapp.ontap.
To use it in a playbook, specify: netapp.ontap.na_ontap_restit.
New in version 20.4.0: of netapp.ontap
Synopsis
- Call a REST API on ONTAP.
- Cluster REST API are run using a cluster admin account.
- Vserver REST API can be run using a vsadmin account or using vserver tunneling (cluster admin with vserver_ options).
- In case of success, a json dictionary is returned as response.
- In case of a REST API error, status_code,error_code,error_messageare set to help with diagnosing the issue,
- and the call is reported as an error (‘failed’).
- Other errors (eg connection issues) are reported as Ansible error.
Requirements
The below requirements are needed on the host that executes this module.
- Ansible 2.9
- Python3 netapp-lib (2018.11.13) or later. Install using ‘pip install netapp-lib’
- netapp-lib 2020.3.12 is strongly recommended as it provides better error reporting for connection issues.
- A physical or virtual clustered Data ONTAP system. The modules support Data ONTAP 9.1 and onward.
- REST support requires ONTAP 9.6 or later.
- To enable http on the cluster you must run the following commands ‘set -privilege advanced;’ ‘system services web modify -http-enabled true;’
Parameters
| Parameter | Choices/Defaults | Comments | 
|---|---|---|
| api  string / required  | The REST API to call (eg cluster/software, svms/svm). | |
| body  dictionary  | A dictionary for the info parameter aliases: info | |
| cert_filepath  string   added in 20.6.0 of netapp.ontap  | path to SSL client cert file (.pem). not supported with python 2.6. | |
| feature_flags  dictionary   added in 20.5.0 of netapp.ontap  | Enable or disable a new feature. This can be used to enable an experimental feature or disable a new feature that breaks backward compatibility. Supported keys and values are subject to change without notice. Unknown keys are ignored. | |
| hal_linking  boolean  | 
 | if true, HAL-encoded links are returned in the response. | 
| hostname  string / required  | The hostname or IP address of the ONTAP instance. | |
| http_port  integer  | Override the default port (80 or 443) with this port | |
| https  boolean  | 
 | Enable and disable https. Ignored when using REST as only https is supported. Ignored when using SSL certificate authentication as it requires SSL. | 
| key_filepath  string   added in 20.6.0 of netapp.ontap  | path to SSL client key file. | |
| method  string  | Default: "GET" | The REST method to use. | 
| ontapi  integer  | The ontap api version to use | |
| password  string  | Password for the specified user. aliases: pass | |
| query  dictionary  | A list of dictionaries for the query parameters | |
| use_rest  string  | Default: "auto" | REST API if supported by the target system for all the resources and attributes the module requires. Otherwise will revert to ZAPI. always -- will always use the REST API never -- will always use the ZAPI auto -- will try to use the REST Api | 
| username  string  | This can be a Cluster-scoped or SVM-scoped account, depending on whether a Cluster-level or SVM-level API is required. For more information, please read the documentation https://mysupport.netapp.com/NOW/download/software/nmsdk/9.4/. Two authentication methods are supported 1. basic authentication, using username and password, 2. SSL certificate authentication, using a ssl client cert file, and optionally a private key file. To use a certificate, the certificate must have been installed in the ONTAP cluster, and cert authentication must have been enabled. aliases: user | |
| validate_certs  boolean  | 
 | If set to  no, the SSL certificates will not be validated.This should only set to  Falseused on personally controlled sites using self-signed certificates. | 
| vserver_name  string  | if provided, forces vserver tunneling. username identifies a cluster admin account. | |
| vserver_uuid  string  | if provided, forces vserver tunneling. username identifies a cluster admin account. | 
Notes
Note
- The modules prefixed with na\_ontap are built to support the ONTAP storage platform.
Examples
-
  name: Ontap REST API
  hosts: localhost
  gather_facts: False
  collections:
    - netapp.ontap
  vars:
    login: &login
      hostname: "{{ admin_ip }}"
      username: "{{ admin_username }}"
      password: "{{ admin_password }}"
      https: true
      validate_certs: false
    svm_login: &svm_login
      hostname: "{{ svm_admin_ip }}"
      username: "{{ svm_admin_username }}"
      password: "{{ svm_admin_password }}"
      https: true
      validate_certs: false
  tasks:
    - name: run ontap REST API command as cluster admin
      na_ontap_restit:
        <<: *login
        api: cluster/software
      register: result
    - debug: var=result
    - assert: { that: result.status_code==200, quiet: True }
    - name: run ontap REST API command as cluster admin
      na_ontap_restit:
        <<: *login
        api: cluster/software
        query:
          fields: version
      register: result
    - debug: var=result
    - assert: { that: result.status_code==200, quiet: True }
    - name: run ontap REST API command as cluster admin
      na_ontap_restit:
        <<: *login
        api: svm/svms
      register: result
    - debug: var=result
    - assert: { that: result.status_code==200, quiet: True }
    - name: run ontap REST API command as cluster admin
      na_ontap_restit:
        <<: *login
        api: svm/svms
        query:
          fields: aggregates,cifs,nfs,uuid
          query_fields: name
          query: trident_svm
        hal_linking: true
      register: result
    - debug: var=result
    - name: run ontap REST API command as vsadmin
      na_ontap_restit:
        <<: *svm_login
        api: svm/svms
      register: result
    - debug: var=result
    - assert: { that: result.status_code==200, quiet: True }
    - name: run ontap REST API command as vserver tunneling
      na_ontap_restit:
        <<: *login
        api: storage/volumes
        vserver_name: ansibleSVM
      register: result
    - debug: var=result
    - assert: { that: result.status_code==200, quiet: True }
    - set_fact:
        uuid: "{{ result.response.records | json_query(get_uuid) }}"
      vars:
        get_uuid: "[? name=='deleteme_ln1'].uuid"
    - debug: var=uuid
    - name: run ontap REST API command as DELETE method with vserver tunneling
      na_ontap_restit:
        <<: *login
        api: "storage/volumes/{{ uuid[0] }}"
        method: DELETE
        vserver_name: ansibleSVM
        query:
          return_timeout: 60
      register: result
      when: uuid|length == 1
    - debug: var=result
    - assert: { that: result.skipped|default(false) or result.status_code|default(404) == 200, quiet: True }
    - name: run ontap REST API command as POST method with vserver tunneling
      na_ontap_restit:
        <<: *login
        api: storage/volumes
        method: POST
        vserver_name: ansibleSVM
        query:
          return_records: "true"
          return_timeout: 60
        body:
          name: deleteme_ln1
          aggregates:
            - name: aggr1
      register: result
    - debug: var=result
    - assert: { that: result.status_code==201, quiet: True }
    - name: run ontap REST API command as DELETE method with vserver tunneling
      # delete test volume if present
      na_ontap_restit:
        <<: *login
        api: "storage/volumes/{{ result.response.records[0].uuid }}"
        method: DELETE
        vserver_name: ansibleSVM
        query:
          return_timeout: 60
      register: result
    - debug: var=result
    - assert: { that: result.status_code==200, quiet: True }
# error cases
    - name: run ontap REST API command
      na_ontap_restit:
        <<: *login
        api: unknown/endpoint
      register: result
      ignore_errors: True
    - debug: var=result
    - assert: { that: result.status_code==404, quiet: True }
   Return Values
Common return values are documented here, the following are the fields unique to this module:
| Key | Returned | Description | 
|---|---|---|
| error_code  string  | On error | If the REST API was executed but failed, the error code set by the REST API. Not present if successful, or if the REST API call cannot be performed. | 
| error_message  string  | On error | If the REST API was executed but failed, the error message set by the REST API. Not present if successful, or if the REST API call cannot be performed. | 
| response  dictionary  | On success | If successful, a json dictionary returned by the REST API. If the REST API was executed but failed, an empty dictionary. Not present if the REST API call cannot be performed. | 
| status_code  string  | Always | The http status code. | 
Authors
- NetApp Ansible Team (@carchi8py) <ng-ansibleteam@netapp.com>
    © 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
    https://docs.ansible.com/ansible/2.11/collections/netapp/ontap/na_ontap_restit_module.html