2019独角兽企业重金招聘Python工程师标准>>>
1、template 模板文件
(1)在模板中调用外部的变量,调用方式{{ xxx }}
(2)模板中可以使用jinja的语法,如循环、条件、宏等
#注意: 在{% %}中使用外部变量,不能加{{}}
{% for ip in ansible_all_ipv4_addresses %}
{{ ip }};
{% endfor %}
# group_names 主机所在组名
{% if 'node_slave' in group_names %}
slave
{% else %}
master
{% endif %}
2、set_facs
运行过程中在受控主机上设置变量或计算变量值
---
- hosts: localhost
tasks:
- name: set fact 1
set_fact: foo="[ 'zero' ]"
- name: set fact 2
set_fact: foo="{{ foo }} + [ 'one' ]"
- name: set fact 3
set_fact: foo="{{ foo }} + [ 'two', 'three' ]"
- name: set fact 4
set_fact: foo="{{ foo }} + [ '{{ item }}' ]"
with_items:
- four
- five
- six
- debug: var=foo
输出:
"foo": [
"zero",
"one",
"two",
"three",
"six"
]
3、include_role 任务中添加角色
(1)常用方式
---
- hosts: localhost
vars:
flag: false
tasks:
- name: bbbbbbbb
shell: echo bbbb
- name: include test #方式1
include_role: name=test
- name: include test 2 #方式2
include_role:
name: test
- name: cccccccccc
shell: echo cccccccc
role中可以继续使用include_role
注意:最好不要这样,如果循环调用中调用前面的role,会出现死循环。
(2)陷阱
a、使用when时,不能使用变量值
---
- hosts: localhost
vars:
flag: false
tasks:
- name: bbbbbbbb
shell: echo bbbb
- name: include test
include_role: name=test
when: flag #flag是变量,会报错
- name: cccccccccc
shell: echo cccccccc
b、可以使用with_items
---
- hosts: localhost
vars:
flag: false
tasks:
- name: bbbbbbbb
shell: echo bbbb
- name: include test
include_role: name=test
with_items:
- myname: dxx
- name: cccccccccc
shell: echo cccccccc
4、pause 暂停模块,用于与用户交互
---
- name: time wait
pause: seconds=30
- name: wait on user choose
pause: prompt="Warning Detected slight issue .ENTER to continue CTRL_C to quit"
5、wait_for
用于启动某些进程需要一些时间很有用,如tcp端口是否连接
---
- hosts: webapps
tasks:
- name: install tomcat6
yum: name=tomcat6 state=installed
- name: service start
service: name=tomcat6 state=start
- name: wait for tomcat6 to start
wait_for: port=8080 state=started
6、assemable 将多个文件合并成一个文件
---
#受控主机免密登录dan、linna、wuzhu主机
- hosts: all
tasks:
- name: make /opt/sshkeys dirctory
file: path=/opt/sshkeys state=dirctory owner=root group=root mode=0700
- name: copy sshkey over
copy: src=/keys/{{item}}.pub dest=/opt/sshkeys/{{item}}.pub owner=root group=root mode=0600
with_items:
- dan
- linna
- wuzhu
- name: make /root/.ssh dirctory
file: path=/root/.ssh state=dirctory owner=root group=root mode=0700
- name: build the authorized_keys file
assemable: src=/opt/sshkeys dest=/root/.ssh/authorized_keys
6、其他模块
(1)add_host
动态添加受管主机到playbook中
(2)get_url、uri
- name: download foo.conf
get_url: url=http://example.com/path/file.conf dest=/tmp/foo.conf mode=0440
(3)group_by 创建组根据facts
- name: create group like 'kvm-host'
group_by: key=virt_{{ ansible_virtualization_type}}_{{ ansible_virtualization_role }}
(4)script
将控制主机的脚本在被管理主机上运行
(5)debug 调试
- name: debug
debug: msg="{{ansible_distribution}}" var="aaaa"