728x90
Lookup
기본적으로 Ansible에서는 vars를 통해 변수를 정의할 수 있다. 다만 자동화 환경 구축을 진행하다보면 다양한 곳에서 입력되는 변수를 처리해야할 필요가 있는데, 때문에 Ansible에서는 lookup plugin을 통해 이러한 변수 처리에 도움을 준다.
(lookup 플러그인은 jinja2 template language의 Ansible-specific extension이다.)
Support
해당 글에서는 lookup에서 사용할 수 있는 대표적인 조회 몇 가지만 제시한다.
---
- name: lookup_test
hosts: localhost
tasks:
# 파일 내용 조회 후 반환
- name: file
debug: msg="file {{lookup('file', '/Users/anjin-u/.ssh/id_rsa.pub')}}"
# 파이프로 변수 전달
- name: pipe
debug: msg="pipe {{lookup('pipe', 'ls')}}"
# 환경변수 전달
- name: env
debug: msg="env {{lookup('env', 'SHELL')}}"
# 인자값으로 입력된 내용의 파일을 조회하나, 없을 때에는
#무작위 암호(ex. '_,enKV_Uv-5JnrEYJ2rR')를 생성하여 파일에 저장 후 전달.
- name: password
debug: msg="password {{lookup('password', 'password-test')}}"
#인자로 입력된 jinja2 template 파일 내용의 해석 결과 반환
- name: template #
debug: msg="template {{lookup('template','authorized_keys.j2')}}"
#dig -t txt google.com +short 시에 반환되는 값. 다만 사용을 위해선 'pip install dnspython'이 선행되어야함.
- name: dig
debug: msg="dig {{lookup('dnstxt', 'google.com')}}"
#redis-cli -> get hello
- name: redis
debug: msg="redis {{lookup('redis', 'hello')}}"
$ ansible-playbook lookup.yml
PLAY [lookup_test] *************************************************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************************
ok: [localhost]
TASK [file] ********************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "file ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4slCtSEVaglw55JN4uf1dUeLrceYCeTVL5po/wJxeKePb/QhsC3m2OC4MlKeE0PZzlRW5rQDwOKb4Ly9FgOzT0AgzN6w4/38ZR22Er0K5Q+mhQuuR60zI96ks57UgGYmDqabdAT9DkWmO+XOFugf8OWnGfI2lG/fUjQb4tjJACWQ5FU+vMdfK2YZ5zafs0ORTIB+v+bpihGi//pS65oEbcKMSI5fswimzjcZx288zGYzV7E1ygSWQ0k/N4yqMfxf8gvGYn33G0ITxVItPXw2JlKk1VHxTzVCX/HHrAzzFMkr8+NJX44yWGeqmb0MO5AtcQ4fGu+rIhdUET3TqTSQp"
}
TASK [pipe] ********************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "pipe authorized_keys.j2\\nlookup.yml\\npassword-test\\nsecrets.yml"
}
TASK [env] *********************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "env /opt/homebrew/Cellar/bash/5.2.15/bin/bash"
}
TASK [password] ****************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "password _,enKV_Uv-5JnrEYJ2rR"
}
TASK [template] ****************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "template ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4slCtSEVaglw55JN4uf1dUeLrceYCeTVL5po/wJxeKePb/QhsC3m2OC4MlKeE0PZzlRW5rQDwOKb4Ly9FgOzT0AgzN6w4/38ZR22Er0K5Q+mhQuuR60zI96ks57UgGYmDqabdAT9DkWmO+XOFugf8OWnGfI2lG/fUjQb4tjJACWQ5FU+vMdfK2YZ5zafs0ORTIB+v+bpihGi//pS65oEbcKMSI5fswimzjcZx288zGYzV7E1ygSWQ0k/N4yqMfxf8gvGYn33G0ITxVItPXw2JlKk1VHxTzVCX/HHrAzzFMkr8+NJX44yWGeqmb0MO5AtcQ4fGu+rIhdUET3TqTSQp"
}
TASK [dig] *********************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "dig webexdomainverification.8YX6G=6e6922db-e3e6-4a36-904e-a805c28087faglobalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8=docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0eMS=E4A68B9AB2BB9670BCE15412F62916164C0B20BBonetrust-domain-verification=de01ed21f2fa4d8781cbc3ffb89cf4efv=spf1 include:_spf.google.com ~allfacebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95google-site-verification=TV9-DBe4R80X4v0M4U_bd_J9cpOJM0nikft0jAgjmsQapple-domain-verification=30afIBcvSuDV2PLXdocusign=1b0a6754-49b1-4db5-8540-d2c12664b289atlassian-domain-verification=5YjTmWmjI92ewqkx2oXmBaD60Td9zWon9r6eakvHX6B77zzkFQto8PQ9QsKnbf4Igoogle-site-verification=wD8N7i1JTNTkezJ49swvWW48f8_9xveREV4oB-0Hf5o"
}
TASK [redis] *******************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "redis hello-this-is-redis-var"
}
PLAY RECAP *********************************************************************************************************************************************************************************************
localhost : ok=8 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
lookup으로는 위에서 언급한 부분을 제외하고서도 수십 개에 달하는 종류의 정보를 조회할 수 있으며, 자세한 건 해당 명령어로 확인할 수 있다.
$ ansible-doc -l -t lookup
또한 사용자 정의 조회 플러그인을 작성을 원할 경우 해당 소스코드(https://github.com/ansible/ansible/tree/devel/lib/ansible/plugins/lookup)들을 참고하여 작성 후 다음 중 하나의 디렉터리에 위치시킨다.
- 플레이북을 포함한 디렉터리 하위에 위치한 lookup_plugins 디렉터리
- ~/.ansible/plugins/lookup
- /usr/share/ansible/plugins/lookup
- ANSIBLE_LOOKUP_PLUGINS 환경변수에 지정된 디렉터리
'DevOps > Ansible' 카테고리의 다른 글
Ansible run_once (0) | 2023.07.03 |
---|---|
Ansible serial 활용 (0) | 2023.07.03 |
Ansible host 지정 패턴 (0) | 2023.07.03 |
requirements.txt 을 활용해 Ansible에서 package 설치 (0) | 2023.06.30 |
Ansible facts (0) | 2023.06.30 |