Palybook组层部分
tasks 任务 | 包含要在目标主机上执行的操作,使用模块定义这些操作,每个任务都是一个模块的调用 |
variables | 变量:存储和传递数据,变量可以自定义,可以在palybook当中定义为全局变量,也可以在外部传参 |
templates | 模版:用于生产配置文件,模版是包含占位符的文件,占位符由ansible在执行时转换为变量值 |
handlers | 处理器:当需要有变更的时候,可以执行触发器 |
roles | 角色:是一种组织和封装palybook的,允许把相关的任务变量,模版和处理器组织成一个可复用的单元 |
- name: first play
#一个name就是一个任务名,名字可以不写,
gather_facts: false
#是否收集目标主机的系统信息,false就是不收集,最好不写。
hosts: 192.168.233.12
#执行的目标主机
remote_user: root
#在目标主机执行的用户
tasks:
- name: ping test
ping:
- name: close selinux
command: '/sbin/setenforce 0'
ignore_errors: True
- name: close firewalld
service: name=firewalld state=stopped
- name: install httpd
yum: name=httpd
- name: start httpd
service: enabled=true name=httpd state=started
- name: editon index.html
shell: echo "this is httpd" > /var/www/html/index.html
notify: restart httpd
handlers:
- name: restart httpd
service: name=httpd state=restarted
[root@docker1 opt]# ansible-playbook test1.yaml --syntax-check
#检查配置文件是否有错误
[root@docker1 opt]# ansible-playbook test1.yaml --list-task
#检查生效的目标主机
[root@docker1 opt]# ansible-playbook test1.yaml
#运行剧本文件
[root@docker1 opt]# ansible-playbook test1.yaml --start-at-task='install httpd'
#指定运行剧本第几行
如需要切换用户在配置文件中写入
remote_user: dn
become: yes
become_ser: root
vim /etc/ansible/ansible.cfg
71行取消注释
vim /etc/ansible/hosts
[dbservers]
192.168.233.12 ansible_user=root ansible_password=123
需要声明ip地址与主机名
ansible-playbook test1.yaml -u root -k
#密码需要手动输入
- hosts: 192.168.233.12
remote_user: root
vars:
groupname: guoqi
username: wangdefu
tasks:
- name: create group
group:
name: "{{ groupname }}"
system: yes
gid: 111
- name: create user
user:
name: "{{ username }}"
uid: 1011
group: "{{ groupname }}"
shell: /sbin/nologin
- name: copy file
copy:
content: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}"
dest: /opt/ky32.txt
#获取目标主机的ip地址,然后打印出来,这里是否获取主机的信息否被删除掉,如果无法获取主机的信息,就会报错
[root@docker1 opt]# ansible-playbook test2.yaml -e 'username=yst groupname=ymr'
#在外面传参
playbook的条件判断
when是一个比较常见的应用场景,实现满足条件即执行,不满足条件即跳过的任务
when是满足条件即执行,不满足不执行
格式
- hosts: 192.168.233.12
#可以用主机的ip地址,也可以是用组名,也可以用all
remote_user: root
tasks:
- name: test when
debug:
msg: '位置判断'
when: ansible_default_ipv4.address == '192.168.233.20'
#when: inventory_hostname !== '192.168.233.20'
#作用相同
#debug=echo msg=输出的内容,用于脚本的调试,在正式脚本中可以去除