回炉重造十一------ansible批量安装服务

news/2025/3/14 21:39:21/

1.playbook的核心组件

  • Hosts 执行的远程主机列表
  • Tasks 任务集,由多个task的元素组成的列表实现,每个task是一个字典,一个完整的代码块功能需最
    少元素需包括 name 和 task,一个name只能包括一个task
  • Variables 内置变量或自定义变量在playbook中调用
  • Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
  • Handlers 和 notify 结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行
  • ags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幂等性,因此
    会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地
    长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

1.1ansible命令执行过程

1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
2. 加载自己对应的模块文件,如:command
3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
4. 给文件+x执行
5. 执行并返回结果
6. 删除临时py文件,退出

1.2 ansible常用工具

ansible-vault
ansible-galaxy
ansible-vault [create|decrypt|edit|encrypt|rekey|view]
ansible-vault encrypt hello.yml #加密
ansible-vault decrypt hello.yml #解密
ansible-vault view hello.yml #查看
ansible-vault edit hello.yml #编辑加密文件
ansible-vault rekey hello.yml #修改口令
ansible-vault create new.yml #创建新文件

1.3host组件

1.3.1概念:

aybook中的每一个play的目的都是为了让特定主机以某个指定的用户身份执行任务。hosts用
于指定要执行指定任务的主机,须事先定义在主机清单中

1.3.2 host文件的书写

[servera]  #组名
172.17.8.1
172.17.8.2
172.17.8.3[serverb]
172.17.8.1
172.17.8.4
172.17.8.5[serverc]
servera:serverb  #取servera和serverb的并集
#相当于
172.17.8.1
172.17.8.2
172.17.8.3
172.17.8.4
172.17.8.5[serverd]
servera:&server #取servera和serverb组的交集
servera:!serverb #在serevra中但不在serverb中

1.2 task列表和action组件

1.2.1 概念

play的主体部分是task list,task list中有一个或多个task,各个task 按次序逐个在hosts中指定的所有主
机上执行,即在所有主机上完成第一个task后,再开始第二个task,task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致.每个task都应该有其name,用于playbook的执行结果输出,建议其内容能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出。

1.2.2 task格式

tasks:- name: install httpdyum: name=httpd#或者
tasks:- name: install httpdyum: name: httpd

2.编写playbook文件

2.1playbook的命令

--syntax-check    #语法检查,可缩写成--syntax, 相当于bash -n
-C --check #模拟执行,只检测可能会发生的改变,但不真正执行操作,dry run
--list-hosts   #列出运行任务的主机
--list-tags #列出tag
--list-tasks #列出task
--limit 主机列表 #只针对主机列表中的特定主机执行
-i INVENTORY     #指定主机清单文件,通常一个项对应一个主机清单文件
--start-at-task START_AT_TASK #从指定task开始执行,而非从头开始,START_AT_TASK为任务的
name
-v -vv  -vvv #显示过程

2.2setup变量的调用

查看远程主机默认的setup变量
ansible 172.17.8.11 -m setup
#常用的setup变量
"ansible_facts": {"ansible_all_ipv4_addresses": ["172.17.8.11"],"ansible_default_ipv4": {"address": "172.17.8.11", "alias": "eth0", "broadcast": "172.17.8.255", "gateway": "172.17.8.2", "interface": "eth0", "macaddress": "00:0c:29:87:53:a2", "mtu": 1500, "netmask": "255.255.255.0", "network": "172.17.8.0", "type": "ether"#调用setup中的变量格式:{{ 变量名["变量名下的分支"] }}- hosts: hosttasks:- name: show host ipfile: path: /data/{{ ansible_default_ipv4["address"] }}_{{ ansible_date_time["date"] }}.log  state: touch

2.3文件中定义变量

#调用文件中的变量
vim var1.yml
---
- hosts: hostvars:  #定义变量user: weng  #变量名:定义变量的值group: shiqiangtasks:- name: print debug debug:msg: my name is {{ user }} ,my group is {{ group }}  #{{ $name }}引用变量 #文件中的变量相互调用
---- hosts: hostremote_user: rootvars:collect_info: "/data/test/{{ansible_default_ipv4['address']}}/"tasks:- name: create IP directoryfile: name="{{collect_info}}" state=directory#使用变量文件vim vars.yml
---
# variables file
package_name: mariadb-server
service_name: mariadb
vim var5.yml
---
#install package and start service
- hosts: dbsrvs
remote_user: root
vars_files:- vars.yml
tasks:- name: install packageyum: name={{ package_name }}tags: install- name: start serviceservice: name={{ service_name }} state=started enabled=yes

3、实战案例

3.1 基于角色安装mysql5.6

[root@dns-master ansible]# tree
.
├── mysql_role.yml
├── nginx
└── roles └── mysql├── files     #存放数据库的配置文件和安装包│   ├── my.cnf  #配置文件│   └── mysql-8.0.25-el7-x86_64.tar.gz  #mysql的安装包├── tasks  #任务列表│   ├── group.yml   │   ├── init_data.yml│   ├── install.yml│   ├── linksoft.yml│   ├── main.yml  #任务列表│   ├── mysql.conf.yml│   ├── path.yml│   ├── service.yml│   ├── start_file.yml│   ├── unarchive.yml│   └── user.yml└── vars└── main.yml  #定义变量参数[root@dns-master tasks]# cat main.yml 
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: linksoft.yml
- include: mysql.conf.yml
- include: init_data.yml
- include: path.yml
- include: start_file.yml
- include: service.yml[root@dns-master tasks]# cat group.yml 
- name: create group mysqlgroup:name: mysqlgid: 306[root@dns-master tasks]# cat user.yml 
- name: create mysql useruser:name: mysqluid: 306group: mysql[root@dns-master tasks]# cat unarchive.yml 
- name: copy tar to remote host and file modeunarchive:src: /data/ansible/roles/mysql/files/{{ mysql_file }}dest: /usr/local/srcgroup: mysqlowner: mysql[root@dns-master tasks]# cat linksoft.yml
- name: create linkfile  /usr/local/src/mysqlfile:src: /usr/local/src/mysql-8.0.25-el7-x86_64dest: /usr/local/src/mysqlstate: linkgroup: mysqlowner: mysql[root@dns-master tasks]# cat mysql.conf.yml
- name: create mysql configcopy:src: /data/ansible/roles/mysql/files/my.cnfdest: /etc/my.cnf[root@dns-master tasks]# cat init_data.yml
- name: data dirshell: /usr/local/src/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/app/mysql  --basedir=/usr/local/src/mysql[root@dns-master tasks]# cat path.yml
- name: PATHcopy:content: 'PATH={{dest_file}}/mysql/bin:$PATH'dest: /etc/profile.d/mysql.sh[root@dns-master tasks]# cat start_file.yml 
- name: create start mysql fileshell: /bin/cp {{dest_file}}/mysql/support-files/mysql.server /etc/init.d/mysqld;sed -Ei 's#^(basedir=)$#\1\/usr\/local\/src\/mysql#' /etc/init.d/mysqld;sed -Ei 's#^(datadir=)$#\1\/app\/mysql#' /etc/init.d/mysqld[root@dns-master tasks]# cat service.yml 
- name: start mysqlshell: chkconfig --add mysqld;/etc/init.d/mysqld start

关于ansible常用的模块功能,之前做过总结这里就不做总结了,后面还会继续改进,有的案例和内容还没总结好。先凑合这看


http://www.ppmy.cn/news/57999.html

相关文章

springboot第15集:MyBatis分页

我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率? 是的,输出 SQL 可以帮助我们更好地理解代码的执行流程和结果。在控制台输出 SQL 可以让我们看到实际执行的 SQL 语句,这样就能够更…

Scalable Vector Graphics (SVG)中的svg、clipPath、mask元素

Scalable Vector Graphics (SVG)是一种用于描述二维向量图形的XML基础标记语言。使用SVG可以实现丰富的图形效果,而不需要像使用位图那样考虑分辨率和像素密度的问题,可以在不同设备上展示出相同的高质量图像。 在SVG中,除了基本形状如circl…

【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计

【人工智能】— 不确定性 不确定性不确定性与理性决策基本概率符号先验概率(无条件概率)/后验概率(条件概率)随机变量概率密度联合概率分布公理完全联合分布概率演算独立性 贝叶斯法则例1例2 使用贝叶斯规则:合并证据朴素贝叶斯最大似然估计小结 不确定性 不确定性与…

码出高效:Java开发手册笔记(线程池及其源码)

码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码) 码出高效:Java开发手册笔记(线程池及其源码)前言一、线程池的作用线程的生命周…

Sentinel源码分析学习

文章目录 前言Sentinel源码分析1.Sentinel的基本概念1.1.ProcessorSlotChain1.2.Node1.3.Entry1.3.1.自定义资源1.3.2.基于注解标记资源 1.4.Context1.4.1.什么是Context1.4.2.Context的初始化1.4.2.1.自动装配1.4.2.2.AbstractSentinelInterceptor1.4.2.3.ContextUtil 2.Proce…

【网络进阶】服务器模型Reactor与Proactor

文章目录 1. Reactor模型2. Proactor模型3. 同步IO模拟Proactor模型 在高并发编程和网络连接的消息处理中,通常可分为两个阶段:等待消息就绪和消息处理。当使用默认的阻塞套接字时(例如每个线程专门处理一个连接),这两…

clion--cmake内置常量---打算一锅端了

# cmakelists.txt文件讲解&#xff0c;以下语意不是都在同一个cmakelists.txt message("${CMAKE_SOURCE_DIR} 是工程终极父级目录") message("${CMAKE_BINARY_DIR} 是CMAKE_SOURCE_DIR下的一个cmake_build_<buildtype>目录") message("${PROJEC…

检查替换后的词是否有效

题目描述 给你一个字符串 s &#xff0c;请你判断它是否 有效 。 字符串 s 有效 需要满足&#xff1a;假设开始有一个空字符串 t “” &#xff0c;你可以执行 任意次 下述操作将 t 转换为 s &#xff1a; 将字符串 “abc” 插入到 t 中的任意位置。形式上&#xff0c;t 变为…