Skip to main content
NetApp Solutions SAP
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

Configuração de script do fornecedor e manuais do Ansible

Colaboradores

O arquivo de configuração do provedor, o script de execução e os playbooks do Ansible a seguir são usados durante a implantação de amostra e a execução do fluxo de trabalho nesta documentação.

Observação Os scripts de exemplo são fornecidos como estão e não são suportados pelo NetApp. Você pode solicitar a versão atual dos scripts via e-mail para mailto:ng-sapcc em NetApp.com[ng-sapcc em NetApp.com].

Arquivo de configuração do provedor NetApp_clone.conf

O arquivo de configuração é criado conforme descrito no "Documentação do SAP lama - Configurando os scripts registrados do SAP Host Agent". Esse arquivo de configuração deve estar localizado no nó de controle do Ansible, onde o agente de host SAP está instalado.

O usuário os configurado sapuser deve ter as permissões apropriadas para executar o script e os playbooks chamados Ansible. Você pode colocar o script em um diretório de script comum. O SAP lama pode fornecer vários parâmetros ao chamar o script.

Além dos parâmetros personalizados, PARAM_ClonePostFix PROP_ClonePostFix , PARAM_ClonePostFix, e PROP_ClonePostFix, muitos outros podem ser entregues, como é mostrado no "Documentação do SAP lama".

root@sap-jump:~# cat /usr/sap/hostctrl/exe/operations.d/netapp_clone.conf
Name: netapp_clone
Username: sapuser
Description: NetApp Clone for Custom Provisioning
Command: /usr/sap/scripts/netapp_clone.sh --HookOperationName=$[HookOperationName] --SAPSYSTEMNAME=$[SAPSYSTEMNAME] --SAPSYSTEM=$[SAPSYSTEM] --MOUNT_XML_PATH=$[MOUNT_XML_PATH] --PARAM_ClonePostFix=$[PARAM-ClonePostFix] --PARAM_SnapPostFix=$[PARAM-SnapPostFix] --PROP_ClonePostFix=$[PROP-ClonePostFix] --PROP_SnapPostFix=$[PROP-SnapPostFix] --SAP_LVM_SRC_SID=$[SAP_LVM_SRC_SID] --SAP_LVM_TARGET_SID=$[SAP_LVM_TARGET_SID]
ResulConverter: hook
Platform: Unix

Script de provedor NetApp_clone.sh

O script do provedor deve ser armazenado /usr/sap/scripts como configurado no arquivo de configuração do provedor.

Variáveis

As variáveis a seguir são codificadas no script e devem ser adaptadas de acordo.

  • `PRIMARY_CLUSTER=`nome de anfitrião do cluster NetApp>

  • `PRIMARY_SVM=`Nome do SVM onde os volumes do sistema de origem são armazenados>

Os arquivos de certificado PRIMARY_KEYFILE=/usr/sap/scripts/ansible/certs/ontap.key e PRIMARY_CERTFILE=/usr/sap/scripts/ansible/certs/ontap.pem devem ser fornecidos conforme descrito "Módulos do NetApp Ansible - Prepare o ONTAP" em .

Observação Se diferentes clusters ou SVMs forem necessários para diferentes sistemas SAP, essas variáveis podem ser adicionadas como parâmetros na definição do provedor SAP lama.

Função: Criar arquivo de inventário

Para tornar a execução do manual do Ansible mais dinâmica, é criado um inventory. yml arquivo imediatamente. Alguns valores estáticos são configurados na seção variável e alguns são criados dinamicamente durante a execução.

Função: Execute o manual de estratégia do Ansible

Essa função é usada para executar o manual de estratégia do Ansible juntamente com o arquivo criado dinamicamente inventory.yml. A convenção de nomenclatura para os playbooks é netapp_lama_${HookOperationName}.yml. Os valores para ${HookOperationName} dependem da operação Lama e entregues pelo Lama como parâmetro de linha de comando.

Secção Principal

Esta seção contém o plano de execução principal. A variável ${HookOperationName} contém o nome da etapa de substituição Lama e é fornecida pelo Lama quando o script é chamado.

  • Valores com o fluxo de trabalho de clone do sistema e provisionamento de cópia do sistema:

    • CloneVolumes

    • PostCloneVolumes

  • Valor com o fluxo de trabalho de destruição do sistema:

    • ServiceConfigRemoção

  • Valor com o fluxo de trabalho de atualização do sistema:

    • ClearMountConfig

Nome da conexão: CloneVolumes

Com essa etapa, o manual de estratégia do Ansible é executado, o que aciona a operação de clonagem e cópia Snapshot. Os nomes de volume e a configuração de montagem são entregues pelo SAP lama por meio de um arquivo XML definido na variável $MOUNT_XML_PATH. Esse arquivo é salvo porque é usado mais tarde na etapa FinalizeCloneVolumes para criar a nova configuração de ponto de montagem. Os nomes de volume são extraídos do arquivo XML e o manual de estratégia de clonagem do Ansible é executado para cada volume.

Observação Neste exemplo, a instância AS e os serviços centrais compartilham o mesmo volume. Portanto, a clonagem de volume só é executada quando o número da instância SAP ($SAPSYSTEM) não é 01 . Isso pode diferir em outros ambientes e deve ser alterado em conformidade.

Nome da caixa: PostCloneVolumes

Durante esta etapa, as propriedades personalizadas ClonePostFix e SnapPostFix a configuração do ponto de montagem para o sistema de destino são mantidas.

As propriedades personalizadas são usadas posteriormente como entrada quando o sistema é desativado durante a ServiceConfigRemoval fase ou ClearMountConfig. O sistema foi projetado para preservar as configurações dos parâmetros personalizados que foram especificados durante o fluxo de trabalho de provisionamento do sistema.

Os valores utilizados neste exemplo são ClonePostFix=_clone_20221115 e SnapPostFix=_snap_20221115.

Para o volume HN9_sap, o arquivo Ansible criado dinamicamente inclui os seguintes valores datavolumename: : HN9_sap, snapshotpostfix: _snap_20221115 E clonepostfix: _clone_20221115.

O que leva ao nome do snapshot no volume HN9_sap HN9_sap_snap_20221115 e ao nome do clone de volume criado HN9_sap_clone_20221115 .

Observação Propriedades personalizadas podem ser usadas de qualquer forma para preservar os parâmetros usados durante o processo de provisionamento.

A configuração do ponto de montagem é extraída do arquivo XML que foi entregue pelo Lama CloneVolume na etapa. O ClonePostFix é adicionado aos nomes de volume e enviado de volta ao Lama através da saída de script padrão. A funcionalidade é descrita em "SAP Nota 1889590".

Observação Neste exemplo, qtrees no sistema de armazenamento são usados como uma maneira comum de colocar dados diferentes em um único volume. Por exemplo, HN9_sap mantém os pontos de montagem para /usr/sap/HN9 /sapmnt/HN9 , /home/hn9adm e . Os subdiretórios funcionam da mesma forma. Isso pode diferir em outros ambientes e deve ser alterado em conformidade.

HookOperationName: ServiceConfigRemoval

Nessa etapa, o manual de estratégia do Ansible responsável pela exclusão dos clones de volume está sendo executado.

Os nomes de volume são entregues pelo SAP lama através do arquivo de configuração de montagem e as propriedades personalizadas ClonePostFix e SnapPostFix são usados para entregar os valores dos parâmetros originalmente especificados durante o fluxo de trabalho de provisionamento do sistema (consulte a nota em HookOperationName = PostCloneVolumes).

Os nomes de volume são extraídos do arquivo xml, e o manual de estratégia de clonagem do Ansible é executado para cada volume.

Observação Neste exemplo, a instância AS e os serviços centrais compartilham o mesmo volume. Portanto, a exclusão de volume só é executada quando o número da instância SAP ($SAPSYSTEM) não é 01 . Isso pode diferir em outros ambientes e deve ser alterado em conformidade.

Nome da conexão: ClearMountConfig

Nessa etapa, o manual do Ansible, responsável pela exclusão dos clones de volume durante um fluxo de trabalho de atualização do sistema, está sendo executado.

Os nomes de volume são entregues pelo SAP lama através do arquivo de configuração de montagem e as propriedades personalizadas ClonePostFix e SnapPostFix são usados para entregar os valores dos parâmetros originalmente especificados durante o fluxo de trabalho de provisionamento do sistema.

Os nomes de volume são extraídos do arquivo XML e o manual de estratégia de clonagem do Ansible é executado para cada volume.

Observação Neste exemplo, a instância AS e os serviços centrais compartilham o mesmo volume. Portanto, a exclusão de volume só é executada quando o número da instância SAP ($SAPSYSTEM) não é 01 . Isso pode diferir em outros ambientes e deve ser alterado em conformidade.
root@sap-jump:~# cat /usr/sap/scripts/netapp_clone.sh
#!/bin/bash
#Section - Variables
#########################################
VERSION="Version 0.9"
#Path for ansible play-books
ANSIBLE_PATH=/usr/sap/scripts/ansible
#Values for Ansible Inventory File
PRIMARY_CLUSTER=grenada
PRIMARY_SVM=svm-sap01
PRIMARY_KEYFILE=/usr/sap/scripts/ansible/certs/ontap.key
PRIMARY_CERTFILE=/usr/sap/scripts/ansible/certs/ontap.pem
#Default Variable if PARAM ClonePostFix / SnapPostFix is not maintained in LaMa
DefaultPostFix=_clone_1
#TMP Files - used during execution
YAML_TMP=/tmp/inventory_ansible_clone_tmp_$$.yml
TMPFILE=/tmp/tmpfile.$$
MY_NAME="`basename $0`"
BASE_SCRIPT_DIR="`dirname $0`"
#Sendig Script Version and run options to LaMa Log
echo "[DEBUG]: Running Script $MY_NAME $VERSION"
echo "[DEBUG]: $MY_NAME $@"
#Command declared in the netapp_clone.conf Provider definition
#Command: /usr/sap/scripts/netapp_clone.sh --HookOperationName=$[HookOperationName] --SAPSYSTEMNAME=$[SAPSYSTEMNAME] --SAPSYSTEM=$[SAPSYSTEM] --MOUNT_XML_PATH=$[MOUNT_XML_PATH] --PARAM_ClonePostFix=$[PARAM-ClonePostFix] --PARAM_SnapPostFix=$[PARAM-SnapPostFix] --PROP_ClonePostFix=$[PROP-ClonePostFix] --PROP_SnapPostFix=$[PROP-SnapPostFix] --SAP_LVM_SRC_SID=$[SAP_LVM_SRC_SID] --SAP_LVM_TARGET_SID=$[SAP_LVM_TARGET_SID]
#Reading Input Variables hand over by LaMa
for i in "$@"
do
case $i in
--HookOperationName=*)
HookOperationName="${i#*=}";shift;;
--SAPSYSTEMNAME=*)
SAPSYSTEMNAME="${i#*=}";shift;;
--SAPSYSTEM=*)
SAPSYSTEM="${i#*=}";shift;;
--MOUNT_XML_PATH=*)
MOUNT_XML_PATH="${i#*=}";shift;;
--PARAM_ClonePostFix=*)
PARAM_ClonePostFix="${i#*=}";shift;;
--PARAM_SnapPostFix=*)
PARAM_SnapPostFix="${i#*=}";shift;;
--PROP_ClonePostFix=*)
PROP_ClonePostFix="${i#*=}";shift;;
--PROP_SnapPostFix=*)
PROP_SnapPostFix="${i#*=}";shift;;
--SAP_LVM_SRC_SID=*)
SAP_LVM_SRC_SID="${i#*=}";shift;;
--SAP_LVM_TARGET_SID=*)
SAP_LVM_TARGET_SID="${i#*=}";shift;;
*)
# unknown option
;;
esac
done
#If Parameters not provided by the User - defaulting to DefaultPostFix
if [ -z $PARAM_ClonePostFix ]; then PARAM_ClonePostFix=$DefaultPostFix;fi
if [ -z $PARAM_SnapPostFix ]; then PARAM_SnapPostFix=$DefaultPostFix;fi
#Section - Functions
#########################################
#Function Create (Inventory) YML File
#########################################
create_yml_file()
{
echo "ontapservers:">$YAML_TMP
echo " hosts:">>$YAML_TMP
echo "  ${PRIMARY_CLUSTER}:">>$YAML_TMP
echo "   ansible_host: "'"'$PRIMARY_CLUSTER'"'>>$YAML_TMP
echo "   keyfile: "'"'$PRIMARY_KEYFILE'"'>>$YAML_TMP
echo "   certfile: "'"'$PRIMARY_CERTFILE'"'>>$YAML_TMP
echo "   svmname: "'"'$PRIMARY_SVM'"'>>$YAML_TMP
echo "   datavolumename: "'"'$datavolumename'"'>>$YAML_TMP
echo "   snapshotpostfix: "'"'$snapshotpostfix'"'>>$YAML_TMP
echo "   clonepostfix: "'"'$clonepostfix'"'>>$YAML_TMP
}
#Function run ansible-playbook
#########################################
run_ansible_playbook()
{
echo "[DEBUG]: Running ansible playbook netapp_lama_${HookOperationName}.yml on Volume $datavolumename"
ansible-playbook -i $YAML_TMP $ANSIBLE_PATH/netapp_lama_${HookOperationName}.yml
}
#Section - Main
#########################################
#HookOperationName – CloneVolumes
#########################################
if [ $HookOperationName = CloneVolumes ] ;then
#save mount xml for later usage - used in Section FinalizeCloneVolues to generate the mountpoints
echo "[DEBUG]: saving mount config...."
cp $MOUNT_XML_PATH /tmp/mount_config_${SAPSYSTEMNAME}_${SAPSYSTEM}.xml
#Instance 00 + 01 share the same volumes - clone needs to be done once
if [ $SAPSYSTEM != 01 ]; then
#generating Volume List - assuming usage of qtrees - "IP-Adress:/VolumeName/qtree"
xmlFile=/tmp/mount_config_${SAPSYSTEMNAME}_${SAPSYSTEM}.xml
if [ -e $TMPFILE ];then rm $TMPFILE;fi
numMounts=`xml_grep --count "/mountconfig/mount" $xmlFile | grep "total: " | awk '{ print $2 }'`
i=1
while [ $i -le $numMounts ]; do
     xmllint --xpath "/mountconfig/mount[$i]/exportpath/text()" $xmlFile |awk -F"/" '{print $2}' >>$TMPFILE
i=$((i + 1))
done
DATAVOLUMES=`cat  $TMPFILE |sort -u`
#Create yml file and rund playbook for each volume
for I in $DATAVOLUMES; do
datavolumename="$I"
snapshotpostfix="$PARAM_SnapPostFix"
clonepostfix="$PARAM_ClonePostFix"
create_yml_file
run_ansible_playbook
done
else
echo "[DEBUG]: Doing nothing .... Volume cloned in different Task"
fi
fi
#HookOperationName – PostCloneVolumes
#########################################
if [ $HookOperationName = PostCloneVolumes] ;then
#Reporting Properties back to LaMa Config for Cloned System
echo "[RESULT]:Property:ClonePostFix=$PARAM_ClonePostFix"
echo "[RESULT]:Property:SnapPostFix=$PARAM_SnapPostFix"
#Create MountPoint Config for Cloned Instances and report back to LaMa according to SAP Note: https://launchpad.support.sap.com/#/notes/1889590
echo "MountDataBegin"
echo '<?xml version="1.0" encoding="UTF-8"?>'
echo "<mountconfig>"
xmlFile=/tmp/mount_config_${SAPSYSTEMNAME}_${SAPSYSTEM}.xml
numMounts=`xml_grep --count "/mountconfig/mount" $xmlFile | grep "total: " | awk '{ print $2 }'`
i=1
while [ $i -le $numMounts ]; do
MOUNTPOINT=`xmllint --xpath "/mountconfig/mount[$i]/mountpoint/text()" $xmlFile`;
        EXPORTPATH=`xmllint --xpath "/mountconfig/mount[$i]/exportpath/text()" $xmlFile`;
        OPTIONS=`xmllint --xpath "/mountconfig/mount[$i]/options/text()" $xmlFile`;
#Adopt Exportpath and add Clonepostfix - assuming usage of qtrees - "IP-Adress:/VolumeName/qtree"
TMPFIELD1=`echo $EXPORTPATH|awk -F":/" '{print $1}'`
TMPFIELD2=`echo $EXPORTPATH|awk -F"/" '{print $2}'`
TMPFIELD3=`echo $EXPORTPATH|awk -F"/" '{print $3}'`
EXPORTPATH=$TMPFIELD1":/"${TMPFIELD2}$PARAM_ClonePostFix"/"$TMPFIELD3
echo -e '\t<mount fstype="nfs" storagetype="NETFS">'
echo -e "\t\t<mountpoint>${MOUNTPOINT}</mountpoint>"
echo -e "\t\t<exportpath>${EXPORTPATH}</exportpath>"
echo -e "\t\t<options>${OPTIONS}</options>"
echo -e "\t</mount>"
i=$((i + 1))
done
echo "</mountconfig>"
echo "MountDataEnd"
#Finished MountPoint Config
#Cleanup Temporary Files
rm $xmlFile
fi
#HookOperationName – ServiceConfigRemoval
#########################################
if [ $HookOperationName = ServiceConfigRemoval ] ;then
#Assure that Properties ClonePostFix and SnapPostfix has been configured through the provisioning process
if [ -z $PROP_ClonePostFix ]; then echo "[ERROR]: Propertiy ClonePostFix is not handed over - please investigate";exit 5;fi
if [ -z $PROP_SnapPostFix ]; then echo "[ERROR]: Propertiy SnapPostFix is not handed over - please investigate";exit 5;fi
#Instance 00 + 01 share the same volumes - clone delete needs to be done once
if [ $SAPSYSTEM != 01 ]; then
#generating Volume List - assuming usage of qtrees - "IP-Adress:/VolumeName/qtree"
xmlFile=$MOUNT_XML_PATH
if [ -e $TMPFILE ];then rm $TMPFILE;fi
numMounts=`xml_grep --count "/mountconfig/mount" $xmlFile | grep "total: " | awk '{ print $2 }'`
i=1
while [ $i -le $numMounts ]; do
     xmllint --xpath "/mountconfig/mount[$i]/exportpath/text()" $xmlFile |awk -F"/" '{print $2}' >>$TMPFILE
i=$((i + 1))
done
DATAVOLUMES=`cat  $TMPFILE |sort -u| awk -F $PROP_ClonePostFix '{ print $1 }'`
#Create yml file and rund playbook for each volume
for I in $DATAVOLUMES; do
datavolumename="$I"
snapshotpostfix="$PROP_SnapPostFix"
clonepostfix="$PROP_ClonePostFix"
create_yml_file
run_ansible_playbook
done
else
echo "[DEBUG]: Doing nothing .... Volume deleted in different Task"
fi
#Cleanup Temporary Files
rm $xmlFile
fi
#HookOperationName - ClearMountConfig
#########################################
if [ $HookOperationName = ClearMountConfig ] ;then
        #Assure that Properties ClonePostFix and SnapPostfix has been configured through the provisioning process
        if [ -z $PROP_ClonePostFix ]; then echo "[ERROR]: Propertiy ClonePostFix is not handed over - please investigate";exit 5;fi
        if [ -z $PROP_SnapPostFix ]; then echo "[ERROR]: Propertiy SnapPostFix is not handed over - please investigate";exit 5;fi
        #Instance 00 + 01 share the same volumes - clone delete needs to be done once
        if [ $SAPSYSTEM != 01 ]; then
                #generating Volume List - assuming usage of qtrees - "IP-Adress:/VolumeName/qtree"
                xmlFile=$MOUNT_XML_PATH
                if [ -e $TMPFILE ];then rm $TMPFILE;fi
                numMounts=`xml_grep --count "/mountconfig/mount" $xmlFile | grep "total: " | awk '{ print $2 }'`
                i=1
                while [ $i -le $numMounts ]; do
                        xmllint --xpath "/mountconfig/mount[$i]/exportpath/text()" $xmlFile |awk -F"/" '{print $2}' >>$TMPFILE
                        i=$((i + 1))
                done
                DATAVOLUMES=`cat  $TMPFILE |sort -u| awk -F $PROP_ClonePostFix '{ print $1 }'`
                #Create yml file and rund playbook for each volume
                for I in $DATAVOLUMES; do
                        datavolumename="$I"
                        snapshotpostfix="$PROP_SnapPostFix"
                        clonepostfix="$PROP_ClonePostFix"
                        create_yml_file
                        run_ansible_playbook
                done
        else
                echo "[DEBUG]: Doing nothing .... Volume deleted in different Task"
        fi
        #Cleanup Temporary Files
        rm $xmlFile
fi
#Cleanup
#########################################
#Cleanup Temporary Files
if [ -e $TMPFILE ];then rm $TMPFILE;fi
if [ -e $YAML_TMP ];then rm $YAML_TMP;fi
exit 0

Ansible Playbook NetApp_lama_CloneVolumes.yml

O manual de estratégia que é executado durante a etapa CloneVolumes do fluxo de trabalho clone do sistema lama é uma combinação create_snapshot.yml de e create_clone.yml (consulte "Módulos do NetApp Ansible - arquivos YAML"). Esse manual de estratégia pode ser facilmente estendido para cobrir casos de uso adicionais, como clonagem de operações secundárias e de divisão de clones.

root@sap-jump:~# cat /usr/sap/scripts/ansible/netapp_lama_CloneVolumes.yml
---
- hosts: ontapservers
  connection: local
  collections:
    - netapp.ontap
  gather_facts: false
  name: netapp_lama_CloneVolumes
  tasks:
  - name: Create SnapShot
    na_ontap_snapshot:
      state: present
      snapshot: "{{ datavolumename }}{{ snapshotpostfix }}"
      use_rest: always
      volume: "{{ datavolumename }}"
      vserver: "{{ svmname }}"
      hostname: "{{ inventory_hostname }}"
      cert_filepath: "{{ certfile }}"
      key_filepath: "{{ keyfile }}"
      https: true
      validate_certs: false
  - name: Clone Volume
    na_ontap_volume_clone:
      state: present
      name: "{{ datavolumename }}{{ clonepostfix }}"
      use_rest: always
      vserver: "{{ svmname }}"
      junction_path: '/{{ datavolumename }}{{ clonepostfix }}'
      parent_volume: "{{ datavolumename }}"
      parent_snapshot: "{{ datavolumename }}{{ snapshotpostfix }}"
      hostname: "{{ inventory_hostname }}"
      cert_filepath: "{{ certfile }}"
      key_filepath: "{{ keyfile }}"
      https: true
      validate_certs: false

Manual de instruções do Ansible NetApp_lama_ServiceConfigRemoval.yml

O manual de estratégia que é executado durante ServiceConfigRemoval a fase do fluxo de trabalho de destruição do sistema Lama é uma combinação delete_clone.yml de e delete_snapshot.yml (consulte "Módulos do NetApp Ansible - arquivos YAML"). Ela deve estar alinhada às etapas de execução do netapp_lama_CloneVolumes manual de estratégia.

root@sap-jump:~# cat /usr/sap/scripts/ansible/netapp_lama_ServiceConfigRemoval.yml
---
- hosts: ontapservers
  connection: local
  collections:
    - netapp.ontap
  gather_facts: false
  name: netapp_lama_ServiceConfigRemoval
  tasks:
  - name: Delete Clone
    na_ontap_volume:
      state: absent
      name: "{{ datavolumename }}{{ clonepostfix }}"
      use_rest: always
      vserver: "{{ svmname }}"
      wait_for_completion: True
      hostname: "{{ inventory_hostname }}"
      cert_filepath: "{{ certfile }}"
      key_filepath: "{{ keyfile }}"
      https: true
      validate_certs: false
  - name: Delete SnapShot
    na_ontap_snapshot:
      state: absent
      snapshot: "{{ datavolumename }}{{ snapshotpostfix }}"
      use_rest: always
      volume: "{{ datavolumename }}"
      vserver: "{{ svmname }}"
      hostname: "{{ inventory_hostname }}"
      cert_filepath: "{{ certfile }}"
      key_filepath: "{{ keyfile }}"
      https: true
      validate_certs: false
root@sap-jump:~#

Manual do Ansible NetApp_lama_ClearMountConfig.yml

O manual de estratégia, que é executado durante netapp_lama_ClearMountConfig a fase do fluxo de trabalho de atualização do sistema lama, é uma combinação delete_clone.yml de e delete_snapshot.yml (consulte "Módulos do NetApp Ansible - arquivos YAML"). Ela deve estar alinhada às etapas de execução do netapp_lama_CloneVolumes manual de estratégia.

root@sap-jump:~# cat /usr/sap/scripts/ansible/netapp_lama_ServiceConfigRemoval.yml
---
- hosts: ontapservers
  connection: local
  collections:
    - netapp.ontap
  gather_facts: false
  name: netapp_lama_ServiceConfigRemoval
  tasks:
  - name: Delete Clone
    na_ontap_volume:
      state: absent
      name: "{{ datavolumename }}{{ clonepostfix }}"
      use_rest: always
      vserver: "{{ svmname }}"
      wait_for_completion: True
      hostname: "{{ inventory_hostname }}"
      cert_filepath: "{{ certfile }}"
      key_filepath: "{{ keyfile }}"
      https: true
      validate_certs: false
  - name: Delete SnapShot
    na_ontap_snapshot:
      state: absent
      snapshot: "{{ datavolumename }}{{ snapshotpostfix }}"
      use_rest: always
      volume: "{{ datavolumename }}"
      vserver: "{{ svmname }}"
      hostname: "{{ inventory_hostname }}"
      cert_filepath: "{{ certfile }}"
      key_filepath: "{{ keyfile }}"
      https: true
      validate_certs: false
root@sap-jump:~#

Exemplo de inventário do Ansible.yml

Este arquivo de inventário é dinamicamente construído durante a execução do fluxo de trabalho, e só é mostrado aqui para ilustração.

ontapservers:
 hosts:
  grenada:
   ansible_host: "grenada"
   keyfile: "/usr/sap/scripts/ansible/certs/ontap.key"
   certfile: "/usr/sap/scripts/ansible/certs/ontap.pem"
   svmname: "svm-sap01"
   datavolumename: "HN9_sap"
   snapshotpostfix: " _snap_20221115"
   clonepostfix: "_clone_20221115"