본문 바로가기
  • 지요미의 IT성장일기
Ansible

Ansible - 옵션

by 지요미=P 2024. 2. 21.
728x90

 

--- 센토스 아파치 애드혹 관리 ---

ansible centos -m yum -a "name=httpd state=present" -k

httpd 설치함

 

하지만 기동은 안된 상태라서 centos에가면 curl 명령어가 되지 않는다.

 

ansible centos -m service -a "name=httpd state=started" -k

httpd 기동시켜주는 명령어!

 

접속테스트 해보았더니 된당!!!

(◦˘ З(◦’ںˉ◦)cнϋ♡

 

외부에서 접속해보기 위해 public ip로 테스트 해보았더니

요기도 접속이 완료 되었다!

 

 

그럼 웹페이지를 한번 꾸며볼까?

curl https://www.nginx.com/ -o index.html
ls

 

vi index.html

index 파일 내 타이틀을 수정해주었다.

 

ansible centos -m copy -a "src=index.html dest=/var/www/html/index.html" -k

copy 모듈을 이용해서 파일을 이동시켜주었음.

 

 

원래 이랬던 페이지가

 

⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩

이렇게 변경됨!

 내가 지정한 문구가 그대로 페이지에 띄워졌다!!!

 

 

ansible centos -m shell -a "systemctl status firewalld" -k

active 상태이긴 하나, 현재 규칙이 셋팅되어 있지는 않음

 

 

ansible centos -m service -a "name=httpd state=stopped" -k

httpd를 멈추어 보았움

바로 접속 불가능!

 

 

ansible centos -m shell -a "systemctl start httpd" -k

페이지를 다시 기동시키기 위한 명령어!!

우왕

다시 기동됨 ㅎㅎ

 

 

ansible centos -m shell -a "systemctl status firewalld" -k
ansible centos -m shell -a "systemctnsl start firewalld" -k

active상태인데 또 active 명령해보기

shell 명령어에 멱등성이 없을 수 있다.

멱등성이 없는 모듈의 경우 직관적이다.

 

ansible centos -m service -a "name=httpd state=started" -k

stop 명령어를 started로 변경해보자

 

 

 

 

--- 우분투 아파치 애드혹 관리 ---

ansible ubuntu -m apt -a "name=apache2 state=present" -k

설치하기!!

 

 

우분투 ip

 

 

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 centos -m yum -a "name=httpd state=absent" -k
ansible ubuntu -m apt -a "name=apache2 state=absent" -k

앞서 설치한 httpd와 apache2 모두 지우기!

 

 

 

멱등성!!!!

Ansible은 멱등성(Idempotency)이란 특징을 가집니다. 

이는 여러 번 적용해도 결과가 바뀌지 않으며, 수정된 부분이 있다면 그 부분만 새롭게 반영되는 특징이 있습니다.

 

이렇게 두번의 같은 명령을 수행했는데도 가능한 모습을 보면

이건 멱등성이 없는 것임!

그래서 동일한 IP가 두개나 등록되었다.

 

 

앤서블로 명령을 주었더니 '멱등성'에 의해 동일한 IP가 중복 등록되지 않는다.

 

그렇다면 멱등성이 있는 것만 사용하면 되지 않느냐 싶지만,

또 멱등성이 없는 것이 직관적이기 때문에 필요하다.

 

 

 

--- 플레이북 ---

플레이북 구조
YAML 형식으로 작성된 각각의 Playbook들은 하나 이상의 Play를 가지며

각각의 Play는 하나 이상의 task(Ansible 모듈)을 실행한다

 

 

--- 센토스, 우분투 아파치 설치 플레이북 ---

# mkdir playbook && cd $_
# vi apache_install.yml
- name: Install apache on centos
  hosts: centos
  vars:
    ansible_password: wldbsWkd01

  tasks:
    - name: install apache web server
      yum: name=httpd state=present # ansible centos -m yum -a "name=httpd state=present" -k
    - 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 enabled=yes

- name: Install apache on ubuntu
  hosts: ubuntu
  vars:
    ansible_password: wldbsWkd01

  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
      
# ansible-playbook apache_install.yml

이 안에 있는 name부분은 필수가 아니다.

 

 

 

centos / ubuntu 모두 다 nginx 페이지가 보여진다.

 

 

 

--- 센토스, 우분투 아파치 삭제 플레이북 ---

# vi apache_remove.yml
- name: Remove apache on centos
  hosts: centos  

  tasks:
    - name: remove apache web server
      yum: name=httpd state=absent

- name: Remove apache on ubuntu
  hosts: ubuntu
  
  tasks:
    - name: remove apache web server
      apt: name=apache2 state=absent

# ansible-playbook apache_remove.yml -k

 

 

 

--- 센토스, 우분투 NFS 설치 플레이북 ---

앤서블 IP -> 10.178.0.6

 

# vi nfs.yml
- name: Setup for nfs server
  hosts: localhost
  
  tasks:
    - name: make nfs_shared directory
      file: #path에 경로를 정의하면 해당 경로를 생성해줌
        path: /root/nfs_shared
        state: directory
        mode: 0777

    - name: configure /etc/exports
      lineinfile:
        path: /etc/exports
        line: /root/nfs_shared 10.178.0.6/20(rw,sync)

    - name: Install NFS
      yum:
        name: nfs-utils
        state: present

    - name: nfs service start
      service:
        name: nfs-server
        state: restarted
        enabled: yes

- name: Setup for nfs clients
  hosts: centos
  
  tasks:
    - name: make nfs_client directory
      file:
        path: /root/nfs
        state: directory

    - name: Install NFS
      yum:
        name: nfs-utils
        state: present

    - name: mount point directory as client
      mount:
        path: /root/nfs
        src: 10.178.0.6:/root/nfs_shared
        fstype: nfs
        state: mounted

- name: Setup for nfs clients U
  hosts: ubuntu
  
  tasks:
    - name: make nfs_client directory
      file:
        path: /root/nfs
        state: directory

    - name: Install NFS-U #ubuntu=U라고 지정
      apt:
        pkg: nfs-common
        state: present
        update_cache: yes #apt update

    - name: mount point directory as client
      mount:
        path: /root/nfs
        src: 10.178.0.6:/root/nfs_shared
        fstype: nfs
        opts: nfsvers=3
        state: mounted

# ansible-playbook nfs.yml -k

 

echo "Hello Chu" > /root/nfs_shared/test.txt
ansible centos -m shell -a "ls -al /root/nfs" -k
ansible centos -m shell -a "cat /root/nfs/test.txt" -k

 

 

 

마운트 정보 변경해보기

# vi nfs.yml
 path: /var/www/html
# ansible-playbook nfs.yml -k

 

 

ansible-playbook apache_install.yml

잉???

 

 

centos / ubuntu에 들어가서 umount 해주자!

 

 

마운트 해제 했으니,  다시 지정!!

# vi nfs.yml
 path: /var/www/html
# ansible-playbook nfs.yml -k

ansible-playbook nfs.yml -k

 

 

 tar -xvf /home/jyoon/sale.tar  -C /root/nfs_shared/
 ansible centos -m shell -a "setenforce 0" -k
 ansible centos -m shell -a "sestatus" -k
 vi /root/nfs_shared/index.html

 

 

 

 

--- 워드프레스 만들기 ---

vi /etc/ansible/hosts

 

# vi wordpress.yml
- name: Setup for webserver
  hosts: webserver
  
  tasks:
    - name: Install http
      yum:
        name: "{{ item }}"
        state: present
      with_items:
        - httpd
        - php
        - php-mysql
        - php-gd
        - php-mbstring
        - wget
        - unzip

    - name: Unarchive a file that needs to be downloaded (added in 2.0)
      ansible.builtin.unarchive: #압축을 풀어주는 모듈
        src: https://ko.wordpress.org/wordpress-4.8.2-ko_KR.zip
        dest: /var/www/html
        remote_src: yes

    - name: chown
      file: # chown -R apahce:apache /var/www/html/wordpress
        path: /var/www/html/wordpress
        owner: "apache"
        group: "apache"
        recurse: "yes"

    - name: web service restart
      service:
        name: httpd
        state: restarted

- name: Setup for dbserver
  hosts: dbserver
  
  tasks:
    - name: Install mariadb
      apt:
        pkg: mariadb-server
        state: present
        update_cache: yes

    - name: Install pymysql
      apt:
        pkg: python-pymysql
        state: present

    - name: Install pymysql
      apt:
        pkg: python3-pymysql
        state: present

    - name: set root password
      mysql_user:
        name: 'root'
        password: '{{ mysql_root_password }}'
        login_unix_socket: /var/run/mysqld/mysqld.sock
        state: present

    - name: edit file
      replace:
        path: /etc/mysql/mariadb.conf.d/50-server.cnf
        regexp: "bind-address"
        replace: "#bind-address"

    - name: db service restart
      service:
        name: mysql
        state: restarted

    - name: Create database
      mysql_db:
        db: wordpress
        login_unix_socket: /var/run/mysqld/mysqld.sock
        state: present

    - name: Create database user
      mysql_user:
        user: wpuser
        password: Test1752!
        priv: "wordpress.*:ALL,GRANT"
        host: '%' # wpuser@% 어디서나 접속이 가능
        login_unix_socket: /var/run/mysqld/mysqld.sock
        state: present
        
# anp wordpress.yml --extra-vars "mysql_root_password=Test1752!" -k

 

anp wordpress.yml --extra-vars "mysql_root_password=Test1752!"

-> 결국 fail!!

 

 

nfs쪽 충돌로 인해 자꾸 fail이 되어

마운트를 다시 풀어주기로ㅠ

 

 

ㄷㄷ..  python-pymysql이 없다고 하여...

아래와 같이 해당 패키지는 주석처리 해주기로!

 

vi wordpress.yml

 

1045, \"Access denied for user 'root'@'localhost' (using password: NO)\"

하지만 또 다른 이슈.....

 

 

728x90

'Ansible' 카테고리의 다른 글

Ansible - 인스턴스 설치(GCP에 함) 및 앤서블 명령어  (0) 2024.02.21
Ansible이란?  (1) 2024.02.21