스냅샷 찍기
다운로드받기
https://app.vagrantup.com/boxes/search?provider=virtualbox
vagrant를 위한 이미지 저장소 (box)
C:\Users\r2com>cd c:\HashiCorp
c:\HashiCorp>vagrant init
c:\HashiCorp>dir
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: EAF4-B115
c:\HashiCorp 디렉터리
2022-07-06 오전 10:47 <DIR> .
2022-07-06 오전 10:47 <DIR> ..
2022-07-06 오전 10:40 <DIR> Vagrant
2022-07-06 오전 10:47 3,080 Vagrantfile
1개 파일 3,080 바이트
3개 디렉터리 12,720,914,432 바이트 남음
c:\HashiCorp>notepad Vagrantfile
c:\HashiCorp>vagrant up
c:\HashiCorp>vagrant ssh
[vagrant@localhost ~]$
[vagrant@localhost ~]$ exit
logout
Connection to 127.0.0.1 closed.
c:\HashiCorp>vagrant destroy
vagrant는 virtualbox를 컨트롤하는 도구다.
vagrant init을 했는데 안되었음
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
사용자 변수 - Path에 추가해주고 cmd 재실행
인벤토리
--- 앤서블 마스터 설치 192.168.0.181
# yum install epel-release -y
# yum --enablerepo=epel -y install ansible
# ansible --version
앤서블 문서 사이트 https://docs.ansible.com/ansible/latest/index.html
앤서블 모듈 사이트 https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html
--- 앤서블의 애드혹 (AD-HOC(라틴어): 특별한 목적을 위해)
# vi /etc/ansible/hosts
[centos]
192.168.0.236
192.168.0.240
[ubuntu]
192.168.0.219
192.168.0.247
# ansible all -m ping
# ansible all -m ping -k #ask passwd
# ansible centos -m ping -k
# ansible ubuntu -m ping -k
# echo "192.168.0.140" >> inventory.list
# echo "192.168.0.143" >> inventory.list
# ansible all -i inventory.list -m ping -k
# ansible 192.168.0.140 -i inventory.list -m ping -k
# ansible all --list-hosts
# ansible all -m shell -a "uptime" -k
# ansible all -m shell -a "df -h" -k
# ansible all -m shell -a "free -h" -k
# ansible all -m user -a "name=kosa" -k
# ansible all -m shell -a "tail -n 1 /etc/passwd" -k
# ansible all -m user -a "name=kosa state=absent" -k
# ansible all -m shell -a "tail -n 1 /etc/passwd" -k
-m : module
ping 모든 대상 서버에 ping 모듈을 실행시킨다. ssh 접속여부와 파이썬이 실행되고 있는지 판단하는 모듈임. icmp 아님여~
[root@ansible-server ~]# cat /root/.ssh/known_hosts
192.168.0.236 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPk7oO4iSp5TWhR0lWVyks6Ir4TbRV9A0c91T5p1w5rtLVg0vl/yYVne8JGlvfPjhrIWs5TU9nHkg242oLg2N1A=
192.168.0.240 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPk7oO4iSp5TWhR0lWVyks6Ir4TbRV9A0c91T5p1w5rtLVg0vl/yYVne8JGlvfPjhrIWs5TU9nHkg242oLg2N1A=
192.168.0.219 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGnnMYvevGloenWMN0BmIkPuiNRgj1CRI8ot53x/odyYGgbxeKo/aIFyWOGlM6VZAQjfcIYBdLjS7I18AMGAHIw=
192.168.0.247 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGnnMYvevGloenWMN0BmIkPuiNRgj1CRI8ot53x/odyYGgbxeKo/aIFyWOGlM6VZAQjfcIYBdLjS7I18AMGAHIw=
known_host 에 등록확인해야함
# ansible all -m ping -k 을 통해 ssh 패스워드 넣어주면 로그인된다링
ping은 파이썬 상태를 보는 것임.
# echo "192.168.0.236" >> inventory.list
# echo "192.168.0.219" >> inventory.list // 커스텀리스트
# ansible all -i inventory.list -m ping -k
--- 센토스 아파치 애드혹 관리
# ansible centos -m yum -a "name=httpd state=present" -k
# curl https://www.nginx.com/ -o index.html
# ansible centos -m copy -a "src=index.html dest=/var/www/html/index.html" -k
# ansible centos -m service -a "name=httpd state=started" -k
# ansible centos -m shell -a "systemctl status firewalld" -k
# ansible centos -m shell -a "systemctl start firewalld" -k
# ansible centos -m shell -a "firewall-cmd --permanent --zone=public --add-service=http" -k
# ansible centos -m shell -a "firewall-cmd --reload" -k
# ansible centos -m service -a "name=httpd state=stopped" -k
# ansible centos -m shell -a "systemctl stop firewalld" -k
# ansible centos -m yum -a "name=httpd state=absent" -k
--- 우분투 아파치 애드혹 관리
# ansible ubuntu -m apt -a "name=apache2 state=present" -k
# curl https://www.nginx.com/ -o index.html
# ansible ubuntu -m copy -a "src=index.html dest=/var/www/html/index.html" -k
# ansible ubuntu -m service -a "name=apache2 state=stopped" -k
# ansible ubuntu -m service -a "name=apache2 state=started" -k
# ansible ubuntu -m apt -a "name=apache2 state=absent" -k
--- 멱등성
앤서블은 멱등성(Idempotency)이란 특징을 가집니다. 이는 여러 번 적용해도 결과가 바뀌지 않으며, 수정된 부분이 있다면 그 부분만 새롭게 반영되는 특징이 있습니다.
# echo "172.16.0.100" >> inventory.list
# cat inventory.list
# echo "172.16.0.100" >> inventory.list
# cat inventory.list
# ansible localhost -c local -m lineinfile -a "path=inventory.list line=172.16.0.200"
# cat inventory.list
# ansible localhost -c local -m lineinfile -a "path=inventory.list line=172.16.0.200"
# cat inventory.list
--- ssh key 활용
# ssh-keygen -t rsa // 키 생성
# ssh-copy-id root@192.168.0.140
# ssh-copy-id root@192.168.0.143
--- 플레이북 구조
YAML 형식으로 작성된 각각의 Playbook들은 하나 이상의 Play를 가지며, 각각의 Play는 하나 이상의 task(앤서블 모듈)을 실행한다
--- 센토스, 우분투 아파치 설치 플레이북
# vi apache_install.yml
- name: Install apache on centos
hosts: centos
gather_facts: no
tasks:
- name: install apache web server
yum: name=httpd state=present
- name: upload default index.html for web server
get_url: url=https://www.nginx.com dest=/var/www/html/ mode=0644
- name: start apache web server
service: name=httpd state=started enalbed=yes
- name: Install apache on ubuntu
hosts: ubuntu
gather_facts: no
tasks:
- name: install apache web server
apt: name=apache2 state=present
- name: upload default index.html for web server
get_url: url=https://www.nginx.com dest=/var/www/html/ mode=0644
- name: start apache web server
service: name=apache2 state=started enalbed=yes
# ansible-playbook apache_install.yml -k
--- 센토스, 우분투 아파치 삭제 플레이북
# vi apache_remove.yml
- name: Remove apache on centos
hosts: centos
gather_facts: no
tasks:
- name: remove apache web server
yum: name=httpd state=absent
- name: Remove apache on ubuntu
hosts: ubuntu
gather_facts: no
tasks:
- name: remove apache web server
apt: name=apache2 state=absent
# ansible-playbook apache_remove.yml -k