kok202
Ansible - playbook

2019. 8. 23. 18:36[정리] 기능별 개념 정리/AWX

Ansible

  • 빌드된 파일을 다운받아서 특정 타겟 서버에 배포할 수 있다.
  • Ansible 은 파이썬으로 만들어졌다.

 

 

 

개념

  • 플레이북 : 작업 플로우
  • 인벤토리 : 타겟 서버들 (여러개의 호스트 서버를 하나의 그룹으로 묶을수 있다.)
  • : 처리해야하는 하나의 플로우
  • 워크플로우 : 잡의 Sequence 연결

 

 

 

서버에 openJDK 와 my-application 을 설치하는 플레이북의 디렉토리 구조 예시

/my-application-playbook/files/rsa.pub : host 서버와 통신을 하기 위한 공개키 저장공간
/my-application-playbook/group_vars :구조체 변수들의 집합
/my-application-playbook/inventory/host : host 서버들의 집합
/my-application-playbook/roles/{ ... }/tasks/main.yml : 앤서블 task를 작성하는 곳 
/my-application-playbook/roles/{ ... }/defaults/main.yml : 앤서블 task (tasks/main.yml) 에서 사용하는 변수들을 저장하는 곳
/my-application-playbook/my_application_dev.yml : 사용자가 ~ 태그로 작업을 요청하면 이러한 role 들을 이용해서 배포하라를 작성

 

 

 

ansible 사용자는 my-playbook 에 들어가서 다음과 같은 커맨드로 playbook 을 조작할 수 있다.

ansible-playbook my_application_dev.yml --tags setup
ansible-playbook my_application_dev.yml --tags pull --extra-vars '{"app_version”:”0.0.1-SNAPSHOT"}'
ansible-playbook my_application_dev.yml --tags start

태그 setup 은 openJDK 를 설치하는 내용을 작성해뒀다.

태그 pull 에는 넥서스에서 my-application.jar을 가져오는 내용을 작성해뒀다.

태그 start 에는 가져온 my-application.jar를 실행(배포)하는 내용을 작성했뒀다.

AWX 를 사용하면 위와 같이 커맨드를 입력해야하는 내용들을 웹에서 처리할 수 있다.

 

 

 

/my-application-playbook/my_application_dev.yml

- name: My application
  hosts: my-application-server
  serial: 1
  become: True
  vars:
    app_name: my-application
    app_jar: my-application.jar
    app_params: --spring.profiles.active=deployment
  roles:
    - { role: common, tags: ['setup'] }
    - { role: openJDK, tags: ['setup'] }
    - { role: my-application, tags: [‘pull’, ‘start’] }

 

 

 

/my-application-playbook/inventory/host

[my-application-server]
my-application-server.com

 

 

 

/my-application-playbook/inventory/host

ansible_ssh_user: kok202
server_account:
  group: kok202
  user: kok202

 

 

 

/my-application-playbook/common/tasks/main.yml

- name: create directories for openJDK, application
  file: path=/deployment/{{ item }} state=directory group={{ server_account.group }} owner={{ server_account.user }}
  become: yes
  with_items:
    - openJDK
    - application

- name: create directories for application
  file: path=/deployment/application/{{ app_name }} state=directory group={{ server_account.group }} owner={{ server_account.user }}

 

 

 

/my-application-playbook/openJDK/defaults/main.yml

openjdk_version: 8u212
openjdk_version_build: b04
openjdk_base_url: https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u212-b04/
openjdk_file: OpenJDK8U-jdk_x64_linux_hotspot_8u212b04.tar.gz
openjdk_home: /deployment/openJDK/java

 

 

 

/my-application-playbook/openJDK/tasks/main.yml

- name: Download openjdk tarball
  get_url: >
    url={{ openjdk_base_url }}/{{ openjdk_file }}
    dest=/tmp/{{ openjdk_file }}

- name: Unarchive openjdk tag.gz
  unarchive: >
    src=/tmp/{{ openjdk_file }}
    dest=/deployment/openJDK
    copy=no

- name: Create symbolic link for java
  file: >
    path={{ openjdk_home }}
    src=/deployment/openJDK/jdk{{openjdk_version}}-{{ openjdk_version_build }}
    state=link

 

 

 

/my-application-playbook/my-application/defaults/main.yml

java_home: /deployment/openJDK/java
jvm_xms: 2g
jvm_xmx: 2g
mavne_host: my-maven-host.com
app_params: --spring.profiles.active=development
app_artifact_repo: my-applicaiton-snapshot-repo
app_artifact_group: com.kok202.myapplication

 

 

 

/my-application-playbook/my-application/tasks/main.yml

- name: download application jar
  get_url: >
      url=http://{{ maven_host }}/service/local/artifact/maven/redirect?r={{ app_artifact_repo }}&g={{ app_artifact_group }}&a={{ app_name }}&v={{ app_version }}
      dest=/deployment/application/{{ app_name }}/{{ app_name}}-{{ app_artifact_version }}.jar
      force=yes
  when: app_version is defined
  tags:
    - pull

- name: start application
  command: java -jar /deployment/application/{{ app_name }}/
  tags:
    - start