ansible的playbook剧本

若是用模块形式通常有幂等性,若是用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
~shell

基本格式vim

- hosts: zxw
remote_user: root
tasks:
- name: copy httpd.conf
copy: src=name dest=name
- name: restarted httpd
service: name=httpd state=restartedssh

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.yamlspa

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 "3d

注册变量:
register注册变量:把date命令输出的结果赋予给date_outputrest

- 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.yamlblog

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"ip

异常处理:
ignore_errors:若是任务出错,直接跳过,不会影响其余任务rem

- 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: yesrpc

循环语句:
第一种:
{{ 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

 

相关文章
相关标签/搜索