Ansible은 현재 python 2.7 이며, 추후 python 3.x 버전을 기반으로 한 Ansible버전이 릴리즈될 것이다.
Ansible.cfg 설정 재정의
- Global
- /etc/ansible/ansible.cfg
- 사용자권한에 귀속
- ~/.ansible/ansible.cfg
- Custom Diractory
- /demo/ansible.cfg
설정적용 우선순위는 다음과 같다 . 환경변수 > 디렉토리 > 사용자 > 전역
[student@workstation .ansible]$ ansible --version
ansible 2.3.1.0
config file = /home/student/.ansible/ansible.cfg
configured module search path = Default w/o overrides
python version = 2.7.5 (default, Aug 2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]
[student@workstation .ansible]$
Escalation
Ansible 전용 계정을 만들어 사용하는 것을 권장 한다.
- ansible전용 계정으로 접속하고 권한 에스컬레이션 하여 root권한을 가져와 사용하는 것을 권장
<<ansible.cfg>>
[default]
inventory = ./inventory
remote_user = someuser
ask_pass = false
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=false
Ansible 모듈 doc
- 전체 모듈 확인 하기
- $ansible-doc -l
- 특정 모듈 확인 하기
- $ansible-doc ping
[student@workstation ~]$ ansible-doc ping
> PING (/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py)
A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to
verify the ability to login and that a usable python is configured. This is NOT ICMP ping, this is just a trivial test module.
EXAMPLES:
# Test we can logon to 'webservers' and execute python with json lib.
ansible webservers -m ping
MAINTAINERS: Ansible Core Team, Michael DeHaan
METADATA:
Status: ['stableinterface']
Supported_by: core
[student@workstation ~]$
동적 인벤토리 관리
- 사전조건
- ~/dep-lab/ansible.cfg
[student@workstation dep-lab]$ cat ansible.cfg
[defaults]
inventory = inventory
remote_user = devops
ask_pass = false
[privilege_escalation]
become=false
become_method=sudo
become_user=root
become_ask_pass=false
- ~/dep-lab/inventory/inventory
[student@workstation dep-lab]$ cat inventory/inventory
[intranetweb]
servera.lab.example.com
serverc.lab.example.com
serverd.lab.example.com
[internetweb]
[everyone:children]
intranetweb
internetweb
- ~/dep-lab/inventory/binventory.py
[student@workstation dep-lab]$ cat inventory/binventory.py
#!/usr/bin/env python
from subprocess import Popen,PIPE
import sys
import json
result = {}
result['internetweb'] = {}
result['internetweb']['hosts'] = []
result['internetweb']['vars'] = {}
pipe = Popen(['getent', 'hosts'], stdout=PIPE, universal_newlines=True)
for line in pipe.stdout.readlines():
s = line.split()
if s[1].startswith('serverb'):
result['internetweb']['hosts'].append(s[1])
if len(sys.argv) == 2 and sys.argv[1] == '--list':
print(json.dumps(result))
elif len(sys.argv) == 3 and sys.argv[1] == '--host':
print(json.dumps({}))
else:
print("Requires an argument, please use --list or --host <host>")
[student@workstation dep-lab]$
- ~/dep-lab/ansible.cfg
- 동적 인벤토리 설명
- inventory 디렉터리내의 실행권한이 있는 스크립트를 모두 실행하여 동적 inventory를 구성한다.
아래와 같이 binventory 실행결과가 'serverb.lab.example.com'을 반환하고 있으므로, 정적 'inventory'파일에는 포함되어 있지 않지만, 동적스크립트를 통하여 'serverb' 가 추가 되었다.
[student@workstation dep-lab]$ inventory/binventory.py --list
{"internetweb": {"hosts": ["serverb.lab.example.com"], "vars": {}}}
[student@workstation dep-lab]$
Add Comment