▶ shell 은 메타문자를 처리할 수 있다 [vagrant@control ~]$ ansible node1 -m shell -a 'ps -ef | grep bash' node1 | CHANGED | rc=0 >> vagrant 1340 1339 0 09:48 pts/0 00:00:00 /bin/sh -c ps -ef | grep bash vagrant 1342 1340 0 09:48 pts/0 00:00:00 grep bash [vagrant@control ~]$ ansible node1 -m command -a 'ps -ef | grep bash' node1 | FAILED | rc=1 >> error: garbage option Usage: ps [options] Try 'ps --help ' or ..
Role 디렉터리 형태로 구조화 시킨다 ▶ Role을 위한 yaml 생성 - hosts: centos become: yes vars: package: httpd tasks: - name: installed {{package}} package yum: name: "{{package}}" state: present - name: started apache service service: name: httpd state: started - name: copy httpd copy: src: ./src/httpd.conf dest: /etc/httpd/conf/httpd.conf notify: restart apache - name: copy index.html file to managed nodes with ji..
▶ .j2 로 하면 jinja2로 인식한다 ▷ 템플릿은 playbook 으로 실행해야 하며 ▷ template 모듈로 실행한다 ▷ copy 모듈과 비슷하나 template 은 .j2를 해석이 가능하다 ▷ 해석한 파일을 for_result.txt 로 저장하라 ▶ for 구문 >> for.j2 파일로 생성 >>> 변수를 {{ }} 로 생성한다 {% for x in range(10) %} {{x}} {% endfor %} >> for.yml 로 playbook 생성 - hosts: localhost tasks: - template: src: ./for.j2 dest: /tmp/for_result.txt register: jinja_result - debug: msg: "{{jinja_result}}" >> 0..
Notify - Handlers ▶ notify 의 이름과 handlers 의 name 과 내용이 같아야된다 ▷ name 으로 핸들러를 호출한다 ▷ 핸들러는 가장 마지막에 실행한다 ▷ playbook 에 있는 핸들러의 순서에 따라 핸들러 실행된다 - hosts: node1 tasks: - name: copy file copy: src: ~/work/src/testfile dest: /tmp/{{ansible_hostname}}.file" notify: handlertest - name: test messages debug: msg: test messages notify: handlers2 handlers: - name: handlertest debug: msg: "파일이 복사" - name: handle..
▶ fact 변수를 [ ' ' ] 로 사용해도 되고 . 으로 사용해도 된다 ▷ setup 으로 fact 변수 체크 ( dictionary ) ansible node2 -m setup > node2.txt ▷ hostvars[inventory_hostname] 은 매직변수 >> 현재 작업중인 host 표시 - hosts: nodes tasks: - debug: msg: - eth0's ip {{ansible_eth0.ipv4.address}} - eth1's ip {{ansible_eth1.ipv4.address}} - eth0's ip {{ansible_facts['eth1']['ipv4']['address']}} - eth1's ip {{ansible_facts.eth1.ipv4.address}} - ..
Ansible vault ▶ 보안을 위해 ansible-playbook 의 암호화 [vagrant@control ~]$ ansible-vault edit auto.yml Vault password: ERROR! input is not vault encrypted data for /home/vagrant/auto.yml [vagrant@control ~]$ ansible-vault encrypt auto.yml New Vault password: Confirm New Vault password: Encryption successful ▷ 암호화 된 상태로 보인다 vim auto.yml ▷ 암호화 해제 [vagrant@control ~]$ vim auto.yml [vagrant@control ~]$ ansi..
특별히 선언하지 않아도 기본적으로 사용할 수 있는 변수 타입 매직변수 base connection ansible_connection module_compression ansible_module_compression shell ansible_shell_type executable ansible_shell_executable connection common remote_addr ansible_ssh_host ansible_host remote_user ansible_ssh_user ansible_user password ansible_ssh_pass ansible_password port ansible_ssh_port ansible_port pipelining ansible_ssh_pipelining ans..
▤ ansible-server / node{1..3} 까지 ip 제대로 안잡히고, provision 을 못읽는다 vagrant plugin uninstall vagrant-vbguest # 이전에 vagrant 에 다운로드한 plugin 이 현재 사용하는 버전에서는 # 삭제하지 않으면 kernel-header 설치에러 뜨면서 진행이 멈추거나 ### 그래서 node 마다 계속 설치해야한다 # ip 설정이 안되는 현상이 발생한다 ▶ fingerprints 를 직접 node1 로 하는 것이 아니라 >> 바로 수집하게 하는 법 [vagrant@control ~]$ ssh-keyscan node1 >> ~/.ssh/known_hosts # node1:22 SSH-2.0-OpenSSH_7.4 # node1:22 S..
◈ 백업해두기 # hosts 는 /etc/ansible/hosts 에서 복사해왔다 tar -cf control_vagrant.tar ansible_env_ready.yml hosts work [vagrant@control ~]$ tar -tf control_vagrant.tar ansible_env_ready.yml hosts work/ work/nfs.yaml work/ngnx.yml work/remove.yaml work/time.yml work/node5.fact work/node2.fact work/winnginx.yaml work/test.yml >> fingerprint 가 바뀌어서 그럴 가능성이 있다. >> powershell 은 cd .. 로 이동해야 되네 cd 로 바로 home 으로 안가..
[vagrant@control work]$ cat winnginx.yaml - hosts: windows gather_facts: no tasks: - win_file: path: C:\nginx state: directory - win_get_url: url: http://nginx.org/download/nginx-1.14.0.zip dest: C:\nginx\nginx-1.40.0.zip - win_unzip: src: C:\nginx\nginx-1.40.0.zip dest: C:\nginx delete_archive: yes - win_chocolatey: name: nssm - win_get_url: url: https://www.nginx.com dest: C:\nginx\nginx-1.14...