ansible的脚本------playbook剧本
2023-12-20 17:04:24
playbook组成部分:
- 1.task 任务:包含要在目标主机上执行的操作,使用模块定义这些操作。每个都是一个模块的调用。
- 2.variables 变量:存储和传递数据。变量可以自定义,可以在playbook当中定义为全局变量,也可以外部传参。
- 3.Templates 模板:用于生成配置文件。模板是包含占位符的文件。占位符有ansible在执行时转化为变量值
- 4.handlers 处理器:当需要有变更的时候,可以执行触发器。
- 5.Roles 角色:是一种组织和封装playbook的。允许把相关的任务,变量,模板和处理器组织成一个可复用的单元。
实例模板
安装http并且设置页面内容
cd /opt
vim test1.yml
#this is our first playbook
- name: first play
一个name就是一个任务名,名字可以不写。
gather_facts: false
是否收集目标主机的系统信息,false就是不收集
hosts: 20.0.0.30
执行的目标主机是什么
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 state=latest
- 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
wq
检查语法是否正确
ansible-playbook test1.yml --syntax-check
检查语法是否正确
错误演示如上图
正确演示如上图
playbook常用脚本命令
ansible-playbook test1.yml --list-task
一般运行会有几个task
ansible-playbook test1.yml --list-hosts
检查生效的目标主机
开始运行脚本
ansible-playbook test1.yml
开始运行
可以在目标主机 tail -f /var/log/messages
查看
安装成功
此外,我们还可以指定剧本的开始位置
ansible-playbook test1.yml --start-at-task='install httpd'
安装时如何切换用户
#this is our first playbook
- name: first play
一个name就是一个任务名,名字可以不写。
gather_facts: false
是否收集目标主机的系统信息,false就是不收集
hosts: 20.0.0.30
执行的目标主机是什么
remote_user: root
在目标主机执行的用户
become: yes
become_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 state=latest
- 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
指定声明用户
ansible-playbook test1.yml -u root -k
传参变量
#this is second playbook
声明和引用变量,以及外部传参变量
- hosts: 20.0.0.30
remote_user: root
vars:
groupname: zzz
username: hj
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
"{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address']}}":
获取目标主机IP地址,复制出来放到dest指定的路径中
inventory_hostname:目标的主机名
ansible_default_ipv4:获取目标主机名
外部传参
条件判断
when......
when是一个比较常见的应用场景,实现了满足条件即执行,不满足即跳过的任务。
when 满足条件就执行,不满足不执行
指定IP输出? ?“位置判断”
#this is when test
- hosts: all
可以用主机的IP地址,也可以是用组名,也可以用all
remote_user: root
tasks:
- name: test when
debug:
msg: '位置判断'
when: ansible_default_ipv4.address == '20.0.0.30
语法和shell差不多,? ?!=表示不等于,也就是? ?“除了”
条件满足才会执行
扩展
在20.0.0.30上安装nginx
在20.0.0.50上安装httpd
- hosts: all
remote_user: root
tasks:
- name: nginx
yum: name=nginx
when: ansible_default_ipv4.address == '20.0.0.30'
- name: nginx info
debug:
msg: "安装nginx"
when: ansible_default_ipv4.address == '20.0.0.30'
- name: http
yum: name=httpd
when: inventory_hostname == '20.0.0.50'
playbook当中的循环
ansible有多种循环格式,with_items循环遍历
- hosts: 20.0.0.30
remote_user: root
gather_facts: false
tasks:
- debug:
msg: "{{ item }}"
with_items: [a,b,c,d]
声明变量item,playbook的内置变量
with_items,会把items的值遍历列表当中的a b c d
把item遍历成abcd
如果修改成这样,结果会如何?
相当于 for i in (a,b,c,d,1,2,3,4)
但是with_items还是把两个列表当成整体进行遍历
list循环
touch循环
组循环
组循环,列表当中的值一一对应,打印出来
少的部分会用none补上
列表里的元素定义了循环的次数
第二层列表相当于内循环。
a1,a2,a3,a4.b1,b2,b3,b4.c1,c2,c3,c4,d1,d2,d3,d4
with_items 最常用
with_list 列表分组循环
with_togther 列表对应的列,以数据结合的方式循环
with_nested 相当于双重循环(第一层定义了循环的次数,第二层表示第一层的每个元素会循环几次)
扩展
创建两个用户 test1,test2
他们的组分别是 dn1 dn2
得先创建组
yum一键安装tree,sl,nginx,httpd,vsftpd,dhcp
- name: play1
hosts: 20.0.0.50
gather_facts: false
tasks:
- name: yum info
yum: name={{ item }} state=latest
with_items:
- tree
- sl
- nginx
- httpd
- vsftpd
- dhcp
文章来源:https://blog.csdn.net/qq_51506982/article/details/135108696
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!