posted by 귀염둥이채원 2019. 3. 18. 15:10

ansible에서는 split()을 사용하여 문자열을 분할이 가능하다.

split()은 jinja2 필터가 아니고, python 함수입니다.


# example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- hosts: all
  vars:
    test: "This single line should be split based on white space"
  tasks:
  - debug:
      msg: "{{ test.split() }}"
 
output
------
ok: [localhost] => {
    "msg": [
        "This"
        "single"
        "line"
        "should"
        "be"
        "split"
        "based"
        "on"
        "white"
        "space"
    ]
}
cs


# jinja2 filter

http://jinja.pocoo.org/docs/2.10/templates/#filters


# ansible filter

https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#playbooks-filters


# 참고 사이트

http://www.mydailytutorials.com/how-to-split-strings-and-join-them-in-a%E2%80%8Bnsibl%E2%80%8Be/

'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
ansible source build  (0) 2019.01.29
posted by 귀염둥이채원 2019. 2. 1. 15:54

ansible role은 ansible task의 공유와 재사용을 가능하게 해준다.

작업 수행에 필요한 모든 지원 가능한 파일, 변수, 템플릿, 핸들러가 Playbook 작업이 포함됩니다.

role은 재사용 및 공유 할 수있는 완전한 자동화 단위입니다.


role은 워크플로우를 자동화하는데 필요한 모든 파일, 변수, 핸들러, Jinja 템플릿 및 작업을 포함하는 디렉토리 구조입니다.

README.md

defaults/

    main.yml

files/

handlers/

    main.yml

meta/

    main.yml

tasks/

    main.yml

templates/

tests/

    inventory

    test.yml

vars/

    main.yml 



ansible-galaxy 명령어를 이용해서 test-role-1이라는 role template을 생성하는 방법입니다.

[ansible@1ff25a8ed818 test_role]$ ansible-galaxy init test-role-1

- test-role-1 was created successfully

[ansible@1ff25a8ed818 test_role]$ tree

.

└── test-role-1

    ├── defaults

    │   └── main.yml

    ├── files

    ├── handlers

    │   └── main.yml

    ├── meta

    │   └── main.yml

    ├── README.md

    ├── tasks

    │   └── main.yml

    ├── templates

    ├── tests

    │   ├── inventory

    │   └── test.yml

    └── vars

        └── main.yml 


아래 명령으로 ansible-playbook 테스트가 가능하다.

[ansible@1ff25a8ed818 test_role]$ ansible-playbook -i test-role-1/tests/inventory test-role-1/tests/test.yml


# 참고 사이트

https://galaxy.ansible.com/docs/finding/content_types.html#ansible-roles

https://galaxy.ansible.com/docs/contributing/creating_role.html

https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html?highlight=roles&extIdCarryOver=true&sc_cid=701f2000001OH7YAAW

'Tool > ansible' 카테고리의 다른 글

ansible에서 문자열 split 방법  (0) 2019.03.18
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
ansible source build  (0) 2019.01.29
posted by 귀염둥이채원 2019. 2. 1. 15:53

# Handlers: Running Operations On Change

- task의 맨 뒤에 notify action 설정(handler의 이름으로 호출)

- 여러 번 조건을 만족해도 단 한번만 실행됨

- handler는 특별한 task의 list이며 이름으로 참조됨

- 대개 service restart 등에 쓰임


handler는 변경이 있을 때 작업을 수행하는 것이다.

'notify' action은 play의 각 task들이 끝날때 시작된다.

여러 작업으로 알림을 받더라도 한번만 트리거된다.


예를 들어, apche의 여러 설정 파일들이 변경된 경우 apache를 재시작해야합니다.

apache는 불필요한 재시작을 피해기 위한 한번만 재시작합니다.


다음은 /etc/foo.conf 파일이 변경된 경우,

memchched, apache를 재기동하는 예제입니다.

- name: template configuration file

  template:

    src: template.j2

    dest: /etc/foo.conf

  notify:

     - restart memcached

     - restart apache 



notify task 섹션에 나열된 항목을 핸들러라고합니다.

# example handlers section 

handlers:

    - name: restart memcached

      service:

        name: memcached

        state: restarted

    - name: restart apache

      service:

        name: apache

        state: restarted 


# 참고 사이트

https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html

https://moonstrike.github.io/ansible/2016/09/22/Ansible-Playbooks.html

'Tool > ansible' 카테고리의 다른 글

ansible에서 문자열 split 방법  (0) 2019.03.18
ansible role template 생성하기  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
ansible source build  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 18:19

Ansible은 기본적으로 play를 병렬로 실행한다.

Rolling Update를 수행하려면 serial 키워드를 사용하면 된다.


serial 키워드는 한 번에 얼마나 많은 서버에 명령을 수행할지 알려줍니다.

serial 키워드를 지정하지 않으면 구성 파일에 지정된 기본 fork 한도까지 병렬 처리합니다.


serial keyword를 이용한 rolling update

 - name: test play

  hosts: webservers

  serial: 1

  gather_facts: False

  tasks:

  - name: task one

    comand: hostname

  - name: task two

    command: hostname


# 참고 사이트

https://docs.ansible.com/ansible/latest/user_guide/playbooks_delegation.html

https://stackoverflow.com/questions/27315469/ansible-how-to-sequentially-execute-playbook-for-each-host



'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
ansible-vault를 이용한 암호화  (0) 2019.01.29
ansible source build  (0) 2019.01.29
fail module 사용법 정리  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 18:18

Ansible Vault는 패스워드, 키와 같은 보안에 민감한 파일들을 암복호화해주는 기능이다.
Ansbile에서 사용하는 모든 구조화된 데이터 파일을 암호화 할수 있다.
참고로 ansible을 설치하면 ansible-vault도 설치가 된다.

# ansible-vault 

 Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]

encryption/decryption utility for Ansible data files

Options:
--ask-vault-pass ask for vault password
-h, --help show this help message and exit
--new-vault-id=NEW_VAULT_ID
the new vault identity to use for rekey
--new-vault-password-file=NEW_VAULT_PASSWORD_FILES
new vault password file for rekey
--vault-id=VAULT_IDS the vault identity to use
--vault-password-file=VAULT_PASSWORD_FILES
vault password file
-v, --verbose verbose mode (-vvv for more, -vvvv to enable
connection debugging)
--version show program's version number and exit

See 'ansible-vault <command> --help' for more information on a specific




# 암호화된 파일을 생성하기
$ ansible-vault create foo.yml

# 암호화된 파일 수정하기
$ ansible-vault edit foo.yml

# 암호화된 파일의 패스워드 변경하기
$ ansible-vault rekey foo.yml

# 암호화되지 않은 파일을 암호화
$ ansible-vault encrypt foo.yml

# 암호화된 파일의 복호화
$ ansible-vault decrypt foo.yml

# 암호화된 파일의 내용 보기
$ ansible-vault view foo.yml


# ansible-vault를 사용해보기
1. hosts 파일을 암호화
[test@1ff25a8ed818 dse]$ ls
common_vars files group_vars hosts play.yml README.md roles


[test@1ff25a8ed818 dse]$ ansible-vault encrypt hosts

New Vault password: test
Confirm New Vault password: test
Encryption successful


2. 암호화된 hosts 파일 내용 확인
[test@1ff25a8ed818 dse]$ ansible-vault encrypt hosts
New Vault password: test
Confirm New Vault password: test
Encryption successful
[test@1ff25a8ed818 dse]$ ansible-vault view hosts


3. playbook 실행하기
ansible-playbook 실행시 --ask-vault-pass 옵션을 넣어주면 된다.
[test@1ff25a8ed818 dse]$ ansible-playbook --ask-vault-pass -i hosts play.yml -t install
Vault password:

파일에 vault password를 저장해서 사용이 가능하다.
[test@1ff25a8ed818 dse]$ cat vault_pass.txt
test
[test@1ff25a8ed818 dse]$ ansible-playbook -i hosts play.yml -t install --vault-password-file=vault_pass.txt


# 참고 사이트
https://docs.ansible.com/ansible/2.5/user_guide/vault.html

'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible source build  (0) 2019.01.29
fail module 사용법 정리  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 18:15

CentOS에서 ansible source build 방법을 정리한다.


$ yum install epel-release
$ yum install python-pip
$ pip install paramiko PyYAML jinja2 httplib2
$ git clone https://github.com/ansible/ansible.git --recursive
$ cd ./ansible
$ git checkout tags/v2.4.2.0-1
$ source ./hacking/env-setup


# 참고 사이트
https://docs.ansible.com/ansible/2.7/installation_guide/intro_installation.html
https://www.lesstif.com/pages/viewpage.action?pageId=22052879

'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
fail module 사용법 정리  (0) 2019.01.29
posted by 귀염둥이채원 2019. 1. 29. 18:14

when 조건에 만족하는 경우,

message에 정의된 내용을 출력해준다.


# example

# Example playbook using fail and when together

- fail:

    msg: "The system may not be provisioned according to the CMDB status."

  when: cmdb_status != "to-be-staged" 


- name: fail the play if the previous command did not succeed

  fail:

    msg: "the command failed"

  when: "'FAILED' in command_result.stderr" 


# 참고 사이트

https://docs.ansible.com/ansible/latest/modules/fail_module.html

https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html

https://ansible-manual.readthedocs.io/en/v1.8.4-doc/playbooks_error_handling.html

'Tool > ansible' 카테고리의 다른 글

ansible role template 생성하기  (0) 2019.02.01
ansible handler란?  (0) 2019.02.01
serial keyword를 이용한 rolling update  (0) 2019.01.29
ansible-vault를 이용한 암호화  (0) 2019.01.29
ansible source build  (0) 2019.01.29