playbook 中文件架构:
files: 此角色中用到的所有文件均放置到此目录,一般放置固定的配置文件
templates:Jinja2模板文件存放位置 ,一般存放变量文件
tasks : 任务列表文件,可以有多个,但至少有一个main.yml
handlers: 处理器列表文件;可以有多个,但至少有一个叫做main.yml的文件
vars: 变量字典文件,可以有多个,但至少main.yml
代码复用:
1.vim /etc/ansible/hosts
[mini]
129.139.153.78:16283
155.139.190.94:12573
2.vim /etc/ansible/test.yml
- hosts: mini
roles:
- test
3.mkdir /etc/ansible/roles/test/
4.cd /etc/ansible/roles/test/
ls
mkdir files tasks templates
执行剧本:
ansible-playbook --syntax-check /etc/ansible/ansible-play_book/test.yaml
ansible-playbook -C /etc/ansible/ansible-play_book/test.yaml
ansible-playbook /etc/ansible/ansible-play_book/test.yaml
单传的剧本执行,不需要配置复用:(不建议使用)
vim /root/test.yml
- hosts: web1
vars:
http_port:80
tasks:
- name:install httpd php
yum: name={{ item }} state=present
with_items:
- httpd
- php
- name: copy config file
template: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: start httpd
service: name=httpd state=started enabled=true
handlers:
- name: restart httpd
service: name=httpd state=restarted
playbook中调用变量的方式为{{ variable }}
ansible_os_family 是facts中内置的属性信息 ansible_os_family的信息可以使用ansible all -m setup | grep ansible_os_family 查看
在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表。with_items的具体用法
- name: create service directory
file: path=/data/{{ item }} state=directory mode=1777
with_items:
- service
- var
上面的意思是copy中复制过去的文件跟远程主机上的文件不同,就通过notify调用handlers,即重启httpd服务。
templates:用于生成文本文件(配置文件),模板文件中可使用jinja2表达式,表达式要定义在{{ }},也可以简单地仅执行变量替换。
剧本复用的执行方式:
vim /root/web1.yml
- hosts: web1
remote_user: root
roles:
- web1
- { role:web2, http_port:8080 }
hosts:web1 指在/etc/ansible/hosts中定义的组,上面有定义
roles: web1 指的是当前目录下的web1目录,也可通过role传递变量, 也可调用多个role
这样只需更改hosts的主机就可以实现不同主机的代码重用了
ansible的高级用法(推荐使用)
1.ansible主配置文件中
remote_port = 29133 #指定ssh 服务器的端口
host_key_checking = False #不进行key认证
2.
inventory 目录中存放主机列表
[tx]
192.168.18.5:29133
192.168.18.12:29133
bootstrap.yml 文件 内容
- hosts: "{{ target|default('bootstrap') }}"
roles:
- resolv
- pkg
- user
- dir
- supervisor
- filebeat
- conf
roles目录中存放各个角色内容
比如要执行某些角色的内容,可以执行:
ansible-playbook -i inventory/tmp bootstrap.yml -e target=tmp
这里就会执行bootstrap.yml文件中写定的角色内容
role.yml的文件内容:
- hosts: "{{ target }}"
roles:
- "{{ role }}"
serial: "{{ serial|default('100%') }}"
要想执行某个角色的内容:
ansible-playbook -i inventory/tmp role.yml -e target=tmp -e role=node_export
这样就可以执行角色是node_export了
免密配置:
ansible -i inventory/tmp tmp -m script -a 'auth.sh' -k (tmp为host列表)将认证公钥copy到目标机器
ansiable的重要链接:https://juejin.im/post/5b3a074d51882548bc3aa35e#heading-27
https://getansible.com/advance/playbook/zhu_ji_de_xi_tong_bian_liang