yaml规范 yaml链接
字典 key:value 列表 :[] - 注: 如果写列表和字典格式必须为- name : alex,每个之间都要有空格,相当的严格; 还有如果是同级的情况,首行缩进必须是一致的; 如果是子集,必须用Tab键,不能手动打4个空格
playbook格式
用法:
ansible-playbook [options] playbook.yml [playbook2 ...]
-C --check #干跑 ,会执行但不会有结果,不会有任何变化产生 --list-hosts #列出符合的主机 -f FORKS --forks=FORKS #做并发 --syntax-check #检查语法 -k ,--ask-pass #输入密码
单个playbook
-hosts :web remote_user: root tasks: - name:createuser - user:name =alex20 home=/opt/alex20 uid =4000
多个playbook
-hosts: web remote_user: root tasks: - name:createuser user:name=alex20 home=/opt/alex20 uid=4000 - name:copyfile copy:src=/etc/fstab dest=/tmp/fs
幂等性 : 不管执行多少次,得到的结果都是一样的
-hosts :web remote_user:root tasks: - name:createuser user: name=alex20 home=/opt/alex20 uid=4000 - name:copyfile copy:src=/etc/fstab dest=/tmp/fs -hosts :db tasks: - name: copyfile copy: src=/etc/fstab dest=/tmp/fs
传参:
-e host文件ip地址后面写 playbook vars register 获取值stdout
传参的五种方式
第一种:
- hosts: web tasks: -name: create{{user}} user: name={{user}} ansible-playbook -e user=wusir20 p3.yml
第二种:
在web组中写 [web] 192.168.100.[1:3] user=alex30 192.168.100.6 user=alex100
第三种:
[web:vars] user=alex31
第四种:
- hosts : web vars: -user: alex32 tasks: - name:create{{user}} user:name={{user}}
第五种:
-hosts:web tasks: -name :yum yum : name=bc -name :sum shell: echo 11+22|bc register: user -name : echo shell :echo {{user.stdout}} > /tmp/echo.txt -name :create{{user.stdout}} user: name=alex{{user.stdout}}
优先级:
-e > playbook > hosts
setup(里面一些参数,不用死记)
ansible_all_ipv4_addresses #所有的ipv4地址 ansible_all_ipv6_addresses #所有的ipv6地址 ansible_architecture #系统的架构 ansible_date_time #系统时间 ansible_default_ipv4 #默认的ipv4地址 address ip地址 alias 网卡名称 broadcast 广播地址 gateway 网关 netmask 子网掩码 network 网段 ansible_default_ipv6 #默认的ipv6地址 ansible_device_links #系统的磁盘信息 ansible_distribution #系统名称 ansible_distribution_file_variety #系统的基于公司 ansible_distribution_major_version #系统的主版本 ansible_distribution_version #系统的全部版本 ansible_dns #系统的dns 默认udp 端口53 ansible_domain #系统的域 ldap ipv4 #ipv4地址 ansible_env #系统的环境 ansible_fqdn #系统的完整主机名 ansible_hostname #系统的简写主机名 ansible_kernel #系统的内核版本 ansible_machine #系统的架构 ansible_memtotal_mb #系统的内存 ansible_memory_mb #系统的内存使用情况 ansible_mounts #系统的挂载信息 ansible_os_family #系统家族 ansible_pkg_mgr #系统的包管理工具 ansible_processor #系统的cpu ansible_processor_cores #每颗cpu的核数 ansible_processor_count #cpu的颗数 ansible_processor_vcpus #cpu的个数=cpu的颗数*每颗cpu的核数 ansible_python #系统python信息 ansible_python_version #系统python的版本 ansible_system #系统名字
tags(打一个标签,可以指定单独的标签)
- hosts :web tasks: - name:install yum : name=redis - name: copyfile copy :dest=/etc/redis.conf src=/etc/redis.conf tags: copy - name: start service : name=redis state=started ansible-playbook -t copy p7.yml
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 sate=started handlers: - name :restart service :name =redis state=restarted
template(可以动态的传递参数,在setup获取)
绝对路径:
- hosts : web tasks: - name :install yum : name=redis - name :copyfile template: 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
mv redis.conf{,.j2} = mv redis.conf.j2
相对路径:
- hosts :web tasks: - name : install yum: name=redis - name : copyfile template :dest=/etc/redis.conf src=redis.conf.j2 tags: copy notify :restart - name: start service : name=redis state=started handlers: - name:restart service : name=redis state=restarted 在当前目录下创建一个templates的目录,就可以使用相对路径
when (判断 ,当满足when条件的时候,才执行函数,类似于选择)
- hosts :web tasks: - name : copyfile copy: content=‘大弦嘈嘈如急雨‘ dest=/tmp/a.txt when : ansible_distribution_major_version==‘7‘ - name : copyfile copy: content=‘小弦切切如私语‘ dest=/tmp/a.txt when : ansible_distribution_major_version==‘6‘ 当centos版本为7的时候,执行上面那句话; 否则,执行下面这句话
with_items(循环)
- hosts : web tasks: - name : createuser user: name={{item}} with_items: - alex50 - wusir50 - taibai50
- hosts : web
tasks:
-name :createuser
user: name={{item}}
with_items:
- alex51
- wusir51
- taibai51
- name: creategroup
group:name={{item}}
with_items:
- alex60
- wusir60
- taibai60
嵌套循环
- hosts : web tasks : - name : createuser user : name={{item.name}} group={{item.group}} with_items: - {‘name‘:alex52, ‘group‘: alex60} - {‘name‘:wusir52, ‘group‘:wusir52} - {‘name‘: taibai52, ‘group‘:taibai52}
原文:https://www.cnblogs.com/zty1304368100/p/10827490.html