playbook脚本文件后缀.yml(.yaml)
作用:找某个主机组[hosts]干某件事[tasks]
- hosts: serversgroup
tasks:
脚本写完做检查语法:(在线效验:https://www.bejson.com/validators/yaml_editor/)
ansible-playbook --syntax playbook.yam
模拟演练检测运行是否报错:
ansible-playbook -C --syntax playbook.yam
1.yml语法格式
1)缩进 yaml使用固定缩进表示层结构,每个缩进俩空格,不能使用tab键
2)冒号 以冒号结尾的除外,冒号后必须有空格
3)短横线 表示列表项使用一个短横线加一个空格,多个项使用同样的缩进级别作为同一个列表
2.脚本copy.yml示例
- hosts: servers
tasks:
- name: COPY FILE
copy: src=./hosts.cfg dest=/root backup=yes
测试运行:ansible-playbook -i hosts.cfg --syntax copy.yml
模拟演练:ansible-playbook -i hosts.cfg -C --syntax copy.yml
运行:ansible-playbook -i hosts.cfg copy.yml
3.ansible变量
1)定义变量
变量名:值
①通过playbook文件中的play定义(关键字:vars)
vars:
- key1: value1
- key2: value2
示例:
- hosts: servers
vars:
- file_name: file
- file_name2: file
tasks:
- name: COPY FILE
copy: src=/root/ansible/project/{{ file_name }} dest=/root/{{ file_name2 }}
运行:ansible-playbook -i hosts.cfg vars_1.yaml
②通过inventory主机清单定义
在同级目录下创建./group_vars 组目录
在同级目录下创建./group_vars/all 文件
文件里写(可直接用)
key1: value1
key2: value2
③通过执行playbook时使用-e指定变量
ansible-playbook -i hosts.cfg vars_1.yaml -e "file_name=file" -e "file_name2=file"
示例:
- hosts: "{{ serversgroup }}"
tasks:
- name: COPY FILE
copy: src=/root/ansible/project/file dest=/root/file
运行:ansible-playbook -i hosts.cfg vars_2.yaml -e "serversgroup=servers"
2)变量优先级
①-e 外置传参
②playbook(vars_files --> vars)
③inventory(host_vars --> group_vars/group_name --> group_vars/all)
4.register变量(变量注册)
ansible-playbook 不会返回显示结果
例如:
这条命令可以返回结果
命令:ansible servers -m shell -a 'ss -ntlp|grep nginx' -i hosts.cfg
但是下面不会返回结果
- hosts: servers
tasks:
- name: COPY FILE
shell: ss -ntlp|grep nginx
命令:ansible-playbook -i hosts.cfg reguster.yaml
1)示例:msg字典形式
(把结果存进变量check_nginx,使用debug模块打印出来)
- hosts: servers
tasks:
- name: COPY FILE
shell: ss -ntlp|grep nginx
register: check_nginx
- name: OUTPUT Varuabkes
debug:
msg: "{{ check_nginx }}"
命令:ansible-playbook -i hosts.cfg reguster.yaml
改进:(打印某一处 使用.)
- hosts: servers
tasks:
- name: COPY FILE
shell: ss -ntlp|grep nginx
register: check_nginx
- name: OUTPUT Varuabkes
debug:
msg: "{{ check_nginx.stdout }}"
5.facts变量(默认是开启的,采集被控端状态指标 IP 主机名称 cpu信息 内存 等等 )
查看获取的指标信息及使用变量
ansible servers -i hosts.cfg -m setup
过滤查找某个(只能一层,不支持.)
ansible servers -i hosts.cfg -m setup -a "filter=ansible_lsb"
1)示例:打印使用的系统
- hosts: servers
tasks:
- name: OUTPUT Varuabkes facts
debug:
msg: "{{ ansible_lsb.description }}"
命令:ansible-playbook -i hosts.cfg facts.yaml
2)示例:打印多个变量内容
- hosts: servers
tasks:
- name: OUTPUT Varuabkes facts
debug:
msg: "{{ ansible_lsb.description }} and {{ ansible_default_ipv4.address }}"
3)示例:修改某个配置文件里面的某处为自己的主机名(template模块和copy使用一样,但会把变量转换)
echo 'hostname={{ ansible_fqdn }} ' > test.test
- hosts: servers
tasks:
- name: change configure file
template: src=./test.test dest=/root
命令:ansible-playbook -i hosts.cfg facts.yaml
6. 修改主机名
- hosts: servers
tasks:
- name: check hostname
hostname: name=you_name
标签:脚本,name,vars,cfg,ansible,hosts,playbook,编写 From: https://www.cnblogs.com/circlecircle/p/18425645