如果用模块形式一般有幂等性,如果用shell或者command没有幂等性
playbooks相当于shell的脚本,可以吧执行的任务写到文件当一次执行,方便调用
tasks:一个task相当于是一个play
varobles:变量,一个定义,多次调用
template:模板。可以区分不同主机的特点
handlers:触发器,依赖于前一个任务,前一个任务如果执行改变,那么就会触发handlers
1.vim /etc/ansible/hosts
[zxw]
192.168.126.7 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
192.168.126.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
~
基本格式
- hosts: zxw
remote_user: root
tasks:
- name: copy httpd.conf
copy: src=name dest=name
- name: restarted httpd
service: name=httpd state=restarted
Vim name.yaml
- hosts: zxw 定义的组 (IP,all,组名)
remote_user: root 主机执行
tasks: 任务
- name: copy httpd.conf 任务名字
copy: src=/etc/httpd/conf/httpd.conf 模块 本地文件 dest=/etc/httpd/conf/httpd.conf 目标文件
- name: restarted httpd
service: name=httpd state=restarted
[root@zxw8 ~]# ansible-playbook host.yaml
192.168.126.7 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
执行3个| 修给2个| 不可达=0 | 失败=0| 跳过=0| 获救=0| 忽略=0
定义变量:
第一种:
- hosts: zxw
remote_user: root
vars:
- file: /etc/httpd/conf/httpd.conf
tasks:
- name: copy httpd.conf
copy: src={{ file }} dest={{ file }}
- name: restarted httpd
service: name=httpd state=restarted
第二种:
vim /etc/ansible/hosts
[zxw:vars]
file= /etc/httpd/conf/httpd.conf
packages=tree2
第三种:
[root@zxw8 ~]# ansible-playbook host.yaml --extra-vars "file=/etc/httpd/conf/httpd.conf "
注册变量:
register注册变量:把date命令输出的结果赋予给date_output
- hosts: zxw
remote_user: root
tasks:
- name: get date
command: date
register: date_output
- name: echo date_output
shell: "echo {{date_output.stdout}} > /root/zxw.txt"
[root@zxw8 ~]# ansible-playbook date.yaml
when语句:
when条件语句:可以根据setup显示出客户端信息为依据来判断
[root@zxw8 ~]# ansible zxw -m setup | more
列出客户端详细信息
- hosts: zxw
remote_user: root
tasks:
- name: mkdir when
command: 'mkdir when'
when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
异常处理:
ignore_errors:如果任务出错,直接跳过,不会影响其他任务
- hosts: zxw
remote_user: root
tasks:
- name: touch zhao
command: 'touch zhao'
ignore_errors: yes
- name: restarted httpd
service: name=httpd state=restarted
ignore_errors: yes
循环语句:
第一种:
{{ item }}:循环创建
创建
- hosts: zxw
remote_user: root
tasks:
- name: add many users
user: name={{ item }} state=present
with_items:
- user1
- user2
- user3
删除:
user: name={{ item }} state=absent
- hosts: zxw
remote_user: root
tasks:
- name: yum many rujian
yum: name={{ item }} state=latest
with_items:
- samba
- vsftpd
- nfs-utils
- rpcbind
第二种:
- hosts: 192.168.254.12
remote_user: root
tasks:
- name: add several user
user: name={{item.name}} state=present groups={{item.groups}}
with_items:
- { name: 'testuser1', groups: 'wheel'}
- { name: 'testuser2', groups: 'root'}
触发器:
handlers:如果执行的任务被改变那么会触发handlers的任务
- hosts: zxw
remote_user: root
tasks:
- name: copy httpd.conf
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- service httpd restarted
handlers:
- name: service httpd restarted
service: name=httpd state=restarted
模板拷贝:
template,用来区分不同客户端上的特性
- hosts: zxw
remote_user: root
tasks:
- name: copy httpd.conf
template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify:
- service httpd restarted
handlers:
- name: service httpd restarted
service: name=httpd state=restarted
[root@zxw8 ~]]# cat /etc/ansible/hosts
[zxw]
192.168.126.7 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123 prot=80
192.168.126.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123 prot=80
[root@zxw8 ~]# cat /etc/redhat-release 查看版本
1 .对剧本语法检测:
ansible-playbook --syntax-check /root/ansible/httpd.yaml
2.-C模拟执行剧本:
ansible-playbook -C /root/ansible/httpd.yaml
3.执行剧本:
ansible-playbook /root/ansible/httpd.yaml
示例1:基础
示例2:变量
示例3:迭代
示例4:触发器notify
示例5:模板templates