Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
joohanhong
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
JooHan Hong
joohanhong
Commits
b0019cf1
Commit
b0019cf1
authored
Mar 10, 2021
by
JooHan Hong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vm init
parent
0fb8853f
Pipeline
#5140
passed with stages
in 2 seconds
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
206 additions
and
1 deletion
+206
-1
README.md
ANSIBLE/DBMS/README.md
+1
-1
README.md
ANSIBLE/VM/README.md
+11
-0
README.md
ANSIBLE/VM/VMC/README.md
+194
-0
No files found.
ANSIBLE/DBMS/README.md
View file @
b0019cf1
...
...
@@ -10,4 +10,4 @@
| ------ | ------ | ------ | ------ |
| 1 | MariaDB Install |
[
GO
](
./MariaDB/
)
| |
| 2 | MHA Manager Installing |
[
GO
](
./MHA/MANAGER/
)
| |
|
2
| MHA Node Installing |
[
GO
](
./MHA/NODE/
)
| |
|
3
| MHA Node Installing |
[
GO
](
./MHA/NODE/
)
| |
ANSIBLE/VM/README.md
0 → 100644
View file @
b0019cf1
[
![logo
](
https://www.hongsnet.net/images/logo.gif
)
](https://www.hongsnet.net)
# Ansible 활용
> KVM Virtualization Based에서 VM Mantenance 작업을 수행한다.
# Table of Contents
| NO | ITEM | Content | 비고 |
| ------ | ------ | ------ | ------ |
| 1 | Virtualization Create |
[
GO
](
./VMC/
)
| |
ANSIBLE/VM/VMC/README.md
0 → 100644
View file @
b0019cf1
[
![logo
](
https://www.hongsnet.net/images/logo.gif
)
](https://www.hongsnet.net)
# Ansible을 Virtualization 구성
> KVM 기반의 Hypervisor에서 Virtual Machine에 대한 생성을 자동화 한다.
## 수행 내역
-
검증된 VM Image(.qcow2)를 KVM Hypervisor에 배포한다.
-
변수된 지정된 IP주소로 각 VM에 네트워크 및 호스트네임을 세팅을 진행한다.
-
각 VM에 root 패스워드를 세팅한다.
-
Playbook 수행완료 시 Slack으로 Push Alert을 보낸다.
## Inventory 설정
```
bash
# cat hosts
[
ALL_HOSTS]
172.16.0.100
managed_ip
=
172.16.0.100
des
=
"2020-12-03"
[
ALL_HOSTS_OK]
```
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로
**ALL_HOSTS_OK**
호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
## Host Variables 설정
```
bash
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass:
"사용자 패스워드"
ansible_become:
yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass:
"!root_패스워드"
ansible_python_interpreter: python2.7
```
다음 Playbook은 KVM Hypervisor(172.16.0.100)에
**총 3개의 VM을 생성**
한다.
## Playbook 설정
```python
---
-
name: Virtualization Install (KVM)
hosts: all
become: true
vars:
USER_NAME: demouser #사용자 아이디를 입력
SERVER1_IP: '172.16.0.200'
SERVER2_IP: '172.16.0.201'
SERVER3_IP: '172.16.0.202'
GATEWAY_IP: '172.16.254.1'
PASSWORD: "root 패스워드"
tasks:
-
name: Install VM GuestTools
yum: name={{ item }} update_cache=yes
with_items:
-
guestfish
-
libguestfs-tools
- name: VIRT Users Directory /root/VM-TEMP/CONFIGS
file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: 0755
with_items:
- /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1
- /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2
- /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3
- name: VIRT Users Files Copy
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: 0644
owner: root
group: root
with_items:
- {src: 'templates/Server1-ifcfg-eth0.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1/ifcfg-eth0'}
- {src: 'templates/Server1-ifcfg-eth1.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1/ifcfg-eth1'}
- {src: 'templates/Server1-hostname.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1/hostname'}
- {src: 'templates/Server2-ifcfg-eth0.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2/ifcfg-eth0'}
- {src: 'templates/Server2-ifcfg-eth1.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2/ifcfg-eth1'}
- {src: 'templates/Server2-hostname.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2/hostname'}
- {src: 'templates/Server3-ifcfg-eth0.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3/ifcfg-eth0'}
- {src: 'templates/Server3-ifcfg-eth1.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3/ifcfg-eth1'}
- {src: 'templates/Server3-hostname.j2', dest: '/root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3/hostname'}
- name: Server/Desktop VM XML Files Copy
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: 0600
owner: root
group: root
with_items:
- {src: 'templates/server1.xml.j2', dest: '/etc/libvirt/qemu/{{ USER_NAME }}-server1.xml'}
- {src: 'templates/server2.xml.j2', dest: '/etc/libvirt/qemu//{{ USER_NAME }}-server2.xml'}
- {src: 'templates/server3.xml.j2', dest: '/etc/libvirt/qemu//{{ USER_NAME }}-server3.xml'}
- name: VM Users Server Images Copy
shell: |
cp -rf /root/VM-TEMP/VMS/centos/7.8/centos78.qcow2 /var/lib/libvirt/images/{{ USER_NAME }}-server1.qcow2
chmod 600 /var/lib/libvirt/images/{{ USER_NAME }}-server1.qcow2
cp -rf /root/VM-TEMP/VMS/centos/7.8/centos78.qcow2 /var/lib/libvirt/images/{{ USER_NAME }}-server2.qcow2
chmod 600 /var/lib/libvirt/images/{{ USER_NAME }}-server2.qcow2
cp -rf /root/VM-TEMP/VMS/centos/7.8/centos78_20G.qcow2 /var/lib/libvirt/images/{{ USER_NAME }}-server3.qcow2
chmod 600 /var/lib/libvirt/images/{{ USER_NAME }}-server3.qcow2
- name: VM Users Server1 Configuration
shell: |
/usr/bin/virt-customize -a /var/lib/libvirt/images/{{ USER_NAME }}-server1.qcow2 \
--root-password password:{{ PASSWORD }} \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1/ifcfg-eth0:/etc/sysconfig/network-scripts/ \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1/ifcfg-eth1:/etc/sysconfig/network-scripts/ \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server1/hostname:/etc/
- name: VM Users Server2 Configuration
shell: |
/usr/bin/virt-customize -a /var/lib/libvirt/images/{{ USER_NAME }}-server2.qcow2 \
--root-password password:{{ PASSWORD }} \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2/ifcfg-eth0:/etc/sysconfig/network-scripts/ \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2/ifcfg-eth1:/etc/sysconfig/network-scripts/ \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server2/hostname:/etc/
- name: VM Users Server3 Configuration
shell: |
/usr/bin/virt-customize -a /var/lib/libvirt/images/{{ USER_NAME }}-server3.qcow2 \
--root-password password:{{ PASSWORD }} \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3/ifcfg-eth0:/etc/sysconfig/network-scripts/ \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3/ifcfg-eth1:/etc/sysconfig/network-scripts/ \
--copy-in /root/VM-TEMP/CONFIGS/{{ USER_NAME }}/Server3/hostname:/etc/
- name: reloaded the libvirtd
systemd:
state: reloaded
daemon_reload: yes
name: libvirtd.service
enabled: True
- name: VM NIC Attaching
shell: |
virsh attach-interface --domain {{ USER_NAME }}-server1 --type bridge --source br17216 --model virtio --config
sleep 2
virsh attach-interface --domain {{ USER_NAME }}-server1 --type bridge --source br17216 --model virtio --config
sleep 2
virsh attach-interface --domain {{ USER_NAME }}-server2 --type bridge --source br17216 --model virtio --config
sleep 2
virsh attach-interface --domain {{ USER_NAME }}-server2 --type bridge --source br17216 --model virtio --config
sleep 2
virsh attach-interface --domain {{ USER_NAME }}-server3 --type bridge --source br17216 --model virtio --config
sleep 2
virsh attach-interface --domain {{ USER_NAME }}-server3 --type bridge --source br17216 --model virtio --config
- name: reloaded the libvirtd
systemd:
state: reloaded
daemon_reload: yes
name: libvirtd.service
enabled: True
- name: Send notification message via Slack all options
local_action:
module: slack
token: TH9557E80/XXXXX/XXXXXXX
msg: "HOST: [ *{{ inventory_hostname }}* ], TITLE: [ *VM Setting Ansible Playbook* ] \nUSER: [ *{{ USER_NAME }}* ], VNC_PORT: [ *{{ VNC_PORT_CORE }}{{ VNC_PORT }}* ] *Completed!*"
channel: "#ansible"
username: "Ansible HOST on {{ inventory_hostname }}"
color: good
icon_url: "http://pds.hongsnet.net/images/ansible.png"
link_names: 0
```
`Virtualization 구성`에 대한 Playbook 분석
* [ ] 검증된 VM Image를 배포한다(copy, shell 모듈).
* [ ] questfish 툴을 이용하여, 실제 VM에 네트워킹/호스트네임/패스워드를 설정한다(shell 모듈).
* [ ] Jinja2 템플릿을 이용하여, Libvirtd의 XML을 설정한다.
## playbook 실행
```
bash
# ansible-playbook -i hosts vm_install.yml
```
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment