티스토리 뷰

Ansible

Ansible 총 정리

looeon 2024. 2. 15. 10:39

 

Vagrantfile

 

● vm.define 과 vm.name 은 중복되면 안된다

vm.define 설정한 내용
vm.name 에 설정한 내용

○ Ruby 언어로 되어있다

vb.gui = false 는 vagrant 실행시에 콘솔이 안뜬다

첫번째 랜카드는 자동으로 NAT 로 잡힌다

cfg.vm.provision 위까지의 내용은 H/W 내용

○ privileged: true 가 default 이며, root 권한으로 실행한다는 의미

cfg.vm.provision "shell", path:"ssh_conf.sh", privileged:true
# --- Ansible Server ---
Vagrant.configure("2") do |config|
	config.vm.define "ansible-server" do |cfg|
	# vagrant status 입력시 출력되는데 똑같은 이름이 있으면 안된다
	# 오류가 발생한다 ( destroy 로 확실하게 지워야한다
		# 변수 설정이 cfg이므로 cfg.으로 시작한다
		cfg.vm.box = "centos/7"
		cfg.vm.provider "virtualbox" do |vb|
			vb.name = "ansible-server"
			# virtualbox에 보이는 vm 이름
			vb.cpus = 2
			vb.memory = 4096
			vb.gui = false
		end
		cfg.vm.host_name = "control.example.com"
		# 리눅스에서 hostnamectl 사용했던 hostname >> 실제 장비 명
		cfg.vm.network "private_network", ip: "192.168.110.10"
		# 첫번째 랜카드는 자동으로 잡힌다 (NAT으로 잡힌다)
		# private_network == host-only
		cfg.vm.provision "shell", path:"ssh_conf.sh"
		cfg.vm.synced_folder "../data","/vagrant",disabled: true
		# virtual box에 있는 공유 폴더 기능
	end
# --- managed node 1 ---
	config.vm.define "managed-node1" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider "virtualbox" do |vb|
			vb.name = "node1"
			vb.cpus = 1
			vb.memory = 2048
			vb.gui = false
		end
		cfg.vm.host_name = "node1.example.com"
				cfg.vm.network "private_network", ip: "192.168.110.20"
				cfg.vm.provision "shell", path:"ssh_conf.sh"
				cfg.vm.synced_folder "../data","/vagrant",disabled: true
	end
# --- managed node 2 ---
	config.vm.define "managed-node2" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider "virtualbox" do |vb|
			vb.name = "node2"
			vb.cpus = 1
			vb.memory = 2048
			vb.gui = false
		end
		cfg.vm.host_name = "node2.example.com"
				cfg.vm.network "private_network", ip: "192.168.110.30"
				cfg.vm.provision "shell", path:"ssh_conf.sh"
				cfg.vm.synced_folder "../data","/vagrant",disabled: true
	end
# --- managed node 3 ---
	config.vm.define "managed-node3" do |cfg|
		cfg.vm.box = "centos/7"
		cfg.vm.provider "virtualbox" do |vb|
			vb.name = "node3"
			vb.cpus = 1
			vb.memory = 2048
			vb.gui = false
		end
		cfg.vm.host_name = "node3.example.com"
				cfg.vm.network "private_network", ip: "192.168.110.40"
				cfg.vm.provision "shell", path:"ssh_conf.sh"
				cfg.vm.synced_folder "../data","/vagrant",disabled: true
	end
end

 

● powershell 에서 vagrant 관련 명령어

vagrant init 프로비저닝을 위한 예제 스크립트 생성
vagrant up vagrant 파일을 읽어 들여 프로비저닝을 실행
vagrant halt vagrant에서 다루는 가상머신들을 종료
vagrant destroy 가상머신 삭제
vagrant ssh 가상머신에 ssh로 접속
vagrant provision 가상머신에 변경된 설정 적용
vagrant status 가상머신 상태 확인
vagrant box list 다운 받은 box 확인
vagrant box add 명칭 box 다운로드

 

○ 하위 디렉터리가 아닌 부모 디렉터리부터 찾아서 명령어 실행된다

 

◎ window 로 백업

PS C:\Users\soldesk\ansible_backup> sftp vagrant@192.168.110.10
sftp> ls
examples                vagrant_example.tar     vagrant_work.tar        work
sftp> pwd
Remote working directory: /home/vagrant
sftp> get vagrant_work.tar
Fetching /home/vagrant/vagrant_work.tar to vagrant_work.tar
/home/vagrant/vagrant_work.tar                     100%   40KB  13.3MB/s   00:00
sftp> get vagrant_example.tar
Fetching /home/vagrant/vagrant_example.tar to vagrant_example.tar
/home/vagrant/vagrant_example.tar                  100%   60KB  20.0MB/s   00:00

PS C:\Users\soldesk\ansible_backup> sftp opuser@192.168.110.10
sftp> ls
opuser_sample.tar   sample
sftp> get opuser_sample.tar
Fetching /home/opuser/opuser_sample.tar to opuser_sample.tar
/home/opuser/opuser_sample.tar                     100%   20KB   6.7MB/s   00:00
sftp> ls
opuser_sample.tar   sample
sftp> exit
PS C:\Users\soldesk\ansible_backup> ls


    디렉터리: C:\Users\soldesk\ansible_backup


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024-02-15  오전 10:58          20480 opuser_sample.tar
-a----        2024-02-15  오전 10:57          61440 vagrant_example.tar 
-a----        2024-02-15  오전 10:57          40960 vagrant_work.tar

 

● VM 삭제

PS C:\Users\soldesk\ansible\centos> vagrant halt
==> managed-node3: Attempting graceful shutdown of VM...
==> managed-node2: Attempting graceful shutdown of VM...
==> managed-node1: Attempting graceful shutdown of VM...
==> ansible-server: Attempting graceful shutdown of VM...
PS C:\Users\soldesk\ansible\centos> vagrant destroy
    managed-node3: Are you sure you want to destroy the 'managed-node3' VM? [y/N] y
==> managed-node3: Destroying VM and associated drives...
    managed-node2: Are you sure you want to destroy the 'managed-node2' VM? [y/N] y
==> managed-node2: Destroying VM and associated drives...
    managed-node1: Are you sure you want to destroy the 'managed-node1' VM? [y/N] y
==> managed-node1: Destroying VM and associated drives...
    ansible-server: Are you sure you want to destroy the 'ansible-server' VM? [y/N] y
==> ansible-server: Destroying VM and associated drives...

 

>> 그대로 남아있다

>> .vargrant 도 삭제

 

● 새로 만들기 전 내용 추가

cfg.vm.provision "shell",inline:"yum install -y ansible"
cfg.vm.provision "file",source:"ansible_env_ready.yml",
	destination: "ansible_env_ready.yml"
cfg.vm.provision "shell",inline: "ansible-playbook ansible_env_ready.yml"

추가 완료

 

 

▶ Vagrantfile 에 입력된 ansible_env-ready.yml 파일로 입력

( 저장 위치는 file과 동일 위치 )

▷ shell 모듈은 command 모듈과 같으나, command 처럼 디폴트가 아니다

lineinfile 모듈은 내용을 바로 추가할 수 있는 모듈

---
- name: setup for the ansible's environment
  hosts: localhost
  gather_facts: no
  tasks:
    - name: create vim env's directories & files
      shell: "{{item}}"
      loop:
        - "touch /home/vagrant/.vimrc"
        - "touch /home/vagrant/.bashrc"
    
    - name: install vim-enhanced and git
      yum:
        name: 
            - vim-enhanced
            - git
        state: present
    
    - name: configure .vimrc
      lineinfile:
        path: /home/vagrant/.vimrc
        line: autocmd FileType yaml setlocal ts=2 shiftwidth=2 sts=2 expandtab ai
    - name: configure .bashrc
      lineinfile: 
        path: /home/vagrant/.bashrc
        line: "{{item}}"
      loop:
       - "alias ans='ansible'"
       - "alias anp='ansible-playbook'"
       - "alias anc='ansible-playbook --syntax-check'"

 

▶ provision 부분이 제대로 인식이 안 되어 있다

>> up 이 아닌 provision 으로 vm.define 이름을 적어준다

PS C:\Users\soldesk\ansible\centos> vagrant provision ansible-server

ansible로 바로 설치가 안됐다

>> ansible 설치 위에 해당 29버전 설치 추가

cfg.vm.provision "shell",inline:"yum install -y centos-release-ansible-29.noarch"
cfg.vm.provision "shell",inline:"yum install -y ansible"

문제 없이 완료

>> 로그인한 상태로 provision 했으므로 source .bashrc 로 alias 적용

[vagrant@control ~]$ ans --version
-bash: ansilbe: command not found
[vagrant@control ~]$ source .bashrc
[vagrant@control ~]$ ans --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr  2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

 

 

▶nginx 설치 및 삭제

>> nginx.yaml

>>> root 권한 주는 become

---
- hosts: centos
  gather_facts: no
  become: yes
  tasks:
    - yum:
        name: epel-release
        state: latest
    - yum:
        name: nginx
        state: present
    - get_url:
        url: https://www.nginx.com
        dest: /usr/share/nginx/html
        mode: 0644
    - service:
        name: nginx
        state: started

 

▩ permission 오류

 

▶ -k 옵션 필요 ask-pass

>> 공개키 안했으므로 비밀번호 입력해서 넘어가야한다

[vagrant@control work]$ anp ngnx.yml -k

 

>> 사이트 띄워진다

 

>> 누르면 원래 nginx 홈페이지로 이동된다

 

 

▶ 삭제

>> ask-pass: yes 로 실행시 -k 옵션 빼도 된다

>>> 넣으면 ask-pass 로 실행이 안된다 그냥 빼야한다

- hosts: centos
  gather_facts: no
  become: yes
  ask-pass: yes
  tasks:
    - yum:
        name: epel-release
        state: absent
    - yum:
        name: nginx
        state: absent

 

▶ 시간 변경

- hosts: localhost
  gather_facts: no
  become: yes
  tasks:
    - timezone:
        name: Asia/Seoul

 

◎ NFS 클라이언트 구성

vagrant box add sysnet4admin/windows2016
vagrant box add generic/ubuntu2204

 

▶ vim 에서 한번에 블록 지정해서 이동시키기

vim 에서 visual mode 사용
블록지정 : Shift + v
화살표로 블록 크기 설정
ShiftWidth 설정 만큼 이동 : Shift < or >

 

▶ nfs.yaml

- hosts: localhost
  gather_facts: no

  tasks:
    - file:
        path: /home/vagrant/nfs_shared
        state: directory
        mode: 0755
    - become: yes
      lineinfile:
         path: /etc/exports
         line: /home/vagrant/nfs_shared 192.168.110.0/24(rw,no_root_squash,sync)
    - become: yes
      service:
         name: nfs
         state: restarted

- hosts: centos
  gather_facts: no

  tasks:
    - file:
        path: /home/vagrant/nfs
        state: directory
    - become: yes
      mount:
        path: /home/vagrant/nfs
        src: 192.168.110.10:/home/vagrant/nfs_shared
        fstype: nfs
        opts: nfsvers=4
        state: mounted

### /etc/exports 에 넣는 이유 : 마운트를 위해 잠깐 권한을 넣어주는 것

 

▩ opts: nfsvers=4  에서는 mount 오류 발생

>> 3 으로 바꾸면 된다

 

>> /etc/exports 에 2줄이 되어있었다

/home/vagrant/nfs_shared 192.168.110.0/24(rw,sync)
/home/vagrant/nfs_shared 192.168.110.0/24(rw,no_root_squash,sync)

 

 

● generic/ubuntu2204 의 node 4, node 5 를 추가한다

>> server, node {1..3} 이 있는 Vagrantfile 밑에 추가한다

>> ubuntu 는 provision 비밀번호가 필요없다??

# --- managed node 4 - ubuntu 22.04 --- 
	config.vm.define "managed-node4" do |cfg|
		cfg.vm.box = "generic/ubuntu2204"
		cfg.vm.provider "virtualbox" do |vb|
			vb.name = "node4"
			vb.cpus = 1
			vb.memory = 2048
			vb.gui = false
		end
		cfg.vm.host_name = "node4.example.com"
				cfg.vm.network "private_network", ip: "192.168.110.50"
				#cfg.vm.provision "shell", path:"ssh_conf.sh"
				cfg.vm.synced_folder "../data","/vagrant",disabled: true
	end
# --- managed node 5 - ubuntu 22.04 ---
	config.vm.define "managed-node5" do |cfg|
		cfg.vm.box = "generic/ubuntu2204"
		cfg.vm.provider "virtualbox" do |vb|
			vb.name = "node5"
			vb.cpus = 1
			vb.memory = 2048
			vb.gui = false
		end
		cfg.vm.host_name = "node5.example.com"
				cfg.vm.network "private_network", ip: "192.168.110.60"
				#cfg.vm.provision "shell", path:"ssh_conf.sh"
				cfg.vm.synced_folder "../data","/vagrant",disabled: true
	end

 

>> ansible_env_ready.yml 파일에도 node4,5 추가해준다

## blockinfile 은 여러 줄을 추가 할 때 사용한다

## path 는 mandatory 이고, block: | 는 각각 한줄 씩 처리한다는 뜻이다

    - name: add "/etc/hosts"
      blockinfile:
        path: /etc/hosts
        block: |
            192.168.110.20  node1.example.com   node1
            192.168.110.30  node2.example.com   node2
            192.168.110.40  node3.example.com   node3
            192.168.110.50  node4.example.com   node4
            192.168.110.60  node5.example.com   node5
    
    - name: add "/etc/ansible/hosts"
      blockinfile:
        path: /etc/ansible/hosts
        block: |
            [centos]
            node1
            node2
            node3
            [ubuntu]
            node4
            node5

ansible_env_ready.yml
0.00MB
Vagrantfile
0.00MB

 

>> node4 , node5 만 up 해준다

vagrant up managed-node4
vagrant up managed-node5

 

▩ key 잘 안 만들어진다

 

>> vagrant plugin 설치하면 빠르게 key 가 만들어진다

>>>> 근데 별 차이가 없다

vagrant plugin install vagrant-vbguest

 

>> provision

vagrant provision ansible-server

 

▩ fingerprint 수집 안되어서 오류 발생

>>> ssh node4 / ssh node5 로 해결

 

▶ nfs.yaml 에 ubuntu 그룹 추가

>> 밑부분에 hosts 에도 한번 여러개를 넣어줄 수 있다

- hosts:
    - centos
    - ubuntu
  gather_facts: no

  tasks:
    - file:
        path: /home/vagrant/nfs
        state: directory
    - become: yes
      mount:
        path: /home/vagrant/nfs
        src: 192.168.110.10:/home/vagrant/nfs_shared
        fstype: nfs
        opts: nfsvers=4
        state: mounted

 

▦ ubuntu 에는 mount-util 이 없다

 

>> ubuntu 는 yum, dnf 가 아니라, apt 를 사용해야 한다

vagrant@node4:~$ dnf list nfs
Command 'dnf' not found, but can be installed with:
apt install dnf
Please ask your administrator.

 

>> fact 변수 확인

ansible node5 -m setup -k > node5.fact

ansible_os_family: "Debian"
ansible_os_family: "RedHat"

 

▩ when 다음 변수는 " " 안쓰는 거였다... 오류 엄청 나옴...

- hosts: localhost
  gather_facts: no

  tasks:
    - file:
        path: /home/vagrant/nfs_shared
        state: directory
        mode: 0755
    - become: yes
      lineinfile:
         path: /etc/exports
         line: /home/vagrant/nfs_shared 192.168.110.0/24(rw,no_root_squash,sync)
    - become: yes
      service:
         name: nfs
         state: restarted

- hosts:
    - centos
    - ubuntu
  become: yes
  tasks:
    - apt:
        name: nfs-common
        update_cache: yes
        state: present
      when: ansible_facts.os_family == 'Debian'
    - yum:
        name: nfs-utils
        state: present
      when: ansible_facts.os_family == 'Redhat'
    - file:
        path: /home/vagrant/nfs
        state: directory
    - become: yes
      mount:
        path: /home/vagrant/nfs
        src: 192.168.110.10:/home/vagrant/nfs_shared
        fstype: nfs
        opts: nfsvers=4
        state: mounted

 

## 강사님이 하신 방법 ##

when: ansible_facts['os_family'] == "RedHat"

 

'Ansible' 카테고리의 다른 글

windows nginx 실행 안된다  (0) 2024.02.19
Ansible 총정리2  (0) 2024.02.16
Ansible 변수 추가내용  (0) 2024.02.14
yaml [ playbook ]  (0) 2024.02.13
Ansible module  (0) 2024.02.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함