playbook 剧本
yaml
-
字典 key:value
-
列表 [] -
-
后缀名:yaml、yml
playbook 命令格式
Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
-C, --check # 检查但是不会真的执行
-f FORKS, --forks=FORKS # 并发,默认是5个
--list-hosts #列出匹配的主机
--syntax-check # 检查语法
第一个playbook
- hosts: web
remote_user: root
tasks:
- name: copyfile
copy: src=/etc/fstab dest=/tmp/fs
顺序执行,第一个任务所有机器都执行完,才会执行第二个任务
多任务
- hosts: web
remote_user: root
tasks:
- name: copyfile
copy: src=/etc/fstab dest=/tmp/fs
- name: createuser
user: name=alex11
幂等性 ,不管执行多少次,等到的结果永远是一样的
传参
第一种方式
- hosts: web
tasks:
- name: create{{user}}
user: name={{user}}
ansible-playbook -e user=alex13 p3.yml #-e 是传参
第二种方式
10.0.0.[132:133] user=alex14
10.0.0.135 user=alex12
ansible-playbook p3.yml
第三种方式
[web:vars] #重新创建一个
user=alex15
ansible-playbook p3.yml
第四种方式
- hosts: web
vars:
- user: alex16
tasks:
- name: create{{user}}
user: name={{user}}
第五种传参方式
- hosts: web
tasks:
- name: yumbc
yum: name=bc
- name: sum
shell: echo 8+9|bc
register: user
- name: echo
shell: echo {{user.stdout}} >/tmp/sum.txt
- name: createuser{{user.stdout}}
user: name=alex{{user.stdout}}
优先级
-e > playbook的vars > hosts文件
setup (获取主机信息模块)
#ansible all -m setup|more # more是分页显示的意思
ansible_all_ipv4_addresses # 所有的ipv4地址
ansible_all_ipv6_addresses # 所有的ipv6的地址
ansible_bios_version # 主板bios的版本
ansible_architecture # 架构信息
ansible_date_time # 系统的时间
ansible_default_ipv4 # IPv4默认地址
address #ip地址
alias #网卡名称
broadcast #广播地址
gateway # 网关
macaddress #mac地址
netmask #子网掩码
network #网段
ansible_distribution #系统的版本
ansible_distribution_file_variety# 系统的基于对象
ansible_distribution_major_version# 系统的主版本
ansible_distribution_version #系统的版本
ansible_domain #系统的域
ansible_dns #系统的dns
ansible_env #系统的环境变量
ansible_hostname #系统的主机名
ansible_fqdn #系统的完整主机名
ansible_machine #系统的架构
ansible_memory_mb #系统的内存信息
ansible_os_family #系统的家族
ansible_pkg_mgr #系统的包管理工具
ansible_processor_cores #cpu的核数
ansible_processor_count #每颗cpu上的颗数
ansible_processor_vcpus #cpu的总核数=cpu的颗数*每颗cpu上的核数
ansible_python #系统的python版本
ansible 10.0.0.132 -m setup -a "filter=*processor*" 搜索
正则
. 匹配任何字符,除了换行
* 匹配任何次
+ 最少一次
? 最多一次
{m} 指定的m次
{m,n} m次到n次
{m,} 最少m次
{0,n} 最多n次
[0-9] 代表数字
^ 开头
$ 结尾
^ 取反
[^0-9]
() 分组
grep "^\(.*\):.*\1$" /etc/passwd
grep -E "^(.*):.*\1$" /etc/passwd
tags (设置一个命令执行 只执行存在tags的命令)
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
copy: dest=/etc/redis.conf src=/etc/redis.conf
tags: copyfile
- name: start
service: name=redis state=started
ansible-playbook -t copyfile p7.yml
handlers (notify调用handlers(只有执行了notify所在的任务才会调用))
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
copy: dest=/etc/redis.conf src=/etc/redis.conf
tags: copy
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
template (模板 动态更改ip地址)
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: dest=/etc/redis.conf src=/etc/redis.conf
tags: copy # tags 执行时要是写 -t copy 就只执行这一个任务
notify: restart # 执行这个任务的时候调用 handlers任务
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
- hosts: web
tasks:
- name: install
yum: name=redis
- name: copyfile
template: dest=/etc/redis.conf src=redis.conf
tags: copy
notify: restart
- name: start
service: name=redis state=started
handlers:
- name: restart
service: name=redis state=restarted
需要在本地的目录下创建一个templates目录,就可以用相对路径
u 撤销
p 粘贴
#yy 复制#行
d$ 从当前位置删除
o 当前位置下面增加空白行,并切换到编辑模式
r 替换
id用户名 查看用户
when (判断 加条件 如果满足这个条件就执行这个任务 不满足就不执行)
- hosts: web
tasks:
- name: file
copy: content="大弦嘈嘈如急雨" dest=/opt/file
when: ansible_distribution_major_version=="7"
- name: file
copy: content="小弦切切如私语" dest=/opt/file
when: ansible_distribution_major_version=="6"
- hosts: web
tasks:
- name: file
copy: content="大弦嘈嘈如急雨\n" dest=/opt/file
when: sum=="7"
- name: file
copy: content="小弦切切如私语\n" dest=/opt/file
when: sum=="6"
ansible-playbook -e sum=7 p11.yml # -e 传值
循环
- hosts: web
tasks:
- name: file
user: name={{item}}
with_items: #循环创建用户
- alex20
- alex21
- hosts: web
tasks:
- name: creategroup
group: name={{item}}
with_items: #循环创建组名
- wusir20
- wusir21
- name: file
user: name={{item}}
with_items:
- alex22
- alex23
嵌套循环
- hosts: web
tasks:
- name: creategroup
group: name={{item}}
with_items:
- wusir22
- wusir23
- name: file
user: name={{item.name}} group={{item.group}}
with_items:
- {"name":alex24,"group":wusir22}
- {"name":alex25,"group":wusir23}