mirror of https://github.com/ansible/ansible.git
Add doc_fragment and module util for NetApp platforms (#19607)
* Add doc_fragment and module util for NetApp platforms * Make requested changes * Fix links and change formatting. * Fix description sections.pull/20772/head
parent
6673673042
commit
9283772e54
@ -0,0 +1,90 @@
|
||||
#
|
||||
# (c) 2016, Sumit Kumar <sumit4@netapp.com>
|
||||
#
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
HAS_NETAPP_LIB = False
|
||||
try:
|
||||
from netapp_lib.api.zapi import zapi
|
||||
from netapp_lib.api.zapi import errors as zapi_errors
|
||||
HAS_NETAPP_LIB = True
|
||||
except:
|
||||
HAS_NETAPP_LIB = False
|
||||
|
||||
|
||||
HAS_SF_SDK = False
|
||||
try:
|
||||
from solidfire.factory import ElementFactory
|
||||
from solidfire.custom.models import TimeIntervalFrequency
|
||||
from solidfire.models import Schedule, ScheduleInfo
|
||||
|
||||
HAS_SF_SDK = True
|
||||
except:
|
||||
HAS_SF_SDK = False
|
||||
|
||||
|
||||
def has_netapp_lib():
|
||||
return HAS_NETAPP_LIB
|
||||
|
||||
|
||||
def has_sf_sdk():
|
||||
return HAS_SF_SDK
|
||||
|
||||
|
||||
def ontap_sf_host_argument_spec():
|
||||
|
||||
return dict(
|
||||
hostname=dict(required=True, type='str'),
|
||||
username=dict(required=True, type='str', aliases=['user']),
|
||||
password=dict(required=True, type='str', aliases=['pass'], no_log=True),
|
||||
)
|
||||
|
||||
|
||||
def create_sf_connection(module, port=None):
|
||||
hostname = module.params['hostname']
|
||||
username = module.params['username']
|
||||
password = module.params['password']
|
||||
|
||||
if HAS_SF_SDK and hostname and username and password:
|
||||
try:
|
||||
return_val = ElementFactory.create(hostname, username, password, port=port)
|
||||
return return_val
|
||||
except:
|
||||
raise Exception("Unable to create SF connection")
|
||||
else:
|
||||
module.fail_json(msg="the python SolidFire SDK module is required")
|
||||
|
||||
|
||||
def setup_ontap_zapi(module, vserver=None):
|
||||
hostname = module.params['hostname']
|
||||
username = module.params['username']
|
||||
password = module.params['password']
|
||||
|
||||
if HAS_NETAPP_LIB:
|
||||
# set up zapi
|
||||
server = zapi.NaServer(hostname)
|
||||
server.set_username(username)
|
||||
server.set_password(password)
|
||||
if vserver:
|
||||
server.set_vserver(vserver)
|
||||
# Todo : Replace hard-coded values with configurable parameters.
|
||||
server.set_api_version(major=1, minor=21)
|
||||
server.set_port(80)
|
||||
server.set_server_type('FILER')
|
||||
server.set_transport_type('HTTP')
|
||||
return server
|
||||
else:
|
||||
module.fail_json(msg="the python NetApp-Lib module is required")
|
@ -1,454 +0,0 @@
|
||||
#NetApp Storage Modules
|
||||
This directory contains modules that support the storage platforms in the NetApp portfolio.
|
||||
|
||||
##SANtricity Modules
|
||||
The modules prefixed with *netapp\_e* are built to support the SANtricity storage platform. They require the SANtricity
|
||||
WebServices Proxy. The WebServices Proxy is free software available at the [NetApp Software Download site](http://mysupport.netapp.com/NOW/download/software/eseries_webservices/1.40.X000.0009/).
|
||||
Starting with the E2800 platform (11.30 OS), the modules will work directly with the storage array. Starting with this
|
||||
platform, REST API requests are handled directly on the box. This array can still be managed by proxy for large scale deployments.
|
||||
The modules provide idempotent provisioning for volume groups, disk pools, standard volumes, thin volumes, LUN mapping,
|
||||
hosts, host groups (clusters), volume snapshots, consistency groups, and asynchronous mirroring.
|
||||
### Prerequisites
|
||||
| Software | Version |
|
||||
| -------- |:-------:|
|
||||
| SANtricity Web Services Proxy*|1.4 or 2.0|
|
||||
| Ansible | 2.2** |
|
||||
\* Not required for *E2800 with 11.30 OS*<br/>
|
||||
\*\*The modules where developed with this version. Ansible forward and backward compatibility applies.
|
||||
|
||||
###Questions and Contribution
|
||||
Please feel free to submit pull requests with improvements. Issues for these modules should be routed to @hulquest but
|
||||
we also try to keep an eye on the list for issues specific to these modules. General questions can be made to our [development team](mailto:ng-hsg-engcustomer-esolutions-support@netapp.com)
|
||||
|
||||
### Examples
|
||||
These examples are not comprehensive but are intended to help you get started when integrating storage provisioning into
|
||||
your playbooks.
|
||||
```yml
|
||||
- name: NetApp Test All Modules
|
||||
hosts: proxy20
|
||||
gather_facts: yes
|
||||
connection: local
|
||||
vars:
|
||||
storage_systems:
|
||||
ansible1:
|
||||
address1: "10.251.230.41"
|
||||
address2: "10.251.230.42"
|
||||
ansible2:
|
||||
address1: "10.251.230.43"
|
||||
address2: "10.251.230.44"
|
||||
ansible3:
|
||||
address1: "10.251.230.45"
|
||||
address2: "10.251.230.46"
|
||||
ansible4:
|
||||
address1: "10.251.230.47"
|
||||
address2: "10.251.230.48"
|
||||
storage_pools:
|
||||
Disk_Pool_1:
|
||||
raid_level: raidDiskPool
|
||||
criteria_drive_count: 11
|
||||
Disk_Pool_2:
|
||||
raid_level: raidDiskPool
|
||||
criteria_drive_count: 11
|
||||
Disk_Pool_3:
|
||||
raid_level: raid0
|
||||
criteria_drive_count: 2
|
||||
volumes:
|
||||
vol_1:
|
||||
storage_pool_name: Disk_Pool_1
|
||||
size: 10
|
||||
thin_provision: false
|
||||
thin_volume_repo_size: 7
|
||||
vol_2:
|
||||
storage_pool_name: Disk_Pool_2
|
||||
size: 10
|
||||
thin_provision: false
|
||||
thin_volume_repo_size: 7
|
||||
vol_3:
|
||||
storage_pool_name: Disk_Pool_3
|
||||
size: 10
|
||||
thin_provision: false
|
||||
thin_volume_repo_size: 7
|
||||
thin_vol_1:
|
||||
storage_pool_name: Disk_Pool_1
|
||||
size: 10
|
||||
thin_provision: true
|
||||
thin_volume_repo_size: 7
|
||||
hosts:
|
||||
ANSIBLE-1:
|
||||
host_type: 1
|
||||
index: 1
|
||||
ports:
|
||||
- type: 'fc'
|
||||
label: 'fpPort1'
|
||||
port: '2100000E1E191B01'
|
||||
|
||||
netapp_api_host: 10.251.230.29
|
||||
netapp_api_url: http://{{ netapp_api_host }}/devmgr/v2
|
||||
netapp_api_username: rw
|
||||
netapp_api_password: rw
|
||||
ssid: ansible1
|
||||
auth: no
|
||||
lun_mapping: no
|
||||
netapp_api_validate_certs: False
|
||||
snapshot: no
|
||||
gather_facts: no
|
||||
amg_create: no
|
||||
remove_volume: no
|
||||
make_volume: no
|
||||
check_thins: no
|
||||
remove_storage_pool: yes
|
||||
check_storage_pool: yes
|
||||
remove_storage_system: no
|
||||
check_storage_system: yes
|
||||
change_role: no
|
||||
flash_cache: False
|
||||
configure_hostgroup: no
|
||||
configure_async_mirror: False
|
||||
configure_snapshot: no
|
||||
copy_volume: False
|
||||
volume_copy_source_volume_id:
|
||||
volume_destination_source_volume_id:
|
||||
snapshot_volume_storage_pool_name: Disk_Pool_3
|
||||
snapshot_volume_image_id: 3400000060080E5000299B640063074057BC5C5E
|
||||
snapshot_volume: no
|
||||
snapshot_volume_name: vol_1_snap_vol
|
||||
host_type_index: 1
|
||||
host_name: ANSIBLE-1
|
||||
set_host: no
|
||||
remove_host: no
|
||||
amg_member_target_array:
|
||||
amg_member_primary_pool:
|
||||
amg_member_secondary_pool:
|
||||
amg_member_primary_volume:
|
||||
amg_member_secondary_volume:
|
||||
set_amg_member: False
|
||||
amg_array_name: foo
|
||||
amg_name: amg_made_by_ansible
|
||||
amg_secondaryArrayId: ansible2
|
||||
amg_sync_name: foo
|
||||
amg_sync: no
|
||||
|
||||
tasks:
|
||||
|
||||
- name: Get array facts
|
||||
netapp_e_facts:
|
||||
ssid: "{{ item.key }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
with_dict: "{{ storage_systems }}"
|
||||
when: gather_facts
|
||||
|
||||
- name: Presence of storage system
|
||||
netapp_e_storage_system:
|
||||
ssid: "{{ item.key }}"
|
||||
state: present
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
controller_addresses:
|
||||
- "{{ item.value.address1 }}"
|
||||
- "{{ item.value.address2 }}"
|
||||
with_dict: "{{ storage_systems }}"
|
||||
when: check_storage_system
|
||||
|
||||
- name: Create Snapshot
|
||||
netapp_e_snapshot_images:
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
snapshot_group: "ansible_snapshot_group"
|
||||
state: 'create'
|
||||
when: snapshot
|
||||
|
||||
- name: Auth Module Example
|
||||
netapp_e_auth:
|
||||
ssid: "{{ ssid }}"
|
||||
current_password: 'Infinit2'
|
||||
new_password: 'Infinit1'
|
||||
set_admin: yes
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
when: auth
|
||||
|
||||
- name: No disk groups
|
||||
netapp_e_storagepool:
|
||||
ssid: "{{ ssid }}"
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
remove_volumes: yes
|
||||
with_items:
|
||||
- Disk_Pool_1
|
||||
- Disk_Pool_2
|
||||
- Disk_Pool_3
|
||||
when: remove_storage_pool
|
||||
|
||||
- name: Make disk groups
|
||||
netapp_e_storagepool:
|
||||
ssid: "{{ ssid }}"
|
||||
name: "{{ item.key }}"
|
||||
state: present
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
raid_level: "{{ item.value.raid_level }}"
|
||||
criteria_drive_count: "{{ item.value.criteria_drive_count }}"
|
||||
with_dict: " {{ storage_pools }}"
|
||||
when: check_storage_pool
|
||||
|
||||
- name: No thin volume
|
||||
netapp_e_volume:
|
||||
ssid: "{{ ssid }}"
|
||||
name: NewThinVolumeByAnsible
|
||||
state: absent
|
||||
thin_provision: yes
|
||||
log_path: /tmp/volume.log
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
when: check_thins
|
||||
|
||||
- name: Make a thin volume
|
||||
netapp_e_volume:
|
||||
ssid: "{{ ssid }}"
|
||||
name: NewThinVolumeByAnsible
|
||||
state: present
|
||||
thin_provision: yes
|
||||
thin_volume_repo_size: 7
|
||||
size: 10
|
||||
log_path: /tmp/volume.log
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
storage_pool_name: Disk_Pool_1
|
||||
when: check_thins
|
||||
|
||||
- name: Remove standard/thick volumes
|
||||
netapp_e_volume:
|
||||
ssid: "{{ ssid }}"
|
||||
name: "{{ item.key }}"
|
||||
state: absent
|
||||
log_path: /tmp/volume.log
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
with_dict: "{{ volumes }}"
|
||||
when: remove_volume
|
||||
|
||||
- name: Make a volume
|
||||
netapp_e_volume:
|
||||
ssid: "{{ ssid }}"
|
||||
name: "{{ item.key }}"
|
||||
state: present
|
||||
storage_pool_name: "{{ item.value.storage_pool_name }}"
|
||||
size: "{{ item.value.size }}"
|
||||
thin_provision: "{{ item.value.thin_provision }}"
|
||||
thin_volume_repo_size: "{{ item.value.thin_volume_repo_size }}"
|
||||
log_path: /tmp/volume.log
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
with_dict: "{{ volumes }}"
|
||||
when: make_volume
|
||||
|
||||
- name: No storage system
|
||||
netapp_e_storage_system:
|
||||
ssid: "{{ item.key }}"
|
||||
state: absent
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
with_dict: "{{ storage_systems }}"
|
||||
when: remove_storage_system
|
||||
|
||||
- name: Update the role of a storage array
|
||||
netapp_e_amg_role:
|
||||
name: "{{ amg_name }}"
|
||||
role: primary
|
||||
force: true
|
||||
noSync: true
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
when: change_role
|
||||
|
||||
- name: Flash Cache
|
||||
netapp_e_flashcache:
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
name: SSDCacheBuiltByAnsible
|
||||
when: flash_cache
|
||||
|
||||
- name: Configure Hostgroup
|
||||
netapp_e_hostgroup:
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
state: absent
|
||||
name: "ansible-host-group"
|
||||
when: configure_hostgroup
|
||||
|
||||
- name: Configure Snapshot group
|
||||
netapp_e_snapshot_group:
|
||||
ssid: "{{ ssid }}"
|
||||
state: present
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
validate_certs: "{{ netapp_api_validate_certs }}"
|
||||
base_volume_name: vol_3
|
||||
name: ansible_snapshot_group
|
||||
repo_pct: 20
|
||||
warning_threshold: 85
|
||||
delete_limit: 30
|
||||
full_policy: purgepit
|
||||
storage_pool_name: Disk_Pool_3
|
||||
rollback_priority: medium
|
||||
when: configure_snapshot
|
||||
|
||||
- name: Copy volume
|
||||
netapp_e_volume_copy:
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
status: present
|
||||
source_volume_id: "{{ volume_copy_source_volume_id }}"
|
||||
destination_volume_id: "{{ volume_destination_source_volume_id }}"
|
||||
when: copy_volume
|
||||
|
||||
- name: Snapshot volume
|
||||
netapp_e_snapshot_volume:
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
state: present
|
||||
storage_pool_name: "{{ snapshot_volume_storage_pool_name }}"
|
||||
snapshot_image_id: "{{ snapshot_volume_image_id }}"
|
||||
name: "{{ snapshot_volume_name }}"
|
||||
when: snapshot_volume
|
||||
|
||||
- name: Remove hosts
|
||||
netapp_e_host:
|
||||
ssid: "{{ ssid }}"
|
||||
state: absent
|
||||
name: "{{ item.key }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
host_type_index: "{{ host_type_index }}"
|
||||
with_dict: "{{hosts}}"
|
||||
when: remove_host
|
||||
|
||||
- name: Ensure/add hosts
|
||||
netapp_e_host:
|
||||
ssid: "{{ ssid }}"
|
||||
state: present
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
name: "{{ item.key }}"
|
||||
host_type_index: "{{ item.value.index }}"
|
||||
ports:
|
||||
- type: 'fc'
|
||||
label: 'fpPort1'
|
||||
port: '2100000E1E191B01'
|
||||
with_dict: "{{hosts}}"
|
||||
when: set_host
|
||||
|
||||
- name: Unmap a volume
|
||||
netapp_e_lun_mapping:
|
||||
state: absent
|
||||
ssid: "{{ ssid }}"
|
||||
lun: 2
|
||||
target: "{{ host_name }}"
|
||||
volume_name: "thin_vol_1"
|
||||
target_type: host
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
when: lun_mapping
|
||||
|
||||
- name: Map a volume
|
||||
netapp_e_lun_mapping:
|
||||
state: present
|
||||
ssid: "{{ ssid }}"
|
||||
lun: 16
|
||||
target: "{{ host_name }}"
|
||||
volume_name: "thin_vol_1"
|
||||
target_type: host
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
when: lun_mapping
|
||||
|
||||
- name: Update LUN Id
|
||||
netapp_e_lun_mapping:
|
||||
state: present
|
||||
ssid: "{{ ssid }}"
|
||||
lun: 2
|
||||
target: "{{ host_name }}"
|
||||
volume_name: "thin_vol_1"
|
||||
target_type: host
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
when: lun_mapping
|
||||
|
||||
- name: AMG removal
|
||||
netapp_e_amg:
|
||||
state: absent
|
||||
ssid: "{{ ssid }}"
|
||||
secondaryArrayId: "{{amg_secondaryArrayId}}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
new_name: "{{amg_array_name}}"
|
||||
name: "{{amg_name}}"
|
||||
when: amg_create
|
||||
|
||||
- name: AMG create
|
||||
netapp_e_amg:
|
||||
state: present
|
||||
ssid: "{{ ssid }}"
|
||||
secondaryArrayId: "{{amg_secondaryArrayId}}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
new_name: "{{amg_array_name}}"
|
||||
name: "{{amg_name}}"
|
||||
when: amg_create
|
||||
|
||||
- name: start AMG async
|
||||
netapp_e_amg_sync:
|
||||
name: "{{ amg_name }}"
|
||||
state: running
|
||||
ssid: "{{ ssid }}"
|
||||
api_url: "{{ netapp_api_url }}"
|
||||
api_username: "{{ netapp_api_username }}"
|
||||
api_password: "{{ netapp_api_password }}"
|
||||
when: amg_sync
|
||||
```
|
@ -0,0 +1,80 @@
|
||||
#
|
||||
# (c) 2016, Sumit Kumar <sumit4@netapp.com>
|
||||
#
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
class ModuleDocFragment(object):
|
||||
|
||||
DOCUMENTATION = """
|
||||
options:
|
||||
- See respective platform section for more details
|
||||
requirements:
|
||||
- See respective platform section for more details
|
||||
notes:
|
||||
- Ansible modules are available for the following NetApp Storage Platforms: E-Series, ONTAP, SolidFire
|
||||
"""
|
||||
|
||||
# Documentation fragment for ONTAP
|
||||
ONTAP = """
|
||||
options:
|
||||
hostname:
|
||||
required: true
|
||||
description:
|
||||
- The hostname or IP address of the ONTAP instance.
|
||||
username:
|
||||
required: true
|
||||
description:
|
||||
- Username: 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 U(https://goo.gl/BRu78Z).
|
||||
|
||||
password:
|
||||
required: true
|
||||
description:
|
||||
- Password for the specified user.
|
||||
|
||||
requirements:
|
||||
- A physical or virtual clustered Data ONTAP system. The modules were developed with Clustered Data ONTAP 8.3
|
||||
- Ansible 2.2
|
||||
- netapp-lib (2015.9.25). Install using 'pip install netapp-lib'
|
||||
|
||||
notes:
|
||||
- The modules prefixed with C(netapp\_cdot) are built to support the ONTAP storage platform.
|
||||
|
||||
"""
|
||||
|
||||
# Documentation fragment for SolidFire
|
||||
SOLIDFIRE = """
|
||||
options:
|
||||
hostname:
|
||||
required: true
|
||||
description:
|
||||
- The hostname or IP address of the SolidFire cluster.
|
||||
username:
|
||||
required: true
|
||||
description:
|
||||
- Username: Please ensure that the user has the adequate permissions. For more information, please read the official documentation U(https://goo.gl/ddJa4Q).
|
||||
password:
|
||||
required: true
|
||||
description:
|
||||
- Password for the specified user.
|
||||
|
||||
requirements:
|
||||
- solidfire-sdk-python (1.1.0.92)
|
||||
|
||||
notes:
|
||||
- The modules prefixed with C(sf\_) are built to support the SolidFire storage platform.
|
||||
|
||||
"""
|
Loading…
Reference in New Issue