当前位置: 首页 > news >正文

【星海出品】ansible入门(二) playbook

核心是管理配置进行批量节点部署。

执行其中的一些列tasks。
playbook由YAML语言编写。

YAML的格式如下:
文件名应该以 .yml 结尾

1.文件的第一行应该以“—”(三个连字符)开始,表明YAML文件的开始。
2.在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
3.YAML中的列表元素以“-”开头并且跟着一个空格。后面为元素内容。
4.同一个列表之中的元素应该保持相同的缩进,否则会被当做错误处理。
5.play中hosts、variables、roles、tasks等对象的表示方法都是以键值中间以“:”分隔表示,并且“:”之后要加一个空格。

---
- hosts: node1 #hosts指示使用哪个主机或者主机组来运行下面的tasks,host也可以使用通配符格式.remote_user: root #remote_user:指定远端主机的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应的task权限。tasks: #执行的核心- name: install mysql-server packageyum: name=mysql-server state=present- name: starting mysqld serviceservice: name=msyql state=started

一。主机或者主机组在inventorry清单中指定,可以使用系统默认的/etc/ansible/hosts
也可以自己编辑,在运行的时候加上-i 选项指定清单的位置。
在运行清单文件的时候, --list-hosts选项会显示哪些主机将会参与执行task的过程中。
二。使用ansible-playbook运行playbook文件,得到的输出信息中,信息内容为JSON格式,并且由不同的颜色组成,便于识别。

[root@ansible ansible]# ansible-playbook roles.yml 

如何定义一个role

[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# ls
ansible.cfg  hosts  nginx.yml  roles

Mkdir:创建文件夹
Mkdir -p :创建嵌套式文件夹
Mkdir -v :显示过程
Mkdir -pv:同时创建多个文件夹

roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制

[root@ansible roles]# ls
[root@ansible roles]# mkdir -pv ./{nginx,mysql,httpd}/{files,templates,vars,tasks,handlers,meta,default}
[root@ansible roles]# tree 
.
├── httpd
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
├── mysql
│   ├── default
│   ├── files
│   ├── handlers
│   ├── meta
│   ├── tasks
│   ├── templates
│   └── vars
└── nginx├── default├── files├── handlers├── meta├── tasks├── templates└── vars[root@ansible nginx]# pwd
/etc/ansible/roles/nginx

用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中;
files目录:存放由copy或script等模块调用的文件;
templates目录:templates模块会自动在此目录中寻找Jinja2模板文件;
tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件;
handlers目录:此目录中应当包含一个main;
vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;ansible 1.3及其以后的版本才支持
default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;

.
├── default
├── files
│   └── nginx-1.18.0-1.el7.ngx.x86_64.rpm
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
│   └── nginx.conf.j2
└── vars└── main.yml
[root@ansible ]# cp /var/cache/yum/x86_64/7/nginx/packages/nginx.rpm /etc/ansible/roles/nginx/files/
[root@ansible ]# cp /tmp/nginx.conf.j2 /etc/ansible/roles/nginx/templates/
[root@ansible nginx]# ls tasks/
main.yml
[root@ansible nginx]# cat tasks/main.yml 
- name: cpcopy: src=nginx.rpm dest=/tmp/nginx.rpm
- name: installyum: name=/tmp/nginx.rpm state=latest
- name: conftemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conftags: nginxconfnotify: new conf to reload
- name: start serviceservice: name=nginx state=started enabled=true

修改变量文件

cat vars/main.yml
nginxport: 9999

定义handlers文件

[root@ansible nginx]# cat handlers/main.yml 
- name: new conf to reloadservice: name=nginx state=restarted
[root@ansible ansible]# pwd
/etc/ansible
[root@ansible ansible]# cat roles.yml 
- hosts: webremote_user: rootroles:- nginx
[root@ansible nginx]# cat handlers/main.yml 
- name: new conf to reloadservice: name=nginx state=restarted
[root@ansible nginx]# cat tasks/main.yml 
- name: cpcopy: src=nginx-1.18.0-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm
- name: installyum: name=/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm state=latest
- name: conftemplate: src=nginx.conf.j2 dest=/etc/nginx/nginx.conftags: nginxconfnotify: new conf to reload
- name: start serviceservice: name=nginx state=started enabled=true
[root@ansible nginx]# cat templates/nginx.conf.j2 user  nginx;
worker_processes  1;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;
server {listen  {{ nginxport }};
}include /etc/nginx/conf.d/*.conf;
}
[root@ansible nginx]# cat vars/main.yml 
nginxport: 9999
http://www.lryc.cn/news/184560.html

相关文章:

  • Spring Boot对账号密码进行加密储存
  • 总结js中常见的层次选择器
  • 阿里云ECS服务器上启动的portainer无法访问的问题
  • JavaScript系列从入门到精通系列第十八篇:JavaScript中的函数作用域
  • 开环模块化多电平换流器仿真(MMC)N=6(Simulink仿真)
  • [C]嵌入式中变量存储方案
  • 热迁移中VirtIO-PCI设备的配置空间处理
  • 模拟滤波器的基础知识和设计
  • 机器学习基础-Pandas学习笔记
  • 【GIT版本控制】--协作流程
  • 简析Cookie、Session、Token
  • 加速attention计算的工业标准:flash attention 1和2算法的原理及实现
  • 小程序获取用户手机号
  • Zama的fhEVM:基于全同态加密实现的隐私智能合约
  • Mac M1安装ROS1或ROS2
  • [NISACTF 2022]popchains - 反序列化+伪协议
  • 分贝定义简介
  • socket简介
  • 【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023
  • 七、互联网技术——SQL查询
  • 1.6 计算机网络的性能
  • 小程序中如何核销订单和优惠券
  • 211 毕业就入职 30 人的小公司是什么体验
  • aardio 读取 Excel文件,显示在 listview 中
  • Web:前端常用的几种Http请求GET和POST样例
  • clickonce 发布的winform 如何CA认证?
  • #力扣:13. 罗马数字转整数@FDDLC
  • React18入门(第一篇)——JSX、TSX语法详解
  • 【计算机基础知识】字符的编码表示
  • 【面试题精讲】Java字符型常量和字符串常量的区别?