본문 바로가기

과제

vagrant ansible-server

-- vagrant 구성

ansible-server

ansible-node01

ansible-node02

ansible-node03

 

--ansible

각 node01,02,03 에 nginx 서버를 설치 , nfs 클라이언트

server는 nfs 서버

 

ansible-server memory 3000

ansible-node01 memory 512

ansible-node02 memory 512

ansible-node03 memory 512

nfs서버  /home/vagrant/web_shared

nfs 클라이언트  /user/share/nginx/html/

/home/vagrant/web_shared 에 index.html 파일을 생성하여

http://node01의 IP주소
http://node02의 IP주소
http://node03의 IP주소

하면 본인 이름이 홈페이지에 나오도록

[vagrant@ansible-server ~]$ ansible all -m ping -k
SSH password:
200.200.200.147 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
200.200.200.148 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
200.200.200.149 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  
  #Ansible-Node01
  config.vm.define "ansible-node01" do |cfg|
   cfg.vm.box = "rockylinux/9"
	 cfg.vm.provider "vmware_workstation" do |vb|
    vb.memory = 512
   end
	 cfg.vm.host_name = "ansible-node01"
	 cfg.vm.network "public_network", ip: "200.200.200.147"
	 cfg.vm.network "forwarded_port", guest: 22, host: 60011, auto_correct: true, id: "ssh"
	 cfg.vm.synced_folder "../data", "/vagrant", disabled: true 
	 cfg.vm.provision "shell", inline: "setenforce 0"
  end
  
  #Ansible-Node02	 
  config.vm.define "ansible-node02" do |cfg|
   cfg.vm.box = "rockylinux/9"
   cfg.vm.provider "vmware_workstation" do |vb|
    vb.memory = 512
   end
	 cfg.vm.host_name = "ansible-node02"
	 cfg.vm.network "public_network", ip: "200.200.200.148"
	 cfg.vm.network "forwarded_port", guest: 22, host: 60012, auto_correct: true, id: "ssh"
   cfg.vm.synced_folder "../data", "/vagrant", disabled: true
   cfg.vm.provision "shell", inline: "setenforce 0"
 
  end

  #Ansible-Node03	 
  config.vm.define "ansible-node03" do |cfg|
   cfg.vm.box = "rockylinux/9"
	 cfg.vm.provider "vmware_workstation" do |vb|
    vb.memory = 512
   end 
	 cfg.vm.host_name = "ansible-node03"
	 cfg.vm.network "public_network", ip: "200.200.200.149"
	 cfg.vm.network "forwarded_port", guest: 22, host: 60013, auto_correct: true, id: "ssh"
 	 cfg.vm.synced_folder "../data", "/vagrant", disabled: true 
 	 cfg.vm.provision "shell", inline: "setenforce 0"
  end
  
# Ansible-server
  config.vm.define "ansible-server" do |cfg|
    cfg.vm.box = "rockylinux/9"
    cfg.vm.provider "vmware_workstation" do |vb|
      vb.vmx["sched.cpu.max"] = "50"
      vb.cpus = 2
      vb.memory = 3000
      vb.gui = true
      vb.allowlist_verified = true
    end
    cfg.vm.host_name = "ansible-server"
    cfg.vm.network "public_network", ip: "200.200.200.146"
    cfg.vm.network "forwarded_port", guest: 22, host: 60010, auto_correct: true, id: "ssh"
    cfg.vm.synced_folder "../data", "/vagrant", disabled: true
    cfg.vm.provision "shell", inline: "dnf install epel-release -y"
	  cfg.vm.provision "shell", inline: "dnf install ansible -y"
    cfg.vm.provision "shell", inline: "dnf install net-tools -y"
    
    # file
    cfg.vm.provision "file", source: "ansible_env_ready.yml", destination: "ansible_env_ready.yml"
    
    # provision
    cfg.vm.provision "shell", inline: "ansible-playbook ansible_env_ready.yml"
    cfg.vm.provision "shell", path: "add_sshd_auth.sh", privileged: false
   end     
end
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@200.200.200.147
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@200.200.200.148
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@200.200.200.149
---
- name: Install nginx on Rockylinux
  hosts: rocky
  gather_facts: no
  become: yes

  tasks:
    - name: install epel-release
      dnf:
        name: epel-release
        state: latest
    - name: install nginx web server
      dnf:
        name: nginx
        state: present
    - name: start nginx web server
      service:
        name: nginx
        state: started
        
 [vagrant@ansible-server ~]$ anp nginx_install.yml -k
SSH password:

PLAY [Install nginx on Rockylinux] *************************************************************************************

TASK [install epel-release] ********************************************************************************************
ok: [200.200.200.148]
ok: [200.200.200.149]
ok: [200.200.200.147]

TASK [install nginx web server] ****************************************************************************************
ok: [200.200.200.148]
ok: [200.200.200.149]
ok: [200.200.200.147]

TASK [start nginx web server] ******************************************************************************************
ok: [200.200.200.149]
ok: [200.200.200.148]
changed: [200.200.200.147]

PLAY RECAP *************************************************************************************************************
200.200.200.147            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
200.200.200.148            : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
200.200.200.149            : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
---
- name: Setup for nfs server
  hosts: localhost
  gather_facts: no

  tasks:
    - name: make nfs_shared directory
      file:
        path: /home/vagrant/web_shared
        state: directory
        mode: 0777                          

    - name: configure /etc/exports
      become: yes
      lineinfile:
        path: /etc/exports
        line: /home/vagrant/web_shared 200.200.200.0/24(rw,sync,no_root_squash)

    - name: nfs service restart
      become: yes
      service:
        name: nfs-server
        state: restarted

- name: Setup for nfs clients
  hosts: rocky
  gather_facts: no

  tasks:
    - name: mount point directory as client
      become: yes
      mount:
        path: /usr/share/nginx/html
        src: 200.200.200.146:/home/vagrant/web_shared
        fstype: nfs
        opts: nfsvers=3
        state: mounted
        
[vagrant@ansible-server ~]$ anp nfs.yml -k
SSH password:

PLAY [Setup for nfs server] ********************************************************************************************

TASK [make nfs_shared directory] ***************************************************************************************
ok: [localhost]

TASK [configure /etc/exports] ******************************************************************************************
ok: [localhost]

TASK [nfs service restart] *********************************************************************************************
changed: [localhost]

PLAY [Setup for nfs clients] *******************************************************************************************

TASK [mount point directory as client] *********************************************************************************
ok: [200.200.200.148]
ok: [200.200.200.147]
ok: [200.200.200.149]

PLAY RECAP *************************************************************************************************************
200.200.200.147            : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
200.200.200.148            : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
200.200.200.149            : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
 - name: Create and deploy index.html
   hosts: all
   become: yes
   tasks:
     - name: Create index.html
       copy:
         dest: "/usr/share/nginx/html/index.html"
         content: |
           <html>
    <head><title>Welcome to nginx!</title><meta charset="UTF-8"></head>
           <body>
           <center><h1>배지원</h1></center>
           <hr><center>nginx/1.20.1</center>
           </body>
           </html>
         mode: '0644'
 
[vagrant@ansible-server ~]$ anp create_index.yml -k
SSH password:

PLAY [Create and deploy index.html] ************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [200.200.200.149]
ok: [200.200.200.148]
ok: [200.200.200.147]

TASK [Create index.html] ***********************************************************************************************
changed: [200.200.200.147]
ok: [200.200.200.149]
ok: [200.200.200.148]

PLAY RECAP *************************************************************************************************************
200.200.200.147            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
200.200.200.148            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
200.200.200.149            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
--index.html이 node에 적용이 안돼서 수기로 node에 접속하여 수정
[vagrant@ansible-node01 html]$ sudo setenforce 0
[vagrant@ansible-node01 html]$ getenforce
Permissive
[vagrant@ansible-node01 html]$ exit
logout
Connection to 127.0.0.1 closed.
PS D:\vagrant_test> vagrant ssh ansible-node02
Last login: Fri Mar 29 01:08:46 2024 from 200.200.200.146
[vagrant@ansible-node02 ~]$ sudo setenforce 0
[vagrant@ansible-node02 ~]$ getenforce
Permissive
[vagrant@ansible-node02 ~]$ exit
logout
Connection to 127.0.0.1 closed.
PS D:\vagrant_test> vagrant ssh ansible-node03
Last login: Fri Mar 29 01:08:46 2024 from 200.200.200.146
[vagrant@ansible-node03 ~]$ sudo setenforce 0
[vagrant@ansible-node03 ~]$ getenforce
Permissive