Ansible概述、Ansible环境准备、Ansibleadhoc临时命令语法、命令模块、文件模块、用户模块、综合练习

ansible

  • 批量管理服务器的工具
  • 2015年被红帽公司收购
  • 使用Python语言编写的
  • 基于ssh进行管理,所以不需要在被管端安装任何软件
  • ansible在管理远程主机的时候,主要是通过各种模块进行操作的

环境准备

主机名IP地址角色
web1192.168.88.11被控制节点(webserver)
web2192.168.88.12被控制节点(webserver)
db1192.168.88.13被控制节点(database)
pubserver192.168.88.240控制节点(manager)
  • 4台主机,需要配置主机名、IP地址、YUM。关闭SELINUX和防火墙
# 创建3台主机并配置IP地址。pubserver不需要单独准备,继续使用之前课程中的192.168.88.240。[root@myhost ~]# vm clone web{1,2} db1[root@myhost ~]# vm setip web1 192.168.88.11[root@myhost ~]# vm setip web2 192.168.88.12[root@myhost ~]# vm setip db1 192.168.88.13# 在192.168.88.240上配置yum源# 将/linux-soft/s2/目录下的ansible目录中rpm包拷贝到yum服务器的rpms目录[root@myhost ~]# scp /linux-soft/s2/zzg/ansible_soft/* 192.168.88.240:/var/ftp/rpms# 更新yum服务器仓库源[root@pubserver ~]# createrepo /var/ftp/rpms/# 4台主机的yum全为以下配置[root@pubserver ~]# vim /etc/yum.repos.d/local.repo[BaseOS]name = BaseOSbaseurl = ftp://192.168.88.240/dvd/BaseOSenabled = 1gpgcheck = 0[AppStream]name = AppStreambaseurl = ftp://192.168.88.240/dvd/AppStreamenabled = 1gpgcheck = 0[rpms]name = rpmsbaseurl = ftp://192.168.88.240/rpmsenabled = 1gpgcheck = 0
  • 安装ansible
[root@pubserver ~]# yum install -y ansible
  • 配置控制节点pubserver,具体要求如下:

    • 配置名称解析,能够通过名字访问所有节点
    • 配置可以通过ssh到所有节点免密登陆
# 配置名称解析[root@pubserver ~]# echo -e "192.168.88.240\tpubserver" >> /etc/hosts[root@pubserver ~]# for i in 1 2> do> echo -e "192.168.88.1$i\tweb$i" >> /etc/hosts> done[root@pubserver ~]# echo -e "192.168.88.13\tdb1" >> /etc/hosts[root@pubserver ~]# tail -4 /etc/hosts192.168.88.240   pubserver192.168.88.11    web1192.168.88.12    web2192.168.88.13    db1# 配置免密登陆[root@pubserver ~]# ssh-keygen   # 三个问题都直接回车,使用默认值# 执行以下命令时,可能需要回答yes和远程用户的密码,请按提示操作[root@pubserver ~]# for i in web{1..2} db1> do> ssh-copy-id $i> done

配置ansible管理环境

  • 使用一套ansible软件,有可能需要管理多种环境。如在同一台管理主机上管理开发环境和生产环境。
  • 通过创建不同的工作目录,来实现相应的管理需求。
  • 将某一环境下的主机写入到对应工作目录的主机清单文件。
  • 进入对应的工作目录执行管理任务,就可以管理相应环境的主机。
# 创建ansible工作目录,目录名自己定义,不是固定的。[root@pubserver ~]# mkdir ansible[root@pubserver ~]# cd ansible# 创建配置文件。默认的配置文件是/etc/ansible/ansible.cfg,但是一般不使用它,而是在工作目录下创建自己的配置文件[root@pubserver ansible]# vim ansible.cfg    # 文件名必须是ansible.cfg[defaults]host_key_checking = false   # 不检查主机密钥,=号两边空格可有可无。inventory = inventory       # 定义主机清单文件为当前目录的inventory# 创建主机清单文件。写在[]里的是组名,[]下面的是组内的主机名[root@pubserver ansible]# vim inventory[webservers]web[1:2]   # web1和web2的简化写法,表示从1到2[dbs]db1# cluster是组名,自定义的;:children是固定写法,表示下面的组名是cluster的子组。[cluster:children]webserversdbs# 查看被管理的所有的主机。注意,一定在工作目录下执行命令。[root@pubserver ansible]# ansible all --list-hostshosts (3):web1web2db1# 查看webservers组中所有的主机[root@pubserver ansible]# ansible webservers --list-hostshosts (2):web1web2

ansible管理

  • ansible进行远程管理的两个方法:

    • adhoc临时命令。就是在命令行上执行管理命令。
    • playbook剧本。把管理任务用特定格式写到文件中。
  • 无论哪种方式,都是通过模块加参数进行管理。

adhoc临时命令

  • 语法:
ansible 主机或组列表 -m 模块 -a "参数"    # -a是可选的
  • 通过ping模块测试到远程主机的连通性。
[root@pubserver ansible]# ansible all -m ping# 该命令检查是否可以管理远程主机。如果结果为绿色的SUCCESS,则表示成功。# 如果是红色的UNREACHABLE,则检查网络是否可通,是否已经可以免密登陆

ansible模块

  • 在ansible中,通过模块来完成某一特定任务。
  • 学习模块,主要知道实现某种功能,需要哪个模块。
  • 模块的使用方式都一样。主要是查看该模块有哪些参数。
# 列出全部可用模块,按空格键向下翻页,按q退出[root@pubserver ansible]# ansible-doc -l# 列出模块数量[root@pubserver ansible]# ansible-doc -l | wc -l  # 如有WARNING提示,可忽略7214# 查看包含yum的模块名[root@pubserver ansible]# ansible-doc -l | grep yum# 查看yum模块的帮助文档,按空格键向下翻页,按q退出[root@pubserver ansible]# ansible-doc yum
command模块
  • ansible默认模块,用于在远程主机上执行任意命令
  • command不支持shell特性,如管道、重定向。
# 在所有被管主机上创建目录/tmp/demo[root@pubserver ansible]# ansible all -a "mkdir /tmp/demo"# 查看we1的ip地址[root@pubserver ansible]# ansible web1 -a "ip a s"[root@pubserver ansible]# ansible web1 -a "ip a s | head"  # 报错
shell模块
  • 与command模块类似,但是支持shell特性,如管道、重定向。
# 查看web1的ip地址,只显示前10行[root@pubserver ansible]# ansible web1 -m shell -a "ip a s | head"
script模块
  • 用于在远程主机上执行脚本
    # 在控制端创建脚本即可[root@pubserver ansible]# vim test.sh#!/bin/bashfor user in user{1..5}douseradd $userecho '123456' | passwd --stdin $userdone# 在webservers组的主机上执行脚本[root@pubserver ansible]# ansible webservers -m script -a "test.sh"
    file模块
  • 可以创建文件、目录、链接等,还可以修改权限、属性等

  • 常用的选项:

    • path:指定文件路径
    • owner:设置文件所有者
    • group:设置文件所属组
    • state:状态。touch表示创建文件,directory表示创建目录,link表示创建软链接,absent表示删除
    • mode:设置权限
    • src:source的简写,源
    • dest:destination的简写,目标
# 查看使用帮助[root@pubserver ansible]# ansible-doc file... ...EXAMPLES:- name: Change file ownership, group and permissions  # 忽略ansible.builtin.file:           # 模块名。以下是它的各种参数path: /etc/foo.conf           # 要修改的文件的路径owner: foo                    # 文件所有者group: foo                    # 文件的所有组mode: '0644'                  # 权限... ...# 根据上面的example,-m file -a的内容就是doc中把各参数的冒号换成=号# 在webservers组的主机上创建/tmp/file.txt[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/file.txt state=touch"   # touch是指如果文件不存在,则创建;如果存在则改变它的时间戳# 在webservers组的主机上创建/tmp/demo目录[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/demo state=directory"# 将webservers组的主机上/tmp/file.txt的属主改为sshd,属组改为adm,权限改为0777[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/file.txt owner=sshd group=adm mode='0777'"[root@pubserver ansible]# ansible webservers -a "ls -l /tmp/file.txt"# 删除webservers组的主机上/tmp/file.txt[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/file.txt state=absent"    # absent英文缺席的、不存在的# 删除webservers组的主机上/tmp/demo[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/demo state=absent"# 在webservers组的主机上创建/etc/hosts的软链接,目标是/tmp/hosts.txt[root@pubserver ansible]# ansible webservers -m file -a "src=/etc/hosts dest=/tmp/hosts.txt state=link"
copy模块
  • 用于将文件从控制端拷贝到被控端

  • 常用选项:

    • src:源。控制端的文件路径
    • dest:目标。被控制端的文件路径
    • content:内容。需要写到文件中的内容
[root@pubserver ansible]# echo "AAA" > a3.txt# 将a3.txt拷贝到webservers主机的/root/[root@pubserver ansible]# ansible webservers -m copy -a "src=a3.txt dest=/root/"# 在目标主机上创建/tmp/mytest.txt,内容是Hello World[root@pubserver ansible]# ansible webservers -m copy -a "content='Hello World' dest=/tmp/mytest.txt"
fetch模块
  • 与copy模块相反,copy是上传,fetch是下载

  • 常用选项:

    • src:源。被控制端的文件路径
    • dest:目标。控制端的文件路径
# 将webservers主机上的/etc/hostname下载到本地用户的家目录下[root@pubserver ansible]# ansible webservers -m fetch -a "src=/etc/hostname dest=~/"[root@pubserver ansible]# ls /root/web1/etc/   # web1是webservers组中的主机hostname[root@pubserver ansible]# ls /root/web2/etc/hostname
lineinfile模块
  • 用于确保存目标文件中有某一行内容

  • 常用选项:

    • path:待修改的文件路径
    • line:写入文件的一行内容
    • regexp:正则表达式,用于查找文件中的内容
# webservers组中的主机,/etc/issue中一定要有一行Hello World。如果该行不存在,则默认添加到文件结尾[root@pubserver ansible]# ansible webservers -m lineinfile -a "path=/etc/issue line='Hello World'"# webservers组中的主机,把/etc/issue中有Hello的行,替换成chi le ma[root@pubserver ansible]# ansible webservers -m lineinfile -a "path=/etc/issue line='chi le ma' regexp='Hello'"
replace模块
  • lineinfile会替换一行,replace可以替换关键词

  • 常用选项:

    • path:待修改的文件路径
    • replace:将正则表达式查到的内容,替换成replace的内容
    • regexp:正则表达式,用于查找文件中的内容
# 把webservers组中主机上/etc/issue文件中的chi,替换成he[root@pubserver ansible]# ansible webservers -m replace -a "path=/etc/issue regexp='chi' replace='he'"
文件操作综合练习
  • 所有操作均对webservers组中的主机生效
  • 在目标主机上创建/tmp/mydemo目录,属主和属组都是adm,权限为0777
  • 将控制端的/etc/hosts文件上传到目标主机的/tmp/mydemo目录中,属主和属组都是adm,权限为0600
  • 替换目标主机/tmp/mydemo/hosts文件中的db1为database1
  • 将目标主机/tmp/mydemo/hosts文件下载到控制端的当前目录
# 在目标主机上创建/tmp/mydemo目录,属主和属组都是adm,权限为0777[root@pubserver ansible]# ansible webservers -m file -a "path=/tmp/mydemo owner=adm group=adm mode='0777' state=directory" # 将控制端的/etc/hosts文件上传到目标主机的/tmp/mydemo目录中,属主和属组都是adm,权限为0600[root@pubserver ansible]# ansible webservers -m copy -a "src=/etc/hosts dest=/tmp/mydemo owner=adm group=adm mode='0600'"# 替换目标主机/tmp/mydemo/hosts文件中的db1为database1[root@pubserver ansible]# ansible webservers -m replace -a "path=/tmp/mydemo/hosts regexp='db1' replace='database1'"# 将目标主机/tmp/mydemo/hosts文件下载到控制端的当前目录。[root@pubserver ansible]# ansible webservers -m fetch -a "src=/tmp/mydemo/hosts dest=."
user模块
  • 实现linux用户管理

  • 常用选项:

    • name:待创建的用户名
    • uid:用户ID
    • group:设置主组
    • groups:设置附加组
    • home:设置家目录
    • password:设置用户密码
    • state:状态。present表示创建,它是默认选项。absent表示删除
    • remove:删除家目录、邮箱等。值为yes或true都可以
# 在webservers组中的主机上,创建zhangsan用户[root@pubserver ansible]# ansible webservers -m user -a "name=zhangsan"# 在webservers组中的主机上,创建lisi用户。设置其uid为1010,主组是adm,附加组是daemon和root,家目录是/home/lisi[root@pubserver ansible]# ansible webservers -m user -a "name=lisi uid=1010 group=adm groups=daemon,root home=/home/lisi"# 设置zhangsan的密码是123456# {{}}是固定格式,表示执行命令。password_hash是函数,sha512是加密算法,则password_hash函数将会把123456通过sha512加密变成zhangsan的密码[root@pubserver ansible]# ansible webservers -m user -a "name=zhangsan password={{'123456'|password_hash('sha512')}}"# 删除zhangsan用户,不删除家目录[root@pubserver ansible]# ansible webservers -m user -a "name=zhangsan state=absent"# 删除lisi用户,同时删除家目录[root@pubserver ansible]# ansible webservers -m user -a "name=lisi state=absent remove=yes"
group模块
  • 创建、删除组

  • 常用选项:

    • name:待创建的组名
    • gid:组的ID号
    • state:present表示创建,它是默认选项。absent表示删除
# 在webservers组中的主机上创建名为devops的组[root@pubserver ansible]# ansible webservers -m group -a "name=devops"# 在webservers组中的主机上删除名为devops的组[root@pubserver ansible]# ansible webservers -m group -a "name=devops state=absent"

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

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

相关文章

【HarmonyOS应用开发】APP应用的通知(十五)

相关介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景: 显示接收…

BUGKU-WEB Simple_SSTI_1

02 Simple_SSTI_1 题目描述 没啥好说的~ 解题思路 进入场景后&#xff0c;显示&#xff1a; You need pass in a parameter named flag。ctrlu 查看源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…

【MySQL】-10 MySQL 存储过程

MySQL 存储过程 优点缺点一、存储过程的创建和调用创建存储过程实例1、in 输入参数2、out输出参数3、inout输入参数 三、变量1. 变量定义2. 变量赋值3. 用户变量 四、注释MySQL存储过程的调用MySQL存储过程的查询MySQL存储过程的修改MySQL存储过程的删除MySQL存储过程的控制语句…

使用freemarker和itextpdf结合,将html转化为pdf

工作中遇到模板中的html&#xff0c;需要转化成pdf作为附件上传到系统 于是经过研究分析&#xff0c;得出用freemarker和itextpdf结合 maven需要导入包&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…

【力扣每日一题】力扣1696跳跃游戏VI

题目来源 力扣1696跳跃游戏VI 题目概述 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一开始你在下标 0 处。每一步&#xff0c;你最多可以往前跳 k 步&#xff0c;但你不能跳出数组的边界。也就是说&#xff0c;你可以从下标 i 跳到** [i 1&#xff0c; min(n …

代码随想录 Leetcode491. 非递减子序列

题目&#xff1a; 代码(首刷看解析 2024年2月3日&#xff09;&#xff1a; class Solution { private:vector<vector<int>> res;vector<int> path; public:void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {res.…

iframe通信,window.postMessage父子项目数据通信

父 > 子 父项目 <iframe:src"cockpitUrl"id"cockpitIframe"load"handleLoad" ></iframe>// 向子系统传递数据&#xff08;注意要再iframe的load中注册&#xff0c;保证iframe已经加载完成&#xff0c;这样子项目才能监听到&…

HSM加密机原理:密钥管理和加密操作从软件层面转移到物理设备中 DUKPT 安全行业基础8

HSM加密机原理 硬件安全模块&#xff08;HSM&#xff09;是一种物理设备&#xff0c;设计用于安全地管理、处理和存储加密密钥和数字证书。HSM广泛应用于需要高安全性的场景&#xff0c;如金融服务、数据保护、企业安全以及政府和军事领域。HSM提供了一种比软件存储密钥更安全…

Web html和css

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

当前小程序跳转另一个小程序

原生小程序&#xff1a; wx.navigateToMiniProgram()&#xff1a; 参数值&#xff1a; appId要打开的小程序 appIdpath要跳转小程序的路径 uniapp小程序&#xff1a; uni.navigateToMiniProgram()&#xff1a; 参数值&#xff1a; appId要打开的小程序 appIdpath要跳转小…

vue3 之 组合式API—生命周期函数

vue3的生命周期API 生命周期函数基本使用 1️⃣导入生命周期函数 2️⃣执行生命周期函数 传入回调 <scirpt setup> import { onMounted } from vue onMounted(()>{// 组件挂载完毕mounted执行了 }) </script>执行多次 生命周期函数是可以执行多次的&#xff…

python 在气象、水文中数据处理及结果分析、绘图实践技术应用

Python在气象、水文数据处理和结果分析以及绘图方面的实践技术应用广泛&#xff0c;下面列举了一些主要的实践技术应用&#xff1a; 数据处理和分析&#xff1a;Python有强大的数据处理库&#xff0c;如NumPy和Pandas&#xff0c;使得数据的导入、处理和分析变得容易。使用这些…

支持多字体、静动态的.NET图片验证码的开源项目

上次分享过 SkiaSharp 这个开源图形项目&#xff0c;并举了一个生成验证码的例子&#xff0c;具体见文章&#xff1a;《SkiaSharp&#xff1a;.NET强大而灵活的跨平台图形库》。 但文中验证码比较简单&#xff0c;刚好看到一个非常不错的图片验证码&#xff0c;分享给大家。 …

ChatGPT之搭建API代理服务

简介 一行Docker命令部署的 OpenAI/GPT API代理&#xff0c;支持SSE流式返回、腾讯云函数 。 项目地址&#xff1a;https://github.com/easychen/openai-api-proxy 这个项目可以自行搭建 OpenAI API 代理服务器工具&#xff0c;该项目是代理的服务器端&#xff0c;不是客户端。…

reactive 与 ref 的区别

在 Vue.js 中&#xff0c;reactive 是 Vue 3 引入的一个新的 API&#xff0c;用于创建响应式对象。这种方法是 Composition API 的一部分&#xff0c;它提供了一种更灵活的方式来组织和重用逻辑。 reactive 的基本用法 使用 reactive&#xff0c;你可以将普通的 JavaScript 对…

MySQL 用户管理

重点&#xff1a; 视图&#xff0c;函数&#xff0c;存储过程&#xff0c;触发器&#xff0c;事件&#xff08; 了解 &#xff09; 用户管理&#xff0c;密码管理 grant revoke 权限管理 MySQL 架构&#xff08; 了解 &#xff09; 存储引擎&#xff1a;MyISAM 和 InnoDB …

算法训练营day22, 回溯2

216. 组合总和 III func combinationSum3(k int, n int) [][]int { //存储全部集合 result : make([][]int, 0) //存储单次集合 path : make([]int, 0) var backtrace func(k int, n int, sum int, startIndex int) backtrace func(k int, n int, sum int, startIndex int) {…

【JavaScript 漫游】【008】错误处理机制

文章简介 本文为【JavaScript 漫游】专栏的第 008 篇文章&#xff0c;记录了笔者所学习到的错误处理机制的所有知识点。 Error 实例对象原生错误类型&#xff0c;包括 SyntaxError、ReferenceError、RangeError、TypeError、URIError对象自定义错误throw 语句try...catch 结构…

【iOS ARKit】3D人体姿态估计实例

与2D人体姿态检测一样&#xff0c;在ARKit 中&#xff0c;我们不必关心底层的人体骨骼关节点检测算法&#xff0c;也不必自己去调用这些算法&#xff0c;在运行使用 ARBodyTrackingConfiguration 配置的 ARSession 之后&#xff0c;基于摄像头图像的3D人体姿态估计任务也会启动…

Python中的HTTP代理与网络安全

在当今数字化的世界里&#xff0c;网络安全已经成为我们无法忽视的重要议题。无数的信息在网络上传递&#xff0c;而我们的隐私和敏感数据也在这个过程中可能面临被窃取或滥用的风险。在Python编程中&#xff0c;HTTP代理作为一种工具&#xff0c;能够在网络安全方面发挥重要的…