Skip to main content
NetApp Solutions SAP
본 한국어 번역은 사용자 편의를 위해 제공되는 기계 번역입니다. 영어 버전과 한국어 버전이 서로 어긋나는 경우에는 언제나 영어 버전이 우선합니다.

공급자 스크립트 구성 및 Ansible 플레이북

기여자

이 문서에서는 샘플 배포 및 워크플로우 실행 중에 다음과 같은 공급자 구성 파일, 실행 스크립트 및 Ansible 플레이북을 사용합니다.

참고 예제 스크립트는 있는 그대로 제공되며 NetApp에서 지원하지 않습니다. mailto:ng-sapcc@netapp.com [ng-sapcc@netapp.com^]으로 이메일을 통해 스크립트의 현재 버전을 요청할 수 있습니다.

provider 구성 파일 netapp_clone.conf

구성 파일은 에 설명된 대로 생성됩니다 "SAP LaMa 설명서 - SAP Host Agent 등록 스크립트 구성". 이 구성 파일은 SAP 호스트 에이전트가 설치된 Ansible 제어 노드에 위치해야 합니다.

구성된 OS-사용자입니다 sapuser 스크립트와 소위 Ansible 플레이북을 실행할 수 있는 적절한 권한이 있어야 합니다. 스크립트를 일반 스크립트 디렉토리에 배치할 수 있습니다. SAP LaMa는 스크립트를 호출할 때 여러 매개 변수를 제공할 수 있습니다.

사용자 정의 매개변수 외에 PARAM_ClonePostFix, PROP_ClonePostFix, PARAM_ClonePostFix, 및 `PROP_ClonePostFix`에 나와 있는 것처럼 많은 다른 사람들이 인도될 수 있습니다 "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

공급자 스크립트 netapp_clone.sh

공급자 스크립트는 에 저장해야 합니다 /usr/sap/scripts 공급자 구성 파일에 구성되어 있습니다.

변수

다음 변수는 스크립트에 하드 코딩되어 있으며 그에 따라 수정해야 합니다.

  • PRIMARY_CLUSTER=<hostname of netapp cluster>

  • PRIMARY_SVM=<SVM name where source system volumes are stored>

인증서 파일입니다 PRIMARY_KEYFILE=/usr/sap/scripts/ansible/certs/ontap.keyPRIMARY_CERTFILE=/usr/sap/scripts/ansible/certs/ontap.pem 에 설명된 대로 제공해야 합니다 "NetApp Ansible 모듈 - ONTAP을 준비합니다".

참고 서로 다른 SAP 시스템에 서로 다른 클러스터 또는 SVM이 필요한 경우 이러한 변수를 SAP LaMa 공급자 정의의 매개 변수로 추가할 수 있습니다.

Function(기능): 재고 파일을 생성합니다

Ansible 플레이북을 더 동적이며 inventory. yml 파일이 즉시 생성됩니다. 일부 정적 값은 변수 섹션에서 구성되며, 일부는 실행 중에 동적으로 생성됩니다.

기능: Ansible 플레이북을 실행하십시오

이 기능은 동적으로 생성된 과 함께 Ansible 플레이북을 실행하는 데 사용됩니다 inventory.yml 파일. Playbook의 명명 규칙은 입니다 netapp_lama_${HookOperationName}.yml. 의 값 ${HookOperationName} LaMa 운용에 의존하며 LaMa에 의해 명령행 파라미터로 전달된다.

섹션 기본

이 섹션에서는 기본 실행 계획을 다룹니다. 변수 ${HookOperationName} LAMA 교체 단계의 이름이 포함되어 있으며 스크립트를 호출할 때 LaMa에서 제공됩니다.

  • 시스템 클론 및 시스템 복사본 프로비저닝 워크플로와 관련된 값:

    • 볼륨

    • PostCloneVolumes

  • 시스템이 워크플로를 소멸시키는 값:

    • ServiceConfigRemoval

  • 시스템 새로 고침 워크플로의 값:

    • ClearMountConfig를 클릭합니다

HookOperationName = CloneVolumes입니다

이 단계에서는 Ansible 플레이북을 실행하여 스냅샷 복사본 및 클론 복제 작업을 트리거합니다. 볼륨 이름 및 마운트 구성은 변수에 정의된 XML 파일을 통해 SAP LaMa에 의해 전달됩니다 $MOUNT_XML_PATH. 이 파일은 나중에 단계에서 사용되므로 저장됩니다 FinalizeCloneVolumes 를 클릭하여 새 마운트 지점 구성을 생성합니다. 볼륨 이름은 XML 파일에서 추출되고 Ansible 클론 플레이북은 각 볼륨에 대해 실행됩니다.

참고 이 예에서 AS 인스턴스와 중앙 서비스는 동일한 볼륨을 공유합니다. 따라서 볼륨 클론 복제는 SAP 인스턴스 번호에서만 실행됩니다 ($SAPSYSTEM)은(는) 아닙니다 01. 이는 다른 환경에 따라 다를 수 있으므로 그에 따라 변경해야 합니다.

HookOperationName = PostCloneVolumes

이 단계에서 사용자 정의 속성이 표시됩니다 ClonePostFixSnapPostFix 타겟 시스템의 마운트 지점 구성이 유지됩니다.

사용자 정의 속성은 나중에 이 과정에서 시스템을 해체할 때 입력으로 사용됩니다 ServiceConfigRemoval 또는 ClearMountConfig 단계. 시스템은 시스템 프로비저닝 워크플로우 중에 지정된 사용자 지정 매개 변수의 설정을 보존하도록 설계되었습니다.

이 예제에서 사용되는 값은 입니다 ClonePostFix=_clone_20221115SnapPostFix=_snap_20221115.

를 선택합니다 HN9_sap`동적으로 생성된 Ansible 파일에는 다음 값이 포함됩니다. `datavolumename: HN9_sap, snapshotpostfix: _snap_20221115, 및 clonepostfix: _clone_20221115.

이 경우 볼륨 HN9_SAP의 스냅샷 이름으로 연결됩니다 HN9_sap_snap_20221115 생성된 볼륨 클론 이름입니다 HN9_sap_clone_20221115.

참고 사용자 지정 속성은 프로비저닝 프로세스 중에 사용되는 매개 변수를 보존하기 위해 어떤 방법으로든 사용할 수 있습니다.

마운트 지점 구성은 에서 LaMa가 넘겨준 XML 파일에서 추출됩니다 CloneVolume 단계. 를 클릭합니다 ClonePostFix 볼륨 이름에 추가되고 기본 스크립트 출력을 통해 LaMa로 다시 전송됩니다. 기능에 대한 설명은 에 나와 있습니다 "SAP 참고 1889590".

참고 이 예에서는 스토리지 시스템의 qtree가 단일 볼륨에 여러 데이터를 배치하는 일반적인 방법으로 사용됩니다. 예를 들면, 다음과 같습니다. HN9_sap 의 마운트 지점을 보유합니다 /usr/sap/HN9, /sapmnt/HN9, 및 /home/hn9adm. 하위 디렉터리는 같은 방식으로 작동합니다. 이는 다른 환경에 따라 다를 수 있으므로 그에 따라 변경해야 합니다.

HookOperationName = ServiceConfigRemoval

이 단계에서는 볼륨 클론을 삭제하는 역할을 하는 Ansible 플레이북을 실행합니다.

볼륨 이름은 마운트 구성 파일 및 사용자 지정 속성을 통해 SAP LaMa에서 전달됩니다 ClonePostFixSnapPostFix 시스템 프로비저닝 워크플로우 중에 원래 지정된 매개 변수의 값을 넘기는 데 사용됩니다(의 참고 사항 참조) HookOperationName = PostCloneVolumes)를 클릭합니다.

볼륨 이름은 XML 파일에서 추출되고, Ansible 클론 플레이북은 각 볼륨에 대해 실행됩니다.

참고 이 예에서 AS 인스턴스와 중앙 서비스는 동일한 볼륨을 공유합니다. 따라서 볼륨 삭제는 SAP 인스턴스 번호에서만 실행됩니다 ($SAPSYSTEM)은(는) 아닙니다 01. 이는 다른 환경에 따라 다를 수 있으므로 그에 따라 변경해야 합니다.

HookOperationName = ClearMountConfig입니다

이 단계에서는 시스템 업데이트 워크플로우 중에 볼륨 클론을 삭제하는 역할을 하는 Ansible 플레이북을 실행합니다.

볼륨 이름은 마운트 구성 파일 및 사용자 지정 속성을 통해 SAP LaMa에서 전달됩니다 ClonePostFixSnapPostFix 시스템 프로비저닝 워크플로우 중에 원래 지정된 매개 변수의 값을 넘기는 데 사용됩니다.

볼륨 이름은 XML 파일에서 추출되고 Ansible 클론 플레이북은 각 볼륨에 대해 실행됩니다.

참고 이 예에서 AS 인스턴스와 중앙 서비스는 동일한 볼륨을 공유합니다. 따라서 볼륨 삭제는 SAP 인스턴스 번호에서만 실행됩니다 ($SAPSYSTEM)은(는) 아닙니다 01. 이는 다른 환경에 따라 다를 수 있으므로 그에 따라 변경해야 합니다.
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 플레이북 NetApp_LaMa_CloneVolumes.yml

LaMa 시스템 클론 워크플로우의 CloneVolumes 단계에서 실행되는 플레이북은 의 조합입니다 create_snapshot.ymlcreate_clone.yml (을 참조하십시오 "NetApp Ansible 모듈 - YAML 파일")를 클릭합니다. 이 플레이북은 보조 및 클론 분할 작업의 클론 복제와 같은 추가 사용 사례를 쉽게 포함할 수 있습니다.

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

Ansible 플레이북 NetApp_LaMa_ServiceConfigRemoval.yml

동안 실행되는 플레이북 ServiceConfigRemoval LaMa 시스템 제거 워크플로의 단계는 의 조합입니다 delete_clone.ymldelete_snapshot.yml (을 참조하십시오 "NetApp Ansible 모듈 - YAML 파일")를 클릭합니다. 의 실행 단계와 정렬되어야 합니다 netapp_lama_CloneVolumes 플레이북.

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:~#

Ansible Playbook NetApp_LaMa_ClearMountConfig.yml

Playbook은 에서 실행됩니다 netapp_lama_ClearMountConfig LaMa 시스템 업데이트 워크플로의 단계는 의 조합입니다 delete_clone.ymldelete_snapshot.yml (을 참조하십시오 "NetApp Ansible 모듈 - YAML 파일")를 클릭합니다. 의 실행 단계와 정렬되어야 합니다 netapp_lama_CloneVolumes 플레이북.

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:~#

Ansible 재고 샘플

이 재고 파일은 워크플로 실행 중에 동적으로 구축되며, 여기에는 설명을 위한 용도로만 표시됩니다.

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"