레이블이 ansible-playbook인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ansible-playbook인 게시물을 표시합니다. 모든 게시물 표시

2019년 10월 28일 월요일

ansible roles 작성

처음 ansible 시작은 
누가 하라고해서 한게 아니다. 
내가 해야할 작업량이 많고, 반복적인 작업을 
각각 서버마다 하려다 보면 시간도 많이 소비되고, 
그것만큼 흔히 말하는 노가다(?) 작업이 따로 없다. 

그래서 나는 기존에 ansible을 약간 알고 있었지만, 써야 할 필요성을 느꼈다.
왜냐면, 컴퓨터는 나보다 더 일을 잘하기 때문에!!!

무작정 시작하였다. 지금 보면 너무 무식한 방법이였던 것 같다. 
ex) 톰캣을 설치하는 playbook 

---
- hosts: localhost
remote_user: root
vars_prompt:
- name: version
prompt: "Please select Tomcat connector Version Default="
private: no
default: 1.2.46

tasks:
- name: download archive
get_url:
url: http://mirror.apache-kr.org/tomcat/tomcat-connectors/jk/tomcat-connectors-{{ version }}-src.tar.gz
dest: /tmp/tomcat-connectors-{{ version }}-src.tar.gz

- name: Unarchive tomcat-connectors-{{ version }}-src.tar.gz
unarchive:
src: /tmp/tomcat-connectors-{{ version }}-src.tar.gz
dest: /tmp/
- name: find apxs
command: find /home/ansible/ -name apxs -exec readlink -f {} \;
register: find_contents
- name: Tomcat Connector Source Compile
command: "{{ item }} chdir=/tmp/tomcat-connectors-{{ version }}-src/native"
with_items:
- ./configure --with-apxs={{ find_contents.stdout }}
- /bin/make
- /bin/make install




위와 같은 yaml 파일을 매번 만들어야 했고 
나중엔 파일이름이 헛갈리고 관리가 안되었기 때문에 
재사용성과 관리를 고려해 

roles 기반으로 작성하기로 하였다.
이름대로 roles(역할) 기반으로 바꾸는 작업이다. 

동일한 소스는 아니지만 다음과 같이 변경하였다.

roles
└── installation
    ├── files
    │   ├── catalina.properties
    │   ├── server.xml
    │   ├── shutdown.sh
    │   └── start.sh
    ├── tasks
    │   ├── init_dir.yml
    │   ├── main.yml
    │   ├── rm_dir.yml
    ├── templates
    │   └── env.sh
    └── vars
        └── main.yml

위에는 files, tasks, templates, vars 밖에 없지만 기본적인 roles로 작성시 아래와 같은 구조를 가진다.

default: 기본 변수 설정
files: 노드에 배포할 파일 위치
handlers: service module 을 처리하며 notify와 함께 사용 가능
meta: roles에 대한 정보, 호환버전 등 메타 데이터 정의
tasks: 수행할 작업의 목록 (각 노드에 처리해야할 작업들)
templates: 노드에 배포할 템플릿 파일 위치 (jinja2 사용하지만 다른 것도 가능한 거 같음)
vars: 작업 수행 시 사용할 변수들에 대한 정의

main.yml 파일을 호출하여 사용되며, 

roles
└── installation <-- 여기에 제품이름을 넣는 것이 편함 (개인차이있음)


roles을 처음에 사용할 때는 더 어려웠다. 
하지만 지금은 roles 로만 테스트한다. 

처음 접근이 어려워도 한번 해보는것을 추천

끝 감사합니다. 



2019년 6월 20일 목요일

ansible playbook apache httpd source compile

아파치를 단순 패키지 설치해서 사용 할 수도 있지만,
소스컴파일을 할 경우 ansible playbook 을 만들어 보았다
서버가 웹이 연결된다는 가정 하에 작성하였다.

---
- hosts: localhost
  remote_user: root
  vars_prompt:  # 버전을 선택하기 위해 사용
    - name: version
      prompt: "Please select Apache HTTPD Version Default="
      private: no
      default: 2.4.39

    - name: prefix # 설치 경로를 지정하는 부분
      prompt: "Please select Apache install directory?"
      private: no

  tasks:
  - name: download archive # 파일을 다운로드 하는 부분
    get_url:
      url: http://archive.apache.org/dist/httpd/httpd-{{ version }}.tar.gz
      dest: /tmp/httpd-{{ version }}.tar.gz


  - name: Unarchive /tmp/httpd-{{ version }}.tar.gz # 아카이브 파일을 다운로드 받았다면  아카이브 파일을 푼다.    
      unarchive:
      src: /tmp/httpd-{{ version }}.tar.gz
      dest: /tmp/httpd-{{ version }}

  - name: Apache Source Compile # 소스 컴파일 하는 부분인데 기본적으로 /tmp 경로에 파일을 만든다.


    command: "{{ item }} chdir=/tmp/httpd-{{ version }}"
    with_items:
    - ./configure --prefix={{ prefix }} --enable-expires --enable-headers --enable-mime-magic --enable-proxy --enable-rewrite --enable-so --enable-ssl --enable-vhost-alias
    - /bin/make
    - /bin/make install




서버에 따라 인스톨 과정이 좀 다를 거고, /tmp경로 이외 다른 경로는 하드코딩해야한다.

2019년 6월 19일 수요일

Ansible-playbook 패키지, 계정, 그룹 추가 플레이 북

서버 대수가 적으면 크게 문제가 되진 않지만 대수가 많으면 명령어 각각 치는 것도 어려운 뿐더러, 휴먼 에러(오타)가 발생하는 경우가 많다.
그래서 ansible playbook을 통해 한번에 처리 한다.


---
- hosts: localhost
  remote_user: root
  vars_prompt:  # 패키지 설치 할것인지 아닌지 확인
    - name: select
      prompt: "Do you want to install(present) packages? default="
      private: no
      default: present

    - name: group_name # 그룹을 추가할 것인지 아닌지 확인
      prompt: "Do you want to create group? default group_name="
      private: no
      default: mwadm

    - name: user_name # 계정을 생성할지 말지 확인
      prompt: "Do you want to create user? default user_name="
      private: no
      default: mwadm

    - name: user_home # 계정 생성이 후 계정 홈 경로 설정 할지 확인
      prompt: "Do you want to {{ user_name }} home diretory? default user_home= "
      private: no
      default: /home/{{ user_name }}

  tasks:
  - name: install packages = apr-devel, apr-util-devel, openssl-devel, pcre-devel
    yum:
      name:
          - apr-devel
          - apr-util-devel
          - openssl-devel
          - pcre-devel
      state: "{{ select }}"

  - name: Add the group
    group:
      name: "{{ group_name }}"
      state: "{{ select }}"

  - name: Add the user
    user:
      name: "{{ user_name}}"
      password: "{{ user_name}}"
      group: "{{ group_name }}"
      state: "{{ select }}"
      shell: /bin/bash
      createhome: yes
      home: "{{ user_home }}"
      remove: yes

프롬프트에 present를 입력하면 전체가 다 실행되고, absent를 입력하면 rollback 된다. 하지만 완벽하지 않기 때문에 보완이 필요하다.