Ansible 使用高级进阶
来源:互联网 发布:软件咨询服务合同书 编辑:程序博客网 时间:2024/05/23 01:16
Ansible 使用高级进阶
实验环境
分组:srvs
组内成员主机名、系统版本及IP
node1 CentOS-7-Core 172.16.253.184node2 CentOS-7-Core 172.16.254.89node3 CentOS-7-Core 172.16.253.47node4 CentOS-6-Core 172.16.253.30
playbook的迭代功能
- 简单的item使用
---- hosts: srvs remote_user: root tasks: - name: copy files tags: copy when: ansible_distribution_major_version == "7" copy: src=/root/ansible/{{ item }} dest=/tmp/{{ item }} with_items: - httpd.conf - httpd.conf.j2 - httpd-manager.yml - httpd-manager-j2.yml
- item 多重使用
注意:playbook文件内容格式要求非常严格,{ user: “test1” , group: “wheel” }中, user: 与 “test1” 之间有空格
---- hosts: srvs remote_user: root tasks: - name: add users tags: addusers when: ansible_distribution_major_version == "7" user: name={{ item.user }} group={{ item.group }} state=present with_items: - { user: "test1" , group: "wheel" } - { user: "test2" , group: "root" }
ansible之roles
ansible的roles用于层次性、结构化地组织palybook。roles能够根据层次型结构自动装载变量文件、tasks及handlers等。要使用roles只需要playbook中使用include指令即可。roles的应用场景
- 变更指定主机或主机分组
- 因不规范造成的维护困难或传承成本大
- 某些功能集需includes多个playbook方可实现
- 代码复用度较高时
roles的组成
root@node1 playbook]# tree roles/roles/ \\ansible所有的信息都放到此目录下面对应的目录中└── nginx \\角色名称 ├── default \\为当前角色设定默认变量时使用此目录,应当包含一个main.yml文件; ├── files \\存放有copy或script等模块调用的文件 ├── handlers \\此目录总应当包含一个main.yml文件,用于定义各角色用到的各handler ├── meta \\应当包含一个main.yml,用于定义角色的特殊设定及其依赖关系;1.3及以后版本支持 ├── tasks \\至少包含一个名为main.yml的文件,定义了此角色的任务列表,可使用include指令 ├── templates \\template模块会自动在此目录中寻找Jinja2模板文件 └── vars \\应当包含一个main.yml文件,用于定义此角色用到的变量
用ansible的roles来配置nginx服务
定义hosts分组
vim /etc/ansible/hosts[srvs:vars]webport=80[srvs]172.16.253.184 webport=10080 172.16.254.89 webport=10180172.16.253.47 webport=10280 172.16.253.30 webport=10380
创建roles组织结构
#创建调用roles 的 .yml 文件touch /root/ansible/nginx.yml#创建roles目录结构mkdir -pv nginx/{files,tasks,templates,vars,handlers,meta,default}
建立roles:nginx
- 定义调用哪个roles的使用范围及用户
vim /root/ansible/nginx.yml---- hosts: srvs remote_user: root roles: - nginx
- 在 main.yml 文件中定义roles调用的原子级功能模块:install , config + restart
#在 main.yml 中定义roles调用功能vim /root/ansible/roles/nginx/tasts/main.yml---- include: install.yml- include: config.yml- include: stop.yml
- 建立各原子级功能
#定义install功能vim /root/ansible/roles/nginx/tasts/install.yml---- name: install yum: name=nginx state=present#定义config功能vim /root/ansible/roles/nginx/tasts/config.yml---- name: template template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: restart nginx#定义stop的功能vim /root/ansible/roles/nginx/tasts/stop.yml---- name: stop nginx service: name=nginx state=stopped
- 建立handlers功能
vim /root/ansible/roles/nginx/handlers/main.yml---# handlers file for nginx- name: restart nginx service: name=nginx state=restarted
- 建立nginx配置文件的 .j2 模板
此步骤可以先在master主机上安装nginx,获取nginx的默认配置文件并修改成为 .j2 模板文件
#先制作原始配置文件的备份cp /etc/nginx/nginx.conf /root/ansible/roles/nginx/files/nginx.conf.bak#使用原始配置文件制作 .j2 模板文件cp /etc/nginx/nginx.conf /root/ansible/roles/nginx/templates/nginx.conf.j2vim /root/ansible/roles/nginx/templates/nginx.conf.j2#修改原始配置文件的 server{ }配置段 如下:{% for vport in vports %} server { listen {{ vport }}; server_name {{ ansible_hostname }}.achudk.com; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }{% endfor %}
- 创建变量文件
vim /root/ansible/roles/nginx/vars/main.yml---# vars file for nginxvports: - 80 - 8080
nginx的组织结构树状图
- ==nginx的组织树状图==
[root@node1 roles]# tree /root/ansible/roles/nginx/nginx/├── default├── files│ └── nginx.conf.bak├── handlers│ └── main.yml├── meta├── tasks│ ├── config.yml│ ├── install.yml│ ├── main.yml│ └── stop.yml├── templates│ └── nginx.conf.j2└── vars └── main.yml
- 验证结果
ansible-playbook /root/ansible/nginx.ymlPLAY [srvs] ********************************************************************TASK [Gathering Facts] *********************************************************ok: [172.16.254.89]ok: [172.16.253.30]ok: [172.16.253.184]ok: [172.16.253.47]TASK [nginx : install] *********************************************************changed: [172.16.253.30]changed: [172.16.253.47]changed: [172.16.253.184]changed: [172.16.254.89]TASK [nginx : template] ********************************************************changed: [172.16.253.30]changed: [172.16.253.47]changed: [172.16.253.184]changed: [172.16.254.89]TASK [nginx : stop nginx] ******************************************************ok: [172.16.253.30]ok: [172.16.253.47]ok: [172.16.254.89]ok: [172.16.253.184]RUNNING HANDLER [nginx : restart nginx] ****************************************changed: [172.16.253.30]changed: [172.16.253.47]changed: [172.16.253.184]changed: [172.16.254.89]PLAY RECAP *********************************************************************172.16.253.184 : ok=5 changed=3 unreachable=0 failed=0 172.16.253.30 : ok=5 changed=3 unreachable=0 failed=0 172.16.253.47 : ok=5 changed=3 unreachable=0 failed=0 172.16.254.89 : ok=5 changed=3 unreachable=0 failed=0
更多高级用法请参照《Ansible中文权威指南》
- http://ansible.com.cn/
阅读全文
0 0
- Ansible 使用高级进阶
- Ueditor使用教程(高级进阶)
- ansible高级用法
- ansible使用
- ansible使用
- solrj入门及进阶,高级使用
- solrj入门及进阶,高级使用
- solrj入门及进阶,高级使用
- 高级进阶
- 使用redis加速ansible
- python2.7使用ansible
- 安装和使用ansible
- ansible文件模块使用
- ansible条件使用--实践
- ansible使用注意事项
- Ansible简易使用
- ansible 配置使用
- Ansible 使用笔记
- JS-2-作用域
- 迁移到Thymeleaf3.x,布局方言2.x
- 机器学习:深度信念网络(DBN)原理和实现
- ubuntu 16.04, caffe, matlab2016b 安装
- Feature Pyramid Networks for Object Detection
- Ansible 使用高级进阶
- PAT甲级真题及训练集(24)--1004. Counting Leaves (30)
- 动态网格
- c++实现双向循环链表
- 图像压缩算法
- WebService学习
- eclipse javaweb 常见报错解决方案
- 【Unity3d】查看引用资源的文件
- ElasticSearch使用SQL