[root@pp ~]# mkdir demo4
[root@pp ~]# cp ansible.cfg hosts demo4/
[root@pp ~]# cd demo4/
[root@pp demo4]#
[root@pp demo4]# cat aa.txt
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 我的 IP 地址是: {{ansible_default_ipv4.address}}
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
[root@pp demo4]#
[root@pp demo4]# cat 1.yaml
---
- hosts: db
tasks:
- name: 拷贝一个文件到远端主机
copy: src=aa.txt dest=/opt/aa.txt
[root@pp demo4]#
[root@pp demo4]# ansible-playbook 1.yaml
PLAY [db] ********************************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [up]
ok: [lp]
TASK [拷贝一个文件到远端主机] ***********************************************************************
ok: [lp]
ok: [up]
PLAY RECAP *******************************************************************************
lp : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
up : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@pp demo4]#
[root@pp demo4]# ansible db -m shell -a "cat /opt/aa.txt"
lp | CHANGED | rc=0 >>
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 我的 IP 地址是: {{ansible_default_ipv4.address}}
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
up | CHANGED | rc=0 >>
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 我的 IP 地址是: {{ansible_default_ipv4.address}}
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
[root@pp demo4]#
[root@pp demo4]# mv aa.txt aa.j2
[root@pp demo4]#
[root@pp demo4]# cat 1.yaml
---
- hosts: db
tasks:
- name: 拷贝一个文件到远端主机
template: src=aa.j2 dest=/opt/aa.txt
[root@pp demo4]#
root@pp demo4]# mkdir templates
[root@pp demo4]#
[root@pp demo4]# cat templates/aa.j2
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 我的主机名是: {{ansible_fqdn}}
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
[root@pp demo4]#
[root@pp demo4]# ansible-playbook 1.yaml
[root@pp demo4]# ansible db -m shell -a "cat /opt/aa.txt"
up | CHANGED | rc=0 >>
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 我的主机名是: up
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
lp | CHANGED | rc=0 >>
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
| 我的主机名是: lp
+‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐+
[root@pp demo4]#
1 {% if 判断1 %}
2 内容1
3 {% elif 判断2 %}
4 内容2
5 ...多个elif...
6 {% else %}
7 内容3
8 {% endif %}
[root@pp demo4]# cat templates/bb.j2
1111
{% if ansible_fqdn=="server2.rhce.cc" %}
{{ansible_fqdn}}
{% else %}
aaaa
{% endif %}
a3333
[root@pp demo4]#
[root@pp demo4]# cat 2.yaml
---
- hosts: db
tasks:
- name: 拷贝一个文件过去
template: src=bb.j2 dest=/opt/bb.conf
[root@pp demo4]#
[root@pp demo4]# ansible-playbook 2.yaml
PLAY [db] ********************************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [lp]
ok: [up]
TASK [拷贝一个文件过去] **************************************************************************
changed: [lp]
changed: [up]
PLAY RECAP *******************************************************************************
lp : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
up : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@pp demo4]#
[root@pp demo4]# ansible db -m shell -a "cat /opt/bb.conf"
up | CHANGED | rc=0 >>
1111
aaaa
a3333
lp | CHANGED | rc=0 >>
1111
aaaa
a3333
[root@pp demo4]#
[root@pp demo4]# vim templates/cc.j2
[root@pp demo4]# cat templates/cc.j2
1111
{% if ansible_fqdn=="server2.rhce.cc"
and
ansible_distribution_major_version=="7" %}
{{ansible_fqdn}}
{% else %}
aaaa
{% endif %}
3333
[root@pp demo4]#
[root@pp demo4]# cat 3.yaml
---
- hosts: db
tasks:
- name: 我要拷贝一个文件过去
template: src=cc.j2 dest=/opt/cc.conf
[root@pp demo4]#
[root@pp demo4]# ansible-playbook 3.yaml
PLAY [db] ********************************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [lp]
ok: [up]
TASK [我要拷贝一个文件过去] ************************************************************************
changed: [up]
changed: [lp]
PLAY RECAP *******************************************************************************
lp : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
up : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@pp demo4]#
[root@pp demo4]# ansible db -m shell -a "cat /opt/cc.conf"
up | CHANGED | rc=0 >>
1111
aaaa
3333
lp | CHANGED | rc=0 >>
1111
aaaa
3333
[root@pp demo4]#
1 {% for i in 列表名 %}
2 {{i}}
3 {% endfor %}
[root@pp demo4]# cat templates/dd.conf.j2
{% set list1=['aa','bb','cc'] %}
1111
{% for i in list1 %}
{{i}}
{% endfor %}
5555
[root@pp demo4]#
[root@pp demo4]# cat 4.yaml
---
- hosts: up
tasks:
- name: 拷贝-个文件到远端主机
template: src=dd.conf.j2 dest=/opt/dd.conf
[root@pp demo4]#
[root@pp demo4]# ansible-playbook 4.yaml
PLAY [up] ********************************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [up]
TASK [拷贝-个文件到远端主机] ***********************************************************************
changed: [up]
PLAY RECAP *******************************************************************************
up : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@pp demo4]#
[root@pp demo4]# ansible up -m shell -a "cat /opt/dd.conf"
up | CHANGED | rc=0 >>
1111
aa
bb
cc
5555
[root@pp demo4]#
[root@pp demo4]# egrep -v '#/^#' /etc/httpd/conf/httpd.conf > httpd.conf.j2
[root@pp demo4]#
[root@pp demo4]# head -3 httpd.conf.j2
[root@pp demo4]# setenforce 0
[root@pp demo4]# getenforce 0
Permissive
[root@pp demo4]#
[root@pp demo4]# cat hand-1.yaml
---
- hosts: up
vars:
myport: 80
tasks:
- name: tasks1安装httpd
yum: name=httpd state=installed
- name: tasks拷贝备注文件
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: tasks3启动httpd服务
service: name=httpd state=started
[root@pp demo4]#
[root@pp demo4]# ansible-playbook hand-1.yaml
PLAY [up] ********************************************************************************
TASK [Gathering Facts] *******************************************************************
ok: [up]
TASK [tasks1安装httpd] *********************************************************************
changed: [up]
TASK [tasks拷贝备注文件] ***********************************************************************
changed: [up]
TASK [tasks3启动httpd服务] *******************************************************************
changed: [up]
PLAY RECAP *******************************************************************************
up : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@pp demo4]# cat hand-1.yaml
---
- hosts: up
vars:
myport: 808
tasks:
- name: tasks1安装httpd
yum: name=httpd state=installed
- name: tasks拷贝备注文件
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: tasks3启动httpd服务
service: name=httpd state=started
[root@pp demo4]#
[root@pp demo4]# cat hand-1.yaml
---
- hosts: up
vars:
myport: 808
tasks:
- name: tasks1安装httpd
yum: name=httpd state=installed
- name: tasks拷贝备注文件
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
- name: tasks3启动httpd服务
service: name=httpd state=started
handlers:
‐ name: restart httpd1
service: name=httpd state=restarted
‐ name: restart httpd2
service: name=httpd state=restarted
第三个task的state仍然设置为started,只要 httpd是启动的,第三个task就不会执行。 这里定义了两个handler,名称分别为restart httpd1和restart httpd2。在第二个task中, 通过notify指定了第一个 handler,即 restart httpd1。 如果不修改myport 的值,则第二个task不会执行,从而不会触发restart httpdl。如果 myport 的值发生了变化,则第二个task 会执行,从而会触发restart httpdl,重启 httpd服 务使得我们所做的修改生效。