飞天使-linux操作的一些技巧与知识点6

文章目录

        • 在议playbook
        • 虚拟环境中安装ansible
        • playbook 结合变量的一些演示
          • 普通的vars_files 变量,在同级目录创建目录
          • 使用host_vars 定义变量
          • group_vars定义变量
          • 根据不同系统操作不同版本
          • 传递多个外置变量
          • 举例几个不同的示例
          • facts
          • when
          • loop
          • handlers 与 notify
          • tags 任务标签
          • 异常处理
            • nginx 的异常处理
          • jinja2
          • roles

在议playbook
主要是使用不同的模块进行编排
如果格式有问题,找chatgpt调整下格式输出就可以
缺点是比较死板,不能成体系 
虚拟环境中安装ansible
要在CentOS 7系统上让Ansible使用Python 3,你可以按照以下步骤进行操作:确认你的CentOS 7系统已安装Python 3。你可以通过在终端中运行python3 --version命令来检查是否已安装Python 3。安装Python 3的pip包管理工具。在CentOS 7上,你可以使用以下命令安装:sudo yum install python3-pip
安装python3-devel软件包以支持Python 3的开发库。运行以下命令进行安装:
sudo yum install python3-devel
创建一个Python 3虚拟环境(可选)。虚拟环境可以帮助你隔离Ansible所需的Python包与系统级安装的Python包。使用以下命令创建虚拟环境:
python3 -m venv ansible-env
激活虚拟环境:source ansible-env/bin/activate
安装Ansible和所需的Python包。在虚拟环境中运行以下命令:
pip install ansible
配置Ansible以使用Python 3。打开/etc/ansible/ansible.cfg文件,并找到以下行:
# interpreter_python = auto_silent
取消注释并将其更改为以下内容:interpreter_python = /usr/bin/python3
确认Ansible使用Python 3。运行以下命令来检查:
ansible --version
playbook 结合变量的一些演示
普通的vars_files 变量,在同级目录创建目录
- hosts: webserversvars_files:- ./test.ymltasks:- name: Output Varsdebug:msg:- "{{ http_packages }}"- "{{ db_packages }}"$cat test.yml
test: ansible_vars_files
http_packages: 123
db_packages: 123r返回结果
=> {"msg": [123,null]
}
注意: test.yml 一定要有这个变量,哪怕为空,否则报错test.yml 可以被多个playbook 引用vars_files:- ./test.yml
使用host_vars 定义变量
hosts 配置文件为 
[webservers]
1.1.1.1 aaa=2 bbb=master[webservers:vars]
port=80---
- hosts: webserverstasks:- name: output variablesdebug:msg: "{{ aaa }} {{ bbb }} {{ port }}"> {"msg": "2 master 80"
}
group_vars定义变量
在项目目录中创建 group_vars 目录,然后在创建一个文件,文件的文件名称要与
inventory 清单中的组名称保持完全一致;在 group_vars 目录中创建 webservers 文件,为 webservers 主机组设定变
量;"msg": [11,22]
}$cat group_vars/all
web: 11
web1: 22
(ansible-env)$cat t5.yml
- hosts: webserverstasks:- name: Output Vaiables"debug:msg:- "{{ web }}"- "{{ web1 }}"
根据不同系统操作不同版本

注意 www 用户是有sudo 权限 ---
- hosts: webserversbecome: yesbecome_user: wwwtasks:# 通过fact变量判断系统为centos才会安装httpd- name: Centos Install httpdyum: name=httpd state=presentwhen: (ansible_distribution == "CentOS")# 通过fact变量判断系统为ubuntu才会安装httpd2- name: Ubuntu Install httpdyum: name=httpd2 state=presentwhen: (ansible_distribution == "Ubuntu")
传递多个外置变量
ansible-playbook f5.yml -i hosts -e
"web_packages=GeoIP" -e "ftp_packages=telnet"
举例几个不同的示例
- hosts: alltasks:- name:shell: netstat -lntpregister: System_Status- name: Get System Statusdebug: msg={{System_Status.stdout_lines}}
- hosts: webserverstasks:- name: Output variables ansible factsdebug:msg: >this default IPv4 address "{{ ansible_fqdn}}" is "{{ ansible_default_ipv4.address }}"- hosts: alltasks:- name: Ignore Falsecommand: /bin/falseignore_errors: yes- name: touch new filefile: path=/tmp/old state=touch
facts
用来采集客户端信息,
ansible localhost -m setup -a "filter="ansible_default_ipv4""
when
when 判断在 Ansible 中的使用频率非常高;比如 yum 模块可以自动检测软件包是
否已被安装,而无需人为干涉,但对于有些任务则是需要进行判断才可以实现的。
比如: web 节点都需要配置 nginx 仓库,但其他节点并不需要,此时就会用到
when 判断。
比如: Centos 与 Ubuntu 都需要安装 Apache ,而 Centos 系统软件包为
httpd ,而 Ubuntu 系统软件包为 httpd2 ,那么此时就需要判断主机系统,然
后为不同的主机系统安装不同的软件包。hen: (ansible_hostname is match("web*"))
主机名不为web的不做任何处理
loop
loop 是重复
- hosts: web
tasks:
- name: Add Users
user:
name: {{ item.name }}
groups: {{ item.groups }}
state: present
loop:
- { name: 'testuser1', groups: 'bin' }
- { name: 'testuser2', groups: 'root' }- hosts: all
tasks:
- name: Configure Rsync Server
copy: src={{ item.src }} dest=/etc/{{ item.dest }} mode={{
item.mode }}
with_items:
- {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"}
- {src: "rsync.passwd", dest: "rsync.passwd", mode:
"0600"}
handlers 与 notify
Handlers 是一个触发器,同时是一个特殊的 tasks ,它无法直接运行,它需要被
tasks 通知后才会运行。比如: httpd 服务配置文件发生变更,我们则可通过
Notify 通知给指定的 handlers 触发器,然后执行相应重启服务的操作,如果配
置文件不发生变更操作,则不会触发 Handlers 任务的执行;如果配置文件发生变化会调用该handlers下面的对应名称的task
handlers:- name: Restart Httpd Serverservice: name=httpd state=restartedhandlers 注意事项
1.无论多少个 task 通知了相同的 handlers , handlers 仅会在所有
tasks 结束后运行一次。
2.只有 task 发生改变了才会通知 handlers ,没有改变则不会触发
handlers
3.不能使用 handlers 替代 tasks 、因为 handlers 是一个特殊的 tasks
tags 任务标签
默认情况下, Ansible 在执行一个 playbook 时,会执行 playbook 中所有的任
务。而标签功能是用来指定要运行 playbook 中的某个特定的任务;
1.为 playbook 添加标签的方式有如下几种:
对一个 task 打一个标签
对一个 task 打多个标签
对多个 task 打一个标签
2. task 打完标签使用的几种方式
-t 执行指定tag标签对应的任务
--skip-tags 执行除 --skip-tags 标签之外的所有任务ansible-playbook --skip-tags install_server
xxx.yml标签结合include  
[root@ansible ~]# cat main.yml
- hosts: localhost
tasks:
- name: Installed Tomcat8 Version
include: install_tomcat8.yml
tags: tomcat8
- name: Installed Tomcat9 Version
include: install_tomcat9.yml
tags: tomcat9
异常处理
- hosts: webserverstasks:- name: configure httpd servertemplate:src: ./httpd.conf.j2dest: /etc/httpd/conf/httpd.confnotify: Restart Httpd Server- name: Check HTTPDshell: /usr/sbin/httpd -tregister: httpd_checkfailed_when: httpd_check.rc != 0 or '"OK"' not in httpd_check.stdout- name: start httpd serverservice:name: httpdstate: startedenabled: yeshandlers:- name: Restart Httpd Serversystemd:name: httpdstate: restarted
nginx 的异常处理
- hosts: webservertasks:- name: Install Nginx Serveryum:name: nginxstate: present- name: Configure Nginx Servertemplate:src: ./nginx.conf.j2dest: /etc/nginx/nginx.confnotify: Restart Nginx Server- name: Check Nginx Servershell: /usr/sbin/nginx -tregister: check_nginxchanged_when: '"successful" in check_nginx.stdout'- name: Start Nginx Serverservice:name: nginxstate: startedenabled: yeshandlers:- name: Restart Nginx Serversystemd:name: nginxstate: restarted在这个标准格式的 Playbook 中,我们在"hosts"中指定了目标主机组,并定义了多个任务。每个任务都有一个名称以及对应的模块和参数。要解决场景1,即要求每台主机的端口都不一样,可以在 Jinja2 模板文件 (nginx.conf.j2) 中使用变量来动态设置端口号。例如,可以通过定义一个名为nginx_port的变量,并在模板文件中使用它来设置 Nginx 的监听端口。要解决场景2,即使用 Jinja2 模板来修改被管理主机的配置文件,我们使用了template模块。该模块会将指定的模板文件复制到远程主机,并在复制过程中解析文件中的变量值。在"Check Nginx Server"任务中,我们使用了changed_when来定义任务的改变条件。只有当检查 Nginx 配置的输出中包含"successful"时,任务才会被标记为已改变。最后,在处理程序部分,我们定义了一个名为"Restart Nginx Server"的处理程序,它会在被通知时使用systemd模块重启 Nginx 服务。请注意,Ansible Playbook 的格式要求严格,正确的缩进和符号使用非常重要。以上提供的输出已经按照标准格式进行了调整。
jinja2
Jinja2 是 Python 的全功能模板引擎
Ansible 需要使用 Jinja2 模板来修改被管理主机的配置文件。
ansible 使用 jinja2 模板需要借助 template 模块实现,那 template 模块是用
来做什么的?
template 模块和 copy 模块完全一样,都是拷贝文件至远程主机,区别在于
template 模块会解析要拷贝的文件中变量的值,而 copy 则是原封不动的将文件拷
贝至被控端。
roles
更加规范,更加标准的去灵活安排你维护的业务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/214291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx中的正则表达式及location和rewrite

目录 常用的Nginx 正则表达式 location和rewrite的区别 location location 大致可以分为三类 location 常用的匹配规则 location 优先级 location 示例说明 location优先级的总结 rewrite rewrite的功能 rewrite实现跳转的条件 rewrite的执行顺序 rewrite的语法格式…

ARM day3

题目&#xff1a;实现3盏灯的流水 代码&#xff1a; .text .global _start _start: 设置RCC寄存器使能 LDR R0,0X50000A28 LDR R1,[R0] ORR R1,R1,#(0X1<<4) ORR R1,R1,#(0X1<<5) STR R1,[R0]设置PE10管脚为输出模式 LDR R0,0X50006000 LDR R1,[R0] BIC R1,R1,…

文心ERNIE Bot SDK+LangChain:基于文档、网页的个性化问答系统

现在各行各业纷纷选择接入大模型&#xff0c;其中最火且可行性最高的形式无异于智能文档问答助手&#xff0c;而LangChain是其中主流技术实现工具&#xff0c;能够轻松让大语言模型与外部数据相结合&#xff0c;从而构建智能问答系统。ERNIE Bot SDK已接入文心大模型4.0能力&am…

如何使用Imagewheel本地搭建一个简单的的私人图床公网可访问?

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

Java:字符流 文件输出 与 读入 方法

Java&#xff1a;字节流 文件输出与读入方法 并 实现文件拷贝 文章目录 字符流FileReaderFileWrite 字符流 字符流底层就是字节流。 字符流 字节流 字符集 特点&#xff1a; 输入流&#xff1a;一次读入一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节。 输出流…

POJ-2777 Count Color

经典区间染色板子题 #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N 1e610; struct Segment{int l,r,id; }tr[N<<2]; int n,color,m;void pushdown(int u){if(tr[u].id){tr[u<<1].id tr[u<&l…

P5707 【深基2.例12】上学迟到题解

题目 学校和 yyy 的家之间的距离为s米&#xff0c;而 yyy 以v米每分钟的速度匀速走向学校。 在上学的路上&#xff0c;yyy 还要额外花费10分钟的时间进行垃圾分类。 学校要求必须在上午8:00到达&#xff0c;请计算在不迟到的前提下&#xff0c;yyy 最晚能什么时候出门。 由…

python中PDF2docx运行时出现错误提示:pixmap must be grayscale or rgb to write as png,怎样解决?

这是由于pixmap&#xff08;像素图&#xff09;的颜色空间不是灰度或RGB而导致的。可能是因为PDF2docx试图将不支持的颜色空间转换为PNG格式造成的。 要解决此问题&#xff0c;可以尝试以下几个步骤&#xff1a; 1.升级pdf2docx到最新版本。有时候最新版本已经解决了这个问题…

【影像组学入门百问】1#---#3

#1-影像组学的常规步骤是怎么样的&#xff1f; 传统影像组学的步骤包括&#xff1a; 1、影像获取及预处理&#xff1b; 2、感兴趣区(ROI)标定&#xff1b; 3、影像组学特征提取&#xff1b; 4、特征降维&#xff1b; 5、模型建立、优化。 #2-做影像组学用的电脑硬件配置有什么…

计算机视觉之手势、面部、姿势捕捉以Python Mediapipe为工具

计算机视觉之手势、面部、姿势捕捉以 Python Mediapipe为工具 文章目录 1.Mediapipe库概述2.手势捕捉(hands)3.面部捕捉(face)4.姿势捕捉(pose) 1.Mediapipe库概述 Mediapipe是一个开源且强大的Python库&#xff0c;由Google开发和维护。它提供了丰富的工具和功能&#xff0c…

ExecuteScalar()方法

ExecuteScalar()方法 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将深入探讨数据库编程中的一个关键主题——ExecuteScalar()方法&#xff…

stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头

stm32学习总结&#xff1a;3、Proteus8STM32CubeMXMDK很有搞头 文章目录 stm32学习总结&#xff1a;3、Proteus8STM32CubeMXMDK很有搞头一、前言二、资料收集三、实际案例-点灯1、Proteus8安装2、Proteus创建stm32F013C6项目并添加外围LED电路3、STM32CubeMX配置F103C6引脚生成…

12.10_黑马数据结构与算法笔记Java

目录 058 链表 e10 判环算法1 thinking&#xff1a;什么是空指针&#xff1f; 058 链表 e10 判环算法2 059 数组 e01 合并有序数组1 059 数组 e01 合并有序数组2 060 队列 链表实现1 061 队列 链表实现2 062 队列 环形数组实现 方法1-1 063 队列 环形数组实现 方法1-2…

带有 RaspiCam 的 Raspberry Pi 监控和延时摄影摄像机

一、说明 一段时间以来&#xff0c;我一直想构建一个运动激活且具有延时功能的树莓派相机&#xff0c;但从未真正找到我喜欢的案例。我在thingiverse上找到了这个适合树莓派和相机的好案例。它是为特定的鱼眼相机设计的&#xff0c;但从模型来看&#xff0c;我拥有的廉价中国鱼…

【Vulnhub 靶场】【Hackable: III】【简单 - 中等】【20210602】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/hackable-iii,720/ 靶场下载&#xff1a;https://download.vulnhub.com/hackable/hackable3.ova 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年06月02日 文件大小&#xff1a;1.6 GB 靶场作者&…

k8s常用操作命令

目标 了解 Kubernetes基础命令。对已部署的应用故障排除。 基础命令&#xff1a;create&#xff0c;delete&#xff0c;get&#xff0c;run&#xff0c;expose&#xff0c;set&#xff0c;explain&#xff0c;edit create 命令&#xff1a;根据文件或者输入来创建资源 # 创建…

消融实验:深度学习的关键分析工具

消融实验&#xff1a;深度学习的关键分析工具 在深度学习和机器学习领域&#xff0c;消融实验&#xff08;Ablation Study&#xff09;是一种重要的实验方法&#xff0c;用于理解和评估模型的各个组成部分对其整体性能的贡献。通过这种方法&#xff0c;研究人员可以更深入地了…

Docker | 自定义网络

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Docker系列 ✨特色专栏: MySQL学习 🥭本文内容: Docker | 自定义网络 📚个人知识库: 知识库,欢迎大家访问 1.前言 大家好,我是Leo哥…

当视觉遇到毫米波雷达:自动驾驶的三维目标感知基准

​ 文章&#xff1a;Vision meets mmWave Radar: 3D Object Perception Benchmark for Autonomous Driving 作者: Yizhou Wang, Jen-Hao Cheng, Jui-Te Huang , Sheng-Yao Kuan , Qiqian Fu , Chiming Ni 编辑&#xff1a;点云PCL 欢迎各位加入知识星球&#xff0c;获取PDF…

vector类

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉vector库 > 毒鸡汤&#xff1a;从人生低谷…