第28章 ansible的使用

news2024/11/18 4:17:13

第28章 ansible的使用

本章主要介绍在 RHEL8 中如何安装 ansible 及 ansible的基本使用。
◆ ansible 是如何工作的
◆ 在RHEL8 中安装ansible
◆ 编写 ansible.cfg 和清单文件
◆ ansible 的基本用法

文章目录

  • 第28章 ansible的使用
    • 28.1 安装ansible
    • 28.2 编写ansible.cfg和清单文件
    • 28.3 ansible的基本用法
    • 作业

如果管理的服务器很多, 如几十台甚至几百台,那么就需要一个自动化管理工具了,ansible就是这样的一种自动化管理工具。
​ ansible 是通过ssh 连接到被管理主机,然后执行相关操作的,如图28-1 所示。

在这里插入图片描述

ansible 主机通过ssh 连接到被管理主机时,需要提前设置密钥登录,使得从 ansible 主 机可以无密码登录到被管理主机。

本实验的拓扑图如图28-2所示。

在这里插入图片描述

这里server 是 ansible 主机,以lduan用户登录。server2和 server3 是被管理主机,在这两 台主机上创建lduan用户并配置好 sudo, 使得这两台主机上的Iduan用户通过sudo -i 可 以 无 密码切换到 root, 下面开始配置。

28.1 安装ansible

先 使 用 root 用户登录 server,在 其 上 配 置 epel 源,命令如下。

[root@server ~]# yum install -y https://mirrors.aliyun.com/epel/epel- release-latest-8.noarch.rpm
[root@server ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/publbaseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@server ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
[root@server ~]#

在 server 上安装 ansible, 命令如下。

[root@server  ~]# yum install ansible -y
Updating Subscription Management repositories.
Unable to read consumer identity
	...输出...
[root@server ~]#

如果安装有问题,可以到 htps://www.thce.cc/3940.html 下载ansible 的离线包。

查看 ansible 的版本,命令如下。

[root@eserver ~]# ansible --version
ansible 2.9.27
config file  = /etc/ansible/ansible.cfg
...输出...
[root@server ~]#

这里安装的ansible 的版本是2.9.27,同时也显示 ansible的默认配置是/etc/ansible/ansible.cfg。 还要确保 ansible 主机能够解析所有的被管理机器,这里通过配置/etc/hosts 来实现,/etc/hosts 的内容如下。

[root@server ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1       localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.26.101 server.rhce.cc  server
192.168.26.102 server2.rhce.cc server2
192.168.26.103 server3.rhce.cc server3 
[root@server ~]#

在 server2 和 server3 两台机器上确认已经创建好了lduan用户,如果没有请自行创建,然后配置好 sudo, 命令如下。

[rooteserver2 ~]# cat /etc/sudoers.d/lduan
lduan ALL=(root) NOPASSWD:ALL
[root@server2 ~]#

[root@server3 ~]#cat /etc/sudoers.d/lduan
lduan ALL=(root) NOPASSWD:ALL
[root@server3 ~]#

这样在这两台机器上,lduan 用户通过sudo -i可以无密码切换到root用户。

使 用lduan 用户登求server, 配置好ssh 秘钥登录,使得lduan 用户可以无密码登录到server2 和 server3, 命令如下。

[lduan@server ~]$ ssh server2
Activate    the    web    console     with:systemctl    enable    --now     cockpit.socket
...输出...
[lduan@server2 ~]$ exit
注销
Connection to server2  closed.
[lduan@server  ~]$ ssh server3
Activate the web console with:systemctl enable  -now  cockpit.socket ...输出...
[lduan@server3 ~]$ exit
注销
Connection to server3 closed.
[lduan@server ~]$

28.2 编写ansible.cfg和清单文件

执行 ansible 或 ansible-playbook 命令时,优先使用当前目录中 ansible.cfg 的配置。如果当前目录中没有,则使用默认的/etc/ansible.cfg 中的配置。

下面的操作都是 server上的 lduan用户操作的,先在家目录下创建ansible.cfg,内容如下。

[1duan@server ~]$ cat ansible.cfg
[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root

这里在 [defaults] 字段下只添加了一句inventory =./hosts,表示把当前目录下名称为 hosts的文件当作清单文件(什么是清单文件马上就要讲到)。

在 [privilege_escalation] 字段下定义了如何提升权限,因为是使用lduan 用户登录到被管理主机的,所以需要提升权限。这个字段下写了3条,分别如下。

(1)become=True: 登录到被管理主机时要切换到其他用户。

(2)become_method=sudo: 以 sudo的方式切换。

(3)become_user=root: 切换到 root 用户。

这三句的意思是,当用ssh 登录到被管理主机时,以sudo的方式切换到 root, 这也是为什么一开始要在被管理主机上配置好 sudo 的原因。

所有的被管理机器都要写入清单文件中。在实验环境中有两台被管理主机,那么分别写在hosts 中,内容如下。

[lduan@server ~]$ cat hosts
server2
server3
[lduan@server ~]$

这里一行一台主机,我们在使用 ansible或 ansible-playbook 命令时,指定的主机名必须是这个名称才行。要确保能解析 server2 和 server3, 写成相应的IP 也可以。

如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法。

[lduan@server ~]$ cat hosts
server2
server3
server[10:15]

这里加了一行 server[10:15], 表示 server10到 server15, 这样在清单文件中就写了8台主机(需要注意的是,在我们的练习环境中 server10 到 server15不存在)。

如果在执行 ansible 命令时只是想在部分主机上执行,那么在清单文件中可以对主机进行 分组。定义主机组时,组名写在中括号“[]”中,在[]下面写的主机名都属于这个组,直到定义下一个组的位置为止。修改清单文件的内容如下。

[lduan@server ~]$ cat hosts
server2
server3
server[10:15]

[db1]
server[2:5]

[db2]
server6
gerver7

这里定义了两个主机组db1和 db2,db1组中包括的主机有server2到server5,db2组中包括的主机有server6和server7。

如果想定义一个主机组,这个组中包括 db1和 db2 两个主机组的主机,可以用children 关键字,修改 hosts 的内容如下。

[lduaneserver ~]s cat hosts
server2
server3
server[10:15]

[db1]
server[2:5]

[db2]
server6
server7

[db3:children]
db1
db2

这里定义了一个主机组 db3, 但是后面加了“:children”,则这个主机组下面的 db1 和 db2 就 不再表示主机了,而是表示主机组。所以, db3 这个主机组中所包括的主机是 server2 到 server5及server6 和 server7这6台主机。

下面查看每个主机组中有多少主机。首先查看主机组 db1 中的主机,命令如下。

[lduan@server ~]$ ansible db1 --list-hosts
  hosts(4):
  	server2
	server3
	server4
	server5
[1duan@server ~]$

共4台主机。查看主机组 db2 中的主机,命令如下。

[lduan2server ~]$ ansible db2 --list-hosts
	hosts (2):
		server6
		server7

共2台主机。查看主机组 db3中的主机,命令如下。

[lduan2server ~]$ ansible db3 --list-hosts	
	hosts (6):
		server2
		server3
		server4
		server5
		server6
		server7

共6台主机,与分析的是一样的。还有一个内置主机组叫作 all,表示所有主机。

了解了清单文件的写法之后,最终把清单文件写成如下内容。

[lduaneserver ~]$ cat hosts
server2
server3
[db]
server2
server3
[lduan@server ~]$

这里就包括了一个主机组 db, 里面含有 server2 和 server3。

28.3 ansible的基本用法

ansible 的基本用法如下。

ansible 机器名 -m 模块x -a "模块的参数"

这里的机器名必须出现在清单文件中,整体的意思是在指定的机器上执行模块x 。例如,在 server2 上执行 hostname 命令,命令如下。

[lduan@server ~]$ ansible server2 -m shell -a "hostname"
server2 | CHANGED | rc=0 >>
server2.rhce.cc
[lduan@server ~]$

shell 模块用于执行操作系统命令,执行的命令就作为shell 模块的参数,这里在-a 中写 要执行的系统命令。所以,上面的命令就是在 server2上执行 hostname 命令,显示的结果是seryer2.rhce.cc.

要完成不同的任务就需要调用不同的模块来实现,系统中存在的所有ansible 模块可以通过 ansible-doc -1来查看。

不同的模块有不同的参数,模块的参数及使用方法可以通过“ansible-doc 模块名”来查看。

我们将在第29章中讲解常见的 ansible 模块。

作业

  1. 在 lduan 家目录下编写ansible.cfg, 满足如下要求。

(1) 使用文件/home/lduan/hosts作为清单文件。
(2) 当lduan 用户登录到被管理主机时,能自动通过 sudo 切换到 root 用户。

  1. 编写清单文件/home/lduan/hosts, 要求:定义一个名称为db 的主机组,里面包含2台
    主机 server2 和 server3。

  2. 在 db 主机组中的主机上执行一条系统命令 whoami。

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

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

相关文章

springboot+vue考试管理系统

基于springboot和vue的考试管理系统 001 springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的在线考试管理系统,采用M(model)V(view)C(controller)三层体系结构&…

113 链接集10--ctrl+左键单击多选

1.ctrl左键单击多选&#xff0c;单击单选 精简代码 <div class"model-list"><divmousedown.prevent"handleClick(item, $event)"class"model-list-item"v-for"item in modelList":key"item.id":class"{ model…

UE5中各类型的英文名称缩写(直接用于文件前缀)

真正开发项目时用到的素材文件是相当巨量的&#xff0c;在资产中查找时由于不区分文件夹&#xff0c;因此查找是比较头疼的&#xff0c;所以很多同类型的文件名命名时要加入缩写&#xff0c;并且同一对象的不同功能文件也需要用不同命名来区分。 本文提供初学者内容包中的缩写…

奇舞周刊第523期:来自 rust 生态的强烈冲击?谈谈 Leptos 在语法设计上的精妙之处...

奇舞推荐 ■ ■ ■ 来自 rust 生态的强烈冲击&#xff1f;谈谈 Leptos 在语法设计上的精妙之处 过去很长一段时间&#xff0c;前端框架们都在往响应式的方向发展。同时又由于 React hooks 的深远影响&#xff0c;函数式 响应式成为了不少前端心中最理想的前端框架模样。Solid …

vue3对openlayers使用(加高德,天地图图层)

OpenLayers认识 WebGIS四大框架&#xff1a; Leaflet、OpenLayers、Mapbox、Cesium OpenLayers 是一个强大的开源 JavaScript 地图库&#xff0c;专注于提供可嵌入网页的交互式地图体验。作为一款地理信息系统&#xff08;GIS&#xff09;的前端开发工具&#xff0c;OpenLaye…

java设计模式(1)---总则

设计模式总则 一、概述 1、什么是设计模式 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 解释下&#xff1a; 分类编目&#xff1a;就是说可以找到一些特征去划分这些设计模式&#xff0c;从而进行分类。 代码设计经验&#xff1a;这句很重…

CRC计算流程详解和FPGA实现

一、概念 CRC校验&#xff0c;中文翻译过来是&#xff1a;循环冗余校验&#xff0c;英文全称是&#xff1a;Cyclic Redundancy Check。是一种通过对数据产生固定位数的校验码&#xff0c;以检验数据是否存在错误的技术。 其主要特点是检错能力强、开销小&#xff0c;易于电路实…

YOLOv8-ROS-noetic+USB-CAM目标检测

环境介绍 Ubuntu20.04 Ros1-noetic Anaconda-yolov8虚拟环境 本文假设ROS和anaconda虚拟环境都已经配备&#xff0c;如果不知道怎么配备可以参考&#xff1a; https://blog.csdn.net/weixin_45231460/article/details/132906916 创建工作空间 mkdir -p ~/catkin_ws/srccd ~/ca…

【javascript】原型继承

在编程中&#xff0c;我们经常会想获取并扩展一些东西。 例如&#xff0c;我们有一个 user 对象及其属性和方法&#xff0c;并希望将 admin 和 guest 作为基于 user 稍加修改的变体。我们想重用 user 中的内容&#xff0c;而不是复制/重新实现它的方法&#xff0c;而只是在其之…

黑马程序员:C++核心编程——2.引用

引用的作用是给变量起别名&#xff0c;本名和别名都可以操作同一块地址的数据。 注意事项 1&#xff09;引用必须初始化且在初始化后不可改变。大白话是创建时不能不说是谁的别名&#xff0c;更不能在创建之后修改为其他人的别名。 2&#xff09;*重点&#xff1a;函数传参的…

蓝桥杯b组C语言组一个月怎么准备?

蓝桥杯b组C语言组一个月怎么准备&#xff1f; C/C程序设计组其中主要的是C算法竞赛选手 1.面对算法竞赛C语言缺少很多便捷性的数据结构&#xff0c;应该快速了解并掌握C的stl。 2.蓝桥杯俗称篮球杯&#xff0c;含金量大海捞针&#xff0c;其中练好dfs的暴力搜索能够骗取相当的…

从信号完整性角度看电容应用与计算

从信号完整性的角度来看&#xff0c;电容在电子电路中具有关键的应用。电容是一种被用来存储电荷并在电路中传递电流的被动元件&#xff0c;它对信号完整性有着重要的影响。 1. 去耦电容的选择 电容类型总结表格 实际的电容并不是理想&#xff0c;表现为&#xff1a; a.电…

网页无插件视频播放器,支持录像、截图、音视频播放,多路播放等,提供源码下载

前言 本播放器内部采用jessibuca插件接口&#xff0c;支持录像、截图、音视频播放等功能。播放器播放基于ws流&#xff0c;分屏操作支持1分屏、4分屏、6分屏、9分屏方式。 jessibuca工作原理是通过Emscripten将音视频解码库编译成Js&#xff08;WebAssembly&#xff0c;简称was…

人工智能的迷惑行为:AI世界的隐秘角落

人工智能迷惑行为大赏 在当今数字化时代&#xff0c;人工智能技术的飞速发展给我们的生活带来了诸多便利和可能性&#xff0c;但同时也伴随着一些令人困惑的现象和行为。本文将深入探讨人工智能的迷惑行为&#xff0c;揭示AI世界中的隐秘角落&#xff0c;让我们一同探寻这个充…

鸿蒙Harmony应用开发—ArkTS-if/else:条件渲染

ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用if、else和else if渲染对应状态下的UI内容。 说明&#xff1a; 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 使用规则 支持if、else和else if语句。 if、else if后跟随的条件语句…

框架结构模态分析/动力时程分析Matlab有限元编程 【Matlab源码+PPT讲义】|梁单元|地震时程动画|结果后处理|地震弹性时程分析| 隐式动力学

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

上位机图像处理和嵌入式模块部署(qmacvisual之ROI设定)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 ROI&#xff0c;全称是region of interest&#xff0c;也就是感兴趣区域。这里面一般分成两种情况&#xff0c;一种是所有的算法都依赖于这个ROI&a…

Visual Studio - Platform Toolset

Visual Studio - Platform Toolset 1. Microsoft Visual Studio 2013 - Platform Toolset2. Microsoft Visual Studio 2015 - Platform ToolsetReferences 1. Microsoft Visual Studio 2013 - Platform Toolset (right mouse click on the project) -> 属性 -> 配置属性…

鸿蒙Harmony应用开发—ArkTS-应用级变量的状态管理

状态管理模块提供了应用程序的数据存储能力、持久化数据管理能力、UIAbility数据存储能力和应用程序需要的环境状态。 说明&#xff1a; 本模块首批接口从API version 7开始支持&#xff0c;后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本文中T和S的含义…

41-Vue-webpack基础

webpack基础 前言什么是webpackwebpack的基本使用指定webpack的entry和output 前言 本篇开始来学习下webpack的使用 什么是webpack webpack: 是前端项目工程化的具体解决方案。 主要功能&#xff1a;它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览…