scrtipt_dist]# ansible-playbook dist.yml

PLAY [all] ******************************************************************************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************************************
fatal: [서버 아이피 ]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 서버 아이피closed.\r\n", "module_stdout": "  File \"/root/.ansible/tmp/ansible-tmp-1556259206.06-242213350336107/AnsiballZ_setup.py\", line 39\r\n    with open(module, 'wb') as f:\r\n            ^\r\nSyntaxError: invalid syntax\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
        to retry, use: --limit @/root/ansible/scrtipt_dist/dist.retry

PLAY RECAP ******************************************************************************************************************************************************************
1.234.83.50                : ok=0    changed=0    unreachable=0    failed=1    skipped=0  

 

 

위와같은 에러가 발생

 

원인은 파이썬 버전이 낮아서 그렇다고 한다.

엔서블 2.4 버전부터는 파이썬 2.4/2.5 버전에 대한 지원을 하지 않는다고 한다. 따라서 파이썬 2.6버전 이상으로 올려야 된다.

 

위의 내용까지가 구글링하면 깃헙이나 스택오버플로우에 나왔던 내용이다... 한글문서로도 있었고...

근데 클라이언트의 파이썬 버전까지 맞춰야하는줄은 몰랐다.

 

엔써블 처음 접할 때 클라이언트는 ssh 접속만 되면 된다했건만... 여튼...

클라이언트(cent5버전)에 yum 으로 파이썬 2.6 설치(기존 파이썬은 냅두고...)후

엔써블 옵션을 ansible_python_interpreter=/usr/bin/python2.6 추가하였더니 잘 된다.

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

ansible 공부한 모듈들 정리  (0) 2019.05.02
ansible - 디렉토리 구조  (0) 2019.05.02
ansible-3 playbook  (0) 2019.04.25
ansible-2 hosts(그룹), 멱등성  (0) 2019.04.22
ansible-1  (0) 2019.04.10

playbook 이란

각본이라고 나오는데 작업계획서 ??같은거다.

예를들어 서버에 apache를 설치할 때

1.아파치를 다운로드 받고

2.압축풀고

3.소스설치하고 등등

작업들을 나열한 파일(이름.yml)을 플레이북이라 하고 playbook에 입력돼있는 모듈, 작업들을 순차적으로 진행한다.

yaml로 짜여져있어서 첫줄에는 --- 을 적어야한다.

 

그리고 -name: 작업이름을 적어준다. 여기서 : 이거 뒤에 스페이스로 한칸 뛰어야한다. 야믈 문법은 계속 공부하면서 읶혀야할듯

##name은 필수가 아니다. 다만 무조건 적는 습관을 들이자. playbook 실행시 어느 구간이 작업되고 있는지 확인할 수 있고 다른사람이 볼때도 쉽게 알아야 하니까.

 

 

아래는 /root/test.txt 라는 파일을 /root/test.txt_ori로 옮기고(만약 /root/test.txt가 없을경우는 무시)

/root/ansible/template/test.j2를 /root/test.txt로 업로드하는 플레이북이다.

 

--- ## 첫줄은 무조건 --- 적어줘야한다. yml 명시
- hosts: all ## 작업 대상은 /etc/ansible/hosts에 적혀있는 모든 서버들, : 땡땡 뒤에는 므조건 스페이스로 한칸 띄어줘야 한다. 
  remote_user: root  ##맨앞에는 스페이스로 두칸 띄어주고
  tasks: ##마찬가지로 여기도 맨앞에는 스페이스로 두칸 띄어주고
  - name: centos 5 version mv test.txt test.txt_ori   
    shell: bash -c 'mv /root/test.txt /root/test.txt_ori'   ###이번에는 4칸. 들여쓰기 해줘야됨. / root/test.txt 라는 파일을 /root/test.txt_ori로 옮긴다.
    when: ansible_distribution == "CentOS" and ansible_distribution_major_version == '6' ###서버 os가 centos 6버전일때만
    ignore_errors: True ###/root/test.txt 가 서버에 없으면 에러발생하고 그다음작업 진행을 안한다. ignore_errors:True 해야지 /root/test.txt 가 없어도 무시하고 다음작업을 진행한다.
  - name: centos 5 version new test.txt upload | Template test.txt
    template: src="/root/ansible/template/test.j2" dest="/root/test.txt" force=yes owner=root group=root mode="0644" ##test.txt 새로 업로드

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

ansible - 디렉토리 구조  (0) 2019.05.02
ansible- error  (0) 2019.04.26
ansible-2 hosts(그룹), 멱등성  (0) 2019.04.22
ansible-1  (0) 2019.04.10
ansible 공부  (0) 2018.10.10

그룹관리

/etc/ansible/group_vars 하위에다가 그룹-그룹 그룹-변수 지정도 가능하다.

ansible]# cat /etc/ansible/hosts              
[nginx]
1.1.1.1         ansible_user=root       ansible_ssh_pass='qlqjs'
[apache]
2.2.2.2         ansible_user=root       ansible_ssh_pass='qlqjs'

파일 내용은 위와같고

ansible]# ansible all -m shell -a "df -h" --list-hosts
  hosts (2):
    1.1.1.1 
    2.2.2.2

 

ansible]# ansible nginx -m shell -a "df -h"   
1.1.1.1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       235G   37G  187G  17% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sda1       200M  120M   70M  64% /boot

 

ansible]# ansible all -m shell -a "df -h"     
2.2.2.2 | FAILED | rc=-1 >>
Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

1.1.1.1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       235G   37G  187G  17% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
/dev/sda1       200M  120M   70M  64% /boot

 

##
-m 옵션은 어떤 모듈을 선택할지..

yum, service, shell등 많다. -m 옵션의 기본값은 shell 이다. 다만 남들이 좀 더 보기 편하게 shell도 써주기

다만 위 명령들은 ansible 단일명령? 뭐 그런느낌이다. 에드혹이라고 하는듯. 대부분 플레이북을 이용해 사용한다.

-------여기까지가 가장 기본적인 ansible 사용법------------

 

----멱등성-----

엔서블하면 멱등성이 꼭 나온다.
멱등성이란 연산을 여러번 적용해도 결과가 달라지지 않는 성질인데 엔서블이 멱등성을 지원한다.
난 이부분이 처음에 굉장히 헷갈렸다. 도대체 어떻게 무조건 값이 같을 수 있지 ??근데 최대한 멱등성을 지원하려고 노력한다는거지(대부분의 모듈들이) 멱등성을 지원하지 않을수도 있다. 

여튼.. 멱등성이 뭔지 예를들자면 lineinfile 이란 모듈이 있다. 이 모듈은 echo "문구" >> 파일.txt 와 같이 파일에 내용을 추가하는 모듈인데...ansible -m lineinfile "path=test.txt line=test11" 이런식으로 애드혹를 입력할경우 test.txt 하단에 test11이라는 구문이 추가된다.  근데 사람이 실수로 ansible -m lineinfile "path=test.txt line=test11" 이런 명령어를 두번 넣었을경우 lineinfile은 멱등성을 지원하기 때문에 해당 파일에 test11 이 두줄 추가 되지 않고 한줄만 추가된다. 

반대로 shell 이라는 모듈을 통해 입력을 하면 당연히 test11이 두줄 추가 돼겠지. 이경우는 멱등성이 지원되지 않은거다.

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

ansible - 디렉토리 구조  (0) 2019.05.02
ansible- error  (0) 2019.04.26
ansible-3 playbook  (0) 2019.04.25
ansible-1  (0) 2019.04.10
ansible 공부  (0) 2018.10.10

+ Recent posts