Ansible로 vSphere의 가상 머신에 여러 Disk 추가
목차
1. 소개
Ansible을 사용하여 vSphere에 가상 머신을 구축할 때 vmware_guest_disk 모듈을 사용하여 하드 디스크를 추가했습니다.
하나의 디스크를 추가하면 간단하지만 2장 이상의 추가를 할 경우 unit_number의 루프 방법을 생각해야 했기 때문에 Playbook에 정리했습니다.
 2. 사용 환경
· CentOS 8
・Ansible 2.9.10
· vSphere 7.0
 3. Ansible 구성
.
|-- add_disk.yml
|-- host_vars
|   `-- vcsa7
|       `-- main.yml
|-- hosts
`-- include_add_disk.yml
 4. hosts 만들기
hosts의 내용은 다음과 같습니다. 호스트 이름과 IP를 나열합니다.
[target]
vcsa7 ansible_host="vcenter ip"
 5. tasks 만들기
다음과 같은 태스크(include_add_disk.yml)를 작성해 갑니다.
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
- name: debug
  debug:
    var: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
- name: ディスクを追加
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
우선, 실행 대상의 가상 머신의 디스크 정보를 취득합니다.
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "disk_info": {
        "changed": false,
        "failed": false,
        "guest_disk_info": {
            "0": {
                "backing_datastore": "2_QNAP_datastore",
                "backing_eagerlyscrub": false,
                "backing_filename": "[2_QNAP_datastore] ansible_test/ansible_test.vmdk",
                "backing_thinprovisioned": false,
                "backing_type": "FlatVer2",
                "backing_uuid": "6000C294-982e-e8d1-f5dc-f106b7fca5fc",
                "backing_writethrough": false,
                "capacity_in_bytes": 17179869184,
                "capacity_in_kb": 16777216,
                "controller_bus_number": 0,
                "controller_key": 1000,
                "controller_type": "paravirtual",
                "key": 2000,
                "label": "Hard disk 1",
                "summary": "16,777,216 KB",
                "unit_number": 0
            }
        }
    }
}
그런 다음 현재 사용 중인 컨트롤러 키를 가져옵니다.
컨트롤러 유형에 따라 컨트롤러 키가 결정됩니다.
(예 : SCSI 컨트롤러 0 : 1000, SCSI 컨트롤러 1 : 1001 등 ...)
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000
    ]
}
취득한 controllerFacts 를 소트 합니다.
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1000"
}
※ 참고로 SCSI 컨트롤러 0(1000)과 SCSI 컨트롤러 1(1001)을 사용했을 경우는 아래와 같이 『1001』이 컨트롤러 키로 저장됩니다. 따라서 여러 컨트롤러를 사용하는 경우 고려해야 합니다.
TASK [set fact - controllerFacts] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000,
        1001
    ]
}
TASK [set facts - controllerKey] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1001"
}
단위 번호를 가져옵니다. 마지막 'int +1'에 의해 취득한 unit_number에 +1 하고 있는 값이 세트 됩니다.
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "unitNumber": "1"
}
유닛 넘버로 7번은 할당할 수 없기 때문에 스킵을 실시하도록 합니다.
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
제어 키와 유닛 번호의 변수화가 완료되면 'vmware_guest_disk' 모듈을 사용하여 디스크를 추가합니다.
『controllerKey[3:4]』는 컨트롤러 키(1000)의 네 번째 자리(0)를 취득하고 있습니다.
- name: ディスクを追加する
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
 6. playbook 만들기
방금 만든 작업으로 playbook(add_disk.yml)을 만듭니다.
---
- hosts: all
  gather_facts: false
  tasks:
    - name: タスクを読み込む
      include_tasks: include_add_disk.yml
      with_items:
         "{{ disks }}"
      loop_control:
        loop_var: loop_disks
 7. vars 만들기
변수는 host_vars에 저장됩니다. 사용 환경에 따라 값을 변경하십시오.
vcenter_hostname: "vcenter hostname"
vcenter_username: "vcenter username"
vcenter_password: "vcenter password"
vm_name: test_vm
datacenter: /Datacenter/vm
disks:
 - disk_size: 10
 - disk_size: 14
disk_type: thin
datastore_name: datastore1
scsi_type: paravirtual
 8. Ansible 실행
가상 머신을 설정하기 전의 상태입니다.
 
Ansible을 실행합니다.
[root@localhost ansible]# ansible-playbook add_disk.yml -i hosts
・
・
・
PLAY RECAP **************************************************************************************************
vcsa7                      : ok=22   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Playbook이 성공하면 가상 머신을 확인합니다. 디스크 2, 디스크 3이 지정된 크기로 추가되었는지 확인할 수 있습니다.
 
 9. 결론
이번에는 SCSI 컨트롤러를 사용하여 디스크를 추가했습니다.
결정타입의 실행이라면 여기까지 고려할 필요는 없습니다만, 가능한 한 범용적으로 태스크를 작성하려면 궁리가 필요하게 됩니다.
 10. 기술 정보
 Ansible Molecule을 사용한 테스트 자동화 의 기사를 작성하고 있습니다. role을 테스트해 주는 툴이 됩니다. 실행환경을 자동으로 구축하고, 환경의 삭제도 실시할 수 있으므로, 균등성을 검증하기에 편리한 툴이 됩니다.
또, Ansible 입문자를위한 학습 가이드 (CentOS) 이나 Ansible 입문자용 학습 가이드(Windows편) 등 입문자용의 기사도 집필하고 있으므로, 참고로 해 주시면 좋겠습니다.
 11. 참고 URL
 htps : // v 곤푸 g. pl / 2019/08/17 / 안시 b ぇ ー d ぢ sk ー ー v ms きぴん g sc し ー d x 7 /
 htps : // 테카로 my. jp/마가지네/28100
 htps : // / cs. 안시 bぇ. 이 m / 안시 b ぇ / ぁ st / 모즈 s / vm 되 _ 구 st_ ぢ sk_ 모즈. HTML
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/cxc/items/d834a97d8fcad35ccfbc
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
· CentOS 8
・Ansible 2.9.10
· vSphere 7.0
3. Ansible 구성
.
|-- add_disk.yml
|-- host_vars
|   `-- vcsa7
|       `-- main.yml
|-- hosts
`-- include_add_disk.yml
 4. hosts 만들기
hosts의 내용은 다음과 같습니다. 호스트 이름과 IP를 나열합니다.
[target]
vcsa7 ansible_host="vcenter ip"
 5. tasks 만들기
다음과 같은 태스크(include_add_disk.yml)를 작성해 갑니다.
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
- name: debug
  debug:
    var: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
- name: ディスクを追加
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
우선, 실행 대상의 가상 머신의 디스크 정보를 취득합니다.
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "disk_info": {
        "changed": false,
        "failed": false,
        "guest_disk_info": {
            "0": {
                "backing_datastore": "2_QNAP_datastore",
                "backing_eagerlyscrub": false,
                "backing_filename": "[2_QNAP_datastore] ansible_test/ansible_test.vmdk",
                "backing_thinprovisioned": false,
                "backing_type": "FlatVer2",
                "backing_uuid": "6000C294-982e-e8d1-f5dc-f106b7fca5fc",
                "backing_writethrough": false,
                "capacity_in_bytes": 17179869184,
                "capacity_in_kb": 16777216,
                "controller_bus_number": 0,
                "controller_key": 1000,
                "controller_type": "paravirtual",
                "key": 2000,
                "label": "Hard disk 1",
                "summary": "16,777,216 KB",
                "unit_number": 0
            }
        }
    }
}
그런 다음 현재 사용 중인 컨트롤러 키를 가져옵니다.
컨트롤러 유형에 따라 컨트롤러 키가 결정됩니다.
(예 : SCSI 컨트롤러 0 : 1000, SCSI 컨트롤러 1 : 1001 등 ...)
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000
    ]
}
취득한 controllerFacts 를 소트 합니다.
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1000"
}
※ 참고로 SCSI 컨트롤러 0(1000)과 SCSI 컨트롤러 1(1001)을 사용했을 경우는 아래와 같이 『1001』이 컨트롤러 키로 저장됩니다. 따라서 여러 컨트롤러를 사용하는 경우 고려해야 합니다.
TASK [set fact - controllerFacts] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000,
        1001
    ]
}
TASK [set facts - controllerKey] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1001"
}
단위 번호를 가져옵니다. 마지막 'int +1'에 의해 취득한 unit_number에 +1 하고 있는 값이 세트 됩니다.
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "unitNumber": "1"
}
유닛 넘버로 7번은 할당할 수 없기 때문에 스킵을 실시하도록 합니다.
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
제어 키와 유닛 번호의 변수화가 완료되면 'vmware_guest_disk' 모듈을 사용하여 디스크를 추가합니다.
『controllerKey[3:4]』는 컨트롤러 키(1000)의 네 번째 자리(0)를 취득하고 있습니다.
- name: ディスクを追加する
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
 6. playbook 만들기
방금 만든 작업으로 playbook(add_disk.yml)을 만듭니다.
---
- hosts: all
  gather_facts: false
  tasks:
    - name: タスクを読み込む
      include_tasks: include_add_disk.yml
      with_items:
         "{{ disks }}"
      loop_control:
        loop_var: loop_disks
 7. vars 만들기
변수는 host_vars에 저장됩니다. 사용 환경에 따라 값을 변경하십시오.
vcenter_hostname: "vcenter hostname"
vcenter_username: "vcenter username"
vcenter_password: "vcenter password"
vm_name: test_vm
datacenter: /Datacenter/vm
disks:
 - disk_size: 10
 - disk_size: 14
disk_type: thin
datastore_name: datastore1
scsi_type: paravirtual
 8. Ansible 실행
가상 머신을 설정하기 전의 상태입니다.
 
Ansible을 실행합니다.
[root@localhost ansible]# ansible-playbook add_disk.yml -i hosts
・
・
・
PLAY RECAP **************************************************************************************************
vcsa7                      : ok=22   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Playbook이 성공하면 가상 머신을 확인합니다. 디스크 2, 디스크 3이 지정된 크기로 추가되었는지 확인할 수 있습니다.
 
 9. 결론
이번에는 SCSI 컨트롤러를 사용하여 디스크를 추가했습니다.
결정타입의 실행이라면 여기까지 고려할 필요는 없습니다만, 가능한 한 범용적으로 태스크를 작성하려면 궁리가 필요하게 됩니다.
 10. 기술 정보
 Ansible Molecule을 사용한 테스트 자동화 의 기사를 작성하고 있습니다. role을 테스트해 주는 툴이 됩니다. 실행환경을 자동으로 구축하고, 환경의 삭제도 실시할 수 있으므로, 균등성을 검증하기에 편리한 툴이 됩니다.
또, Ansible 입문자를위한 학습 가이드 (CentOS) 이나 Ansible 입문자용 학습 가이드(Windows편) 등 입문자용의 기사도 집필하고 있으므로, 참고로 해 주시면 좋겠습니다.
 11. 참고 URL
 htps : // v 곤푸 g. pl / 2019/08/17 / 안시 b ぇ ー d ぢ sk ー ー v ms きぴん g sc し ー d x 7 /
 htps : // 테카로 my. jp/마가지네/28100
 htps : // / cs. 안시 bぇ. 이 m / 안시 b ぇ / ぁ st / 모즈 s / vm 되 _ 구 st_ ぢ sk_ 모즈. HTML
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/cxc/items/d834a97d8fcad35ccfbc
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
.
|-- add_disk.yml
|-- host_vars
|   `-- vcsa7
|       `-- main.yml
|-- hosts
`-- include_add_disk.yml
hosts의 내용은 다음과 같습니다. 호스트 이름과 IP를 나열합니다.
[target]
vcsa7 ansible_host="vcenter ip"
5. tasks 만들기
다음과 같은 태스크(include_add_disk.yml)를 작성해 갑니다.
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
- name: debug
  debug:
    var: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
- name: ディスクを追加
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
우선, 실행 대상의 가상 머신의 디스크 정보를 취득합니다.
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "disk_info": {
        "changed": false,
        "failed": false,
        "guest_disk_info": {
            "0": {
                "backing_datastore": "2_QNAP_datastore",
                "backing_eagerlyscrub": false,
                "backing_filename": "[2_QNAP_datastore] ansible_test/ansible_test.vmdk",
                "backing_thinprovisioned": false,
                "backing_type": "FlatVer2",
                "backing_uuid": "6000C294-982e-e8d1-f5dc-f106b7fca5fc",
                "backing_writethrough": false,
                "capacity_in_bytes": 17179869184,
                "capacity_in_kb": 16777216,
                "controller_bus_number": 0,
                "controller_key": 1000,
                "controller_type": "paravirtual",
                "key": 2000,
                "label": "Hard disk 1",
                "summary": "16,777,216 KB",
                "unit_number": 0
            }
        }
    }
}
그런 다음 현재 사용 중인 컨트롤러 키를 가져옵니다.
컨트롤러 유형에 따라 컨트롤러 키가 결정됩니다.
(예 : SCSI 컨트롤러 0 : 1000, SCSI 컨트롤러 1 : 1001 등 ...)
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000
    ]
}
취득한 controllerFacts 를 소트 합니다.
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1000"
}
※ 참고로 SCSI 컨트롤러 0(1000)과 SCSI 컨트롤러 1(1001)을 사용했을 경우는 아래와 같이 『1001』이 컨트롤러 키로 저장됩니다. 따라서 여러 컨트롤러를 사용하는 경우 고려해야 합니다.
TASK [set fact - controllerFacts] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000,
        1001
    ]
}
TASK [set facts - controllerKey] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1001"
}
단위 번호를 가져옵니다. 마지막 'int +1'에 의해 취득한 unit_number에 +1 하고 있는 값이 세트 됩니다.
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
debug의 결과는 다음과 같습니다.
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "unitNumber": "1"
}
유닛 넘버로 7번은 할당할 수 없기 때문에 스킵을 실시하도록 합니다.
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
제어 키와 유닛 번호의 변수화가 완료되면 'vmware_guest_disk' 모듈을 사용하여 디스크를 추가합니다.
『controllerKey[3:4]』는 컨트롤러 키(1000)의 네 번째 자리(0)를 취득하고 있습니다.
- name: ディスクを追加する
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
 6. playbook 만들기
방금 만든 작업으로 playbook(add_disk.yml)을 만듭니다.
---
- hosts: all
  gather_facts: false
  tasks:
    - name: タスクを読み込む
      include_tasks: include_add_disk.yml
      with_items:
         "{{ disks }}"
      loop_control:
        loop_var: loop_disks
 7. vars 만들기
변수는 host_vars에 저장됩니다. 사용 환경에 따라 값을 변경하십시오.
vcenter_hostname: "vcenter hostname"
vcenter_username: "vcenter username"
vcenter_password: "vcenter password"
vm_name: test_vm
datacenter: /Datacenter/vm
disks:
 - disk_size: 10
 - disk_size: 14
disk_type: thin
datastore_name: datastore1
scsi_type: paravirtual
 8. Ansible 실행
가상 머신을 설정하기 전의 상태입니다.
 
Ansible을 실행합니다.
[root@localhost ansible]# ansible-playbook add_disk.yml -i hosts
・
・
・
PLAY RECAP **************************************************************************************************
vcsa7                      : ok=22   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Playbook이 성공하면 가상 머신을 확인합니다. 디스크 2, 디스크 3이 지정된 크기로 추가되었는지 확인할 수 있습니다.
 
 9. 결론
이번에는 SCSI 컨트롤러를 사용하여 디스크를 추가했습니다.
결정타입의 실행이라면 여기까지 고려할 필요는 없습니다만, 가능한 한 범용적으로 태스크를 작성하려면 궁리가 필요하게 됩니다.
 10. 기술 정보
 Ansible Molecule을 사용한 테스트 자동화 의 기사를 작성하고 있습니다. role을 테스트해 주는 툴이 됩니다. 실행환경을 자동으로 구축하고, 환경의 삭제도 실시할 수 있으므로, 균등성을 검증하기에 편리한 툴이 됩니다.
또, Ansible 입문자를위한 학습 가이드 (CentOS) 이나 Ansible 입문자용 학습 가이드(Windows편) 등 입문자용의 기사도 집필하고 있으므로, 참고로 해 주시면 좋겠습니다.
 11. 참고 URL
 htps : // v 곤푸 g. pl / 2019/08/17 / 안시 b ぇ ー d ぢ sk ー ー v ms きぴん g sc し ー d x 7 /
 htps : // 테카로 my. jp/마가지네/28100
 htps : // / cs. 안시 bぇ. 이 m / 안시 b ぇ / ぁ st / 모즈 s / vm 되 _ 구 st_ ぢ sk_ 모즈. HTML
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/cxc/items/d834a97d8fcad35ccfbc
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
- name: debug
  debug:
    var: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
- name: ディスクを追加
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
---
- name: 仮想マシンのディスク情報を取得
  vmware_guest_disk_info:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
  register: disk_info
  delegate_to: localhost
  ignore_errors: true
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "disk_info": {
        "changed": false,
        "failed": false,
        "guest_disk_info": {
            "0": {
                "backing_datastore": "2_QNAP_datastore",
                "backing_eagerlyscrub": false,
                "backing_filename": "[2_QNAP_datastore] ansible_test/ansible_test.vmdk",
                "backing_thinprovisioned": false,
                "backing_type": "FlatVer2",
                "backing_uuid": "6000C294-982e-e8d1-f5dc-f106b7fca5fc",
                "backing_writethrough": false,
                "capacity_in_bytes": 17179869184,
                "capacity_in_kb": 16777216,
                "controller_bus_number": 0,
                "controller_key": 1000,
                "controller_type": "paravirtual",
                "key": 2000,
                "label": "Hard disk 1",
                "summary": "16,777,216 KB",
                "unit_number": 0
            }
        }
    }
}
- name: set fact - controllerFacts
  set_fact:
    controllerFacts: "{{ disk_info.guest_disk_info.values()| map(attribute='controller_key') | list  }}"
  delegate_to: localhost
  ignore_errors: true
TASK [debug] ****************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000
    ]
}
- name: set facts - controllerKey
  set_fact:
    controllerKey: "{{ controllerFacts | sort | last  }}"
  delegate_to: localhost
  ignore_errors: true
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1000"
}
TASK [set fact - controllerFacts] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerFacts": [
        1000,
        1001
    ]
}
TASK [set facts - controllerKey] *****************************************************************************************************
ok: [vcsa7]
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "controllerKey": "1001"
}
- name: set fact - unitNumber
  set_fact:
    unitNumber: "{{ disk_info.guest_disk_info.values() | selectattr('controller_key','equalto',(controllerKey | int)) | map(attribute='unit_number') | list | sort | last |int +1 }}"
  delegate_to: localhost
  ignore_errors: true
TASK [debug] *****************************************************************************************************
ok: [vcsa7] => {
    "unitNumber": "1"
}
- name: Skip SCSI controller No 7
  set_fact:
    unitNumber: "{{ unitNumber | int+1 }}"
  delegate_to: localhost
  ignore_errors: true
  when:
    - "unitNumber is defined"
    - "unitNumber == '7'"
- name: ディスクを追加する
  vmware_guest_disk:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    name: "{{ vm_name }}"
    datacenter: "{{ datacenter }}"
    disk:
    - size_gb: "{{ loop_disks.disk_size }}"
      type: "{{ disk_type }}"
      state: present
      datastore: "{{ datastore_name }}"
      scsi_type: "{{ scsi_type }}"
      scsi_controller: "{{ controllerKey[3:4] }}"
      unit_number: "{{ unitNumber }}"
  register: add_disk
  delegate_to: localhost
방금 만든 작업으로 playbook(add_disk.yml)을 만듭니다.
---
- hosts: all
  gather_facts: false
  tasks:
    - name: タスクを読み込む
      include_tasks: include_add_disk.yml
      with_items:
         "{{ disks }}"
      loop_control:
        loop_var: loop_disks
7. vars 만들기
변수는 host_vars에 저장됩니다. 사용 환경에 따라 값을 변경하십시오.
vcenter_hostname: "vcenter hostname"
vcenter_username: "vcenter username"
vcenter_password: "vcenter password"
vm_name: test_vm
datacenter: /Datacenter/vm
disks:
 - disk_size: 10
 - disk_size: 14
disk_type: thin
datastore_name: datastore1
scsi_type: paravirtual
 8. Ansible 실행
가상 머신을 설정하기 전의 상태입니다.
 
Ansible을 실행합니다.
[root@localhost ansible]# ansible-playbook add_disk.yml -i hosts
・
・
・
PLAY RECAP **************************************************************************************************
vcsa7                      : ok=22   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Playbook이 성공하면 가상 머신을 확인합니다. 디스크 2, 디스크 3이 지정된 크기로 추가되었는지 확인할 수 있습니다.
 
 9. 결론
이번에는 SCSI 컨트롤러를 사용하여 디스크를 추가했습니다.
결정타입의 실행이라면 여기까지 고려할 필요는 없습니다만, 가능한 한 범용적으로 태스크를 작성하려면 궁리가 필요하게 됩니다.
 10. 기술 정보
 Ansible Molecule을 사용한 테스트 자동화 의 기사를 작성하고 있습니다. role을 테스트해 주는 툴이 됩니다. 실행환경을 자동으로 구축하고, 환경의 삭제도 실시할 수 있으므로, 균등성을 검증하기에 편리한 툴이 됩니다.
또, Ansible 입문자를위한 학습 가이드 (CentOS) 이나 Ansible 입문자용 학습 가이드(Windows편) 등 입문자용의 기사도 집필하고 있으므로, 참고로 해 주시면 좋겠습니다.
 11. 참고 URL
 htps : // v 곤푸 g. pl / 2019/08/17 / 안시 b ぇ ー d ぢ sk ー ー v ms きぴん g sc し ー d x 7 /
 htps : // 테카로 my. jp/마가지네/28100
 htps : // / cs. 안시 bぇ. 이 m / 안시 b ぇ / ぁ st / 모즈 s / vm 되 _ 구 st_ ぢ sk_ 모즈. HTML
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/cxc/items/d834a97d8fcad35ccfbc
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
vcenter_hostname: "vcenter hostname"
vcenter_username: "vcenter username"
vcenter_password: "vcenter password"
vm_name: test_vm
datacenter: /Datacenter/vm
disks:
 - disk_size: 10
 - disk_size: 14
disk_type: thin
datastore_name: datastore1
scsi_type: paravirtual
가상 머신을 설정하기 전의 상태입니다.

Ansible을 실행합니다.
[root@localhost ansible]# ansible-playbook add_disk.yml -i hosts
・
・
・
PLAY RECAP **************************************************************************************************
vcsa7                      : ok=22   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0
Playbook이 성공하면 가상 머신을 확인합니다. 디스크 2, 디스크 3이 지정된 크기로 추가되었는지 확인할 수 있습니다.

9. 결론
이번에는 SCSI 컨트롤러를 사용하여 디스크를 추가했습니다.
결정타입의 실행이라면 여기까지 고려할 필요는 없습니다만, 가능한 한 범용적으로 태스크를 작성하려면 궁리가 필요하게 됩니다.
 10. 기술 정보
 Ansible Molecule을 사용한 테스트 자동화 의 기사를 작성하고 있습니다. role을 테스트해 주는 툴이 됩니다. 실행환경을 자동으로 구축하고, 환경의 삭제도 실시할 수 있으므로, 균등성을 검증하기에 편리한 툴이 됩니다.
또, Ansible 입문자를위한 학습 가이드 (CentOS) 이나 Ansible 입문자용 학습 가이드(Windows편) 등 입문자용의 기사도 집필하고 있으므로, 참고로 해 주시면 좋겠습니다.
 11. 참고 URL
 htps : // v 곤푸 g. pl / 2019/08/17 / 안시 b ぇ ー d ぢ sk ー ー v ms きぴん g sc し ー d x 7 /
 htps : // 테카로 my. jp/마가지네/28100
 htps : // / cs. 안시 bぇ. 이 m / 안시 b ぇ / ぁ st / 모즈 s / vm 되 _ 구 st_ ぢ sk_ 모즈. HTML
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/cxc/items/d834a97d8fcad35ccfbc
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Ansible Molecule을 사용한 테스트 자동화 의 기사를 작성하고 있습니다. role을 테스트해 주는 툴이 됩니다. 실행환경을 자동으로 구축하고, 환경의 삭제도 실시할 수 있으므로, 균등성을 검증하기에 편리한 툴이 됩니다.
또, Ansible 입문자를위한 학습 가이드 (CentOS) 이나 Ansible 입문자용 학습 가이드(Windows편) 등 입문자용의 기사도 집필하고 있으므로, 참고로 해 주시면 좋겠습니다.
11. 참고 URL
 htps : // v 곤푸 g. pl / 2019/08/17 / 안시 b ぇ ー d ぢ sk ー ー v ms きぴん g sc し ー d x 7 /
 htps : // 테카로 my. jp/마가지네/28100
 htps : // / cs. 안시 bぇ. 이 m / 안시 b ぇ / ぁ st / 모즈 s / vm 되 _ 구 st_ ぢ sk_ 모즈. HTML
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/cxc/items/d834a97d8fcad35ccfbc
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cxc/items/d834a97d8fcad35ccfbc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)