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.)
· 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.)
.
|-- 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.)
---
- 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.)
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.)
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.)
Reference
이 문제에 관하여(Ansible로 vSphere의 가상 머신에 여러 Disk 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cxc/items/d834a97d8fcad35ccfbc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)