안녕하세요 ~!
오늘은 말이죠~! MAGIC_VARIABLE에 대해서 말해 보려고 합니다!!
이게 뭘까요?
매직?
이런 매직일까요? 하하 (참고로 제가 하는 게임입니다. !!)
그게 아니라 앤서블에 보면
매직 변수라는게 있습니다.
[ /usr/lib/python2.7/site-packages/ansible/constants.py ]
2.5.3 버전에서 보여지는 매직 변수인데 잘 눈에 안 들어오네요
구 버전에 구조를 봅시다.
MAGIC_VARIABLE_MAPPING = dict( | |
connection = ('ansible_connection',), | |
remote_addr = ('ansible_ssh_host', 'ansible_host'), | |
remote_user = ('ansible_ssh_user', 'ansible_user'), | |
port = ('ansible_ssh_port', 'ansible_port'), | |
accelerate_port = ('ansible_accelerate_port',), | |
password = ('ansible_ssh_pass', 'ansible_password'), | |
private_key_file = ('ansible_ssh_private_key_file', 'ansible_private_key_file'), | |
pipelining = ('ansible_ssh_pipelining', 'ansible_pipelining'), | |
shell = ('ansible_shell_type',), | |
become = ('ansible_become',), | |
become_method = ('ansible_become_method',), | |
become_user = ('ansible_become_user',), | |
become_pass = ('ansible_become_password','ansible_become_pass'), | |
become_exe = ('ansible_become_exe',), | |
become_flags = ('ansible_become_flags',), | |
ssh_common_args = ('ansible_ssh_common_args',), | |
docker_extra_args= ('ansible_docker_extra_args',), | |
sftp_extra_args = ('ansible_sftp_extra_args',), | |
scp_extra_args = ('ansible_scp_extra_args',), | |
ssh_extra_args = ('ansible_ssh_extra_args',), | |
sudo = ('ansible_sudo',), | |
sudo_user = ('ansible_sudo_user',), | |
sudo_pass = ('ansible_sudo_password', 'ansible_sudo_pass'), | |
sudo_exe = ('ansible_sudo_exe',), | |
sudo_flags = ('ansible_sudo_flags',), | |
su = ('ansible_su',), | |
su_user = ('ansible_su_user',), | |
su_pass = ('ansible_su_password', 'ansible_su_pass'), | |
su_exe = ('ansible_su_exe',), | |
su_flags = ('ansible_su_flags',), | |
executable = ('ansible_shell_executable',), | |
module_compression = ('ansible_module_compression',), | |
) |
위에 보여지는 내용을 앤서블 플레이북이나, var_group 같은 곳에 넣으면 적용되는 변수들인 것입니다. 미리 정의되어 있는 변수들인거죠 FACTS와 별개로요~!
예를 들면, 코드 상에서 tasks 상에서 lldp의 sudo를 주기 위해서 보통 become에 yes를 넣게 되죠.
---
- hosts: cl
gather_facts: no
tasks:
- name: lldp service
become: yes service: name=lldpd state=restarted
그렇다면, 이런 예는 어떨까요?
---
- hosts: cl
gather_facts: no
remote_user: cumulus
become: yes
vars:
ansible_become_pass: CumulusLinux!
tasks:
- name: ssh-keygen
service: name=lldpd state=restarted
- remote_user = ('ansible_ssh_user', 'ansible_user')
- become_pass = ('ansible_become_password','ansible_become_pass')
쓰는 용법의 차이는 있지만, 이런 식으로 서로 바꾸어 가면서 쓸수 있습니다.
아직은 완벽하게 어떤 부분은 vars에 쓰고, playbook에 쓰고, hosts에 쓰고가 정리가 되지 않은 느낌이긴 하나.~~ 서로 호환되는 이름이 어떤 것인지 안다면...
구글에서 검색해서 대략 만들수 있겠죠?
:) 도움이 되셨기를요오~!