Ansible概述及命令行模块

news2024/11/28 10:59:00

目录

一、Ansible概述

1 Ansible是什么

2 Ansible的四个组件:

 3 Ansible的特性

二、Ansible 环境安装部署

 三、ansible常用的命令行模块

1 command模块

 2 shell模块

 3 cron模块

 4 user模块

5 group模块

 6 copy模块

7 file模块

8 hostname模块

 9 ping模块

 10 yum模块

11 service/systemd 模块

12 script 模块

 13 setup 模块


一、Ansible概述

1 Ansible是什么

Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。
Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多 个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操住。
Ansible是基于模块工作的,它只是提供了一-种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块,比如copy模块用于拷贝文件到远程主机上,service模块用于管理服务的启动、停止、重启等。

2 Ansible的四个组件:

Inventory 主机清单(主机组)
Modules 模块
Plugins 插件
Playbooks 剧本(相当于脚本

 3 Ansible的特性

(1)特性一:
Ansible其中一个比较鲜明的特性Agentless,即无Agent的存在(无代理端,即无客户端),它就像普通命令一样, 并非c/s软件,也只需在某个作为控制节点的主机上安装一次Ansible即可,通常它基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务。
使用者在使用时,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play(一个play就是一个Linux操作),再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除。
(2)特性二:
Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。
比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而systemctl restart xxx是非幂等的。
Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。

二、Ansible 环境安装部署

管理端 192.168.41.41  ansible

被管理端 192.168.41.42 无需安装

被管理端 192.168.41.43 无需安装

被管理端 192.168.41.44 无需安装

 #1、管理端安装ansible
 yum install -y epel-release   #先安装epel源
 yum install -y ansible        #安装ansible
 ​
 #ansible目录结构
 [root@yuji ~]# cd /etc/ansible
 [root@yuji ansible]# tree
 .
 ├── ansible.cfg
 ├── hosts
 └── roles
 ​
 1 directory, 2 files
 ​
 ​
 #2、配置主机清单,修改/etc/ansible/hosts文件
 cd /etc/ansible
 vim hosts
 [webservers]    #配置组名
 192.168.41.42   #组里包含被管理的主机IP或主机名(主机名需要先修改/etc/hosts文件)
 192.168.41.43
 ​
 [dbservers]      #第二个组
 192.168.41.44
 ​
 #3、ansible默认使用ssh连接,所以管理前要设置免密登录
 #配置密钥对验证
 ssh-keygen -t rsa    #一路回车,生成密钥文件
 ​
 vim /etc/ssh/ssh_config      #修改ssh客户端配置文件
 StrictHostKeyChecking no     #35行,取消注释,将ask修改为no,开启免交互
 ​
 systemctl restart sshd       #重启sshd
 ​
 #使用sshpass,以免交互的方式将公钥文件传给被管理端,实现免密登录
 sshpass -p '144080' ssh-copy-id root@192.168.41.42
 sshpass -p '144080' ssh-copy-id root@192.168.41.43
 sshpass -p '144080' ssh-copy-id root@192.168.41.44
 ​
 #如果被管理端主机有很多台,可以通过sshpass和for循环写一个脚本,实现多台主机免密登录。

1、管理端安装ansible

 

 

 

 

 

 

 

 

 三、ansible常用的命令行模块

ansible管理命令:

ansible <组名> -m <模块> -a <参数列表>
 ​
 ansible <主机IP> -m <模块> -a <参数列表>
 ​
 ansible <主机名> -a <参数列表>      #不加-m指定模块默认使用command
 ​
 #选项解释
 -m: 指定模块
 -a: 指定命令

查看ansible的模块:

ansible-doc -l   #列出所有已安装的模块,按q退出
 ​
 ansible-doc -l | wc -l   #统计总共有多少模块
 3387
 ​
 ansible-doc -s 模块   #查看指定模块的描述信息和操作动作

1 command模块

在远程主机执行命令,不支持管道、重定向等shell的特性

 ansible-doc -s command   #-s列出指定模块的描述信息和操作动作
 ​
 #指定ip执行date
 ansible 192.168.41.42 -m command -a 'date'   #-a指定命令
 ​
 #指定组执行date命令
 ansible webservers -m command -a 'date'     #指定webservers组执行date命令
 ansible dbservers -m command -a' date'      #指定dbservers组执行date命令
 ansible all -m command -a ' date'           #all代表所有hosts 主机
 ansible all -a 'date'                      #如省略-m模块,则默认运行command 模块
 ​
 ​
 ##常用的参数:
 chdir:在远程主机上运行命令前提前进入目录
 creates:判断指定文件是否存在,如果存在,不执行后面的操作
 removes:判断指定文件是否存在,如果存在,执行后面的操作
 ​
 #无论管理端当前在哪个目录,执行命令都是在被管理端的家目录进行操作,可以使用chdir参数先切换目录
 ansible dbservers -m command -a "chdir=/home ls ./"   #切换到/home目录下再执行命令
 ​
 #creates判断目标主机的指定是否存在,如果存在,则不执行后面的操作
 ansible dbservers -m command -a "creates=/data/f1.txt date"
 ansible dbservers -m command -a "creates=/data/aa.txt date"
 ​
 #removes判断目标主机的指定是否存在,如果存在,执行后面的操作
 ansible dbservers -m command -a "removes=/data/f1.txt date"
 ansible dbservers -m command -a "removes=/data/aa.txt date"

 

 

 

 (1)chdir

在远程主机上运行命令前提前进入目录。

 #无论管理端当前在哪个目录,执行命令都是在被管理端的家目录进行操作,可以使用chdir参数切换目录。
 ​
 #目标主机切换到/home/目录后,再执行命令
 [root@yuji ~]# ansible dbservers -m command -a "chdir=/home ls ./"
 192.168.41.44 | CHANGED | rc=0 >>
 hang
 #目标主机切换到/opt/目录后,再执行命令
 [root@yuji ~]# ansible dbservers -m command -a "chdir=/opt ls ./"
 192.168.41.44 | CHANGED | rc=0 >>
 abc.txt
 elasticsearch-6.7.2.rpm
 elasticsearch-head-master.zip
 node-v8.2.1
 node-v8.2.1.tar.gz
 phantomjs-2.1.1-linux-x86_64.tar.bz2
 rh

 

 (2)creates

判断指定文件是否存在,如果存在,不执行后面的操作

 #creates判断目标主机的指定文件是否存在,如果存在,则不执行后面的操作
 ​
 #查看目标主机的/data目录,只有f1.txt文件
 [root@yuji ~]# ansible dbservers -m command -a "chdir=/data ls ./"
 192.168.41.44 | CHANGED | rc=0 >>
 f1.txt
 ​
 #判断/data/f1.txt是否存在,因为存在,所以跳过后面的命令操作
 [root@yuji ~]# ansible dbservers -m command -a "creates=/data/f1.txt date"192.168.41.44 | SUCCESS | rc=0 >>
 skipped, since /data/f1.txt exists
 ​
 #判断/data/aa.txt是否存在,因为不存在,所以执行后面的date命令
 [root@yuji ~]# ansible dbservers -m command -a "creates=/data/aa.txt date"192.168.41.44 | CHANGED | rc=0 >>
 2022年 07月 05日 星期二 20:22:61 CST

 (3)removes

判断指定文件是否存在,如果存在,执行后面的操作

 #判断/data/f1.txt是否存在,因为存在,所以执行后面的date命令
 [root@yuji ~]# ansible dbservers -m command -a "removes=/data/f1.txt date"192.168.41.44 | CHANGED | rc=0 >>
 2022年 07月 05日 星期二 20:40:17 CST
 ​
 #判断/data/aa.txt是否存在,因为不存在,所以跳过后面的操作
 [root@yuji ~]# ansible dbservers -m command -a "removes=/data/aa.txt date"192.168.41.44 | SUCCESS | rc=0 >>
 skipped, since /data/aa.txt does not exist

 2 shell模块

在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令。支持管道符号和重动向等功能。

 ansible-doc -s shell  #查看shell模块的描述信息和操作动作
 ​
 #shell模块支持重定向功能
 ansible dbservers -m shell -a 'echo hello> /opt/abc.txt'
 ​
 #shell模块支持管道符号。
 ansible dbservers -m shell -a 'echo 123456| passwd -stdin hang'   #免交互的方式修改用户密码
 ​
 #过滤出ens33网卡的地址
 ansible dbservers -m shell -a 'ifconfig ens33 | awk "NR==2 {print $2}"'  #要在$前加\让awk使用,不然ansible会认为是变量

 3 cron模块

在远程主机定义任务计划。其中有两种状态(state) :

  • present 表示添加(可以省略)
  • absent 表示移除。

 ansible-doc -s cron    #查看cron模块包含的操作动作
 ​
 #常用的参数: 
 minute/hour/day/month/weekday:分/时/日/月/周
 job:任务计划要执行的命令,尽量使用绝对路径。
 name:任务计划的名称。

 4 user模块

管理用户的模块。

 ansible-doc -s user    #查看user模块包含的操作动作

name用户名,必选参数
state=present 或 absent创建账号或者删除账号,present表示 创建,absent 表示删除
system=yes 或 no是否为系统账号。
uid用户uid
group用户基本组
groups用户附加组。
shell默认使用的登录shell
move_home=yes 或 no如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password用户的密码,建议使用加密后的字符串
comment用户的注释信息。
remove=yes 或 no

表示当state=absent时,是否删除用户的家目录。即删除用户时,是否同时删除家目录。yes表示删除用户的家目录。

5 group模块

管理用户组的模块。

注意:字符串类型的值建议加双引号,防止有空格。数字和布尔值不要加双引号。

 ansible-doc -s group    #查看group模块包含的操作动作
 ​
 #创建mysql组,设置为系统组。
 ansible dbservers -m group -a 'name="mysql" gid=306 system=yes'
 ansible dbservers -a 'tail -3 /etc/group'
 ​
 #创建用户test02,设置为系统用户,基本组设置为mysql组。
 ansible dbservers -m user -a 'name="test02" uid=306 system=yes group="mysql"'
 ansible dbservers -a 'id test02'

 

 6 copy模块

用于将本地文件复制到远程主机。

 ansible-doc -s copy #查看copy模块包含的操作动作

src指出源文件的路径(位于控制节点,即管理端),可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录。
dest指出复制文件的目标及位置,使用绝对路径,如果源是目录则目标也要是目录,如果目标文件已经存在会覆盖原有的内容
mode指出复制时,目标文件的权限。
owner指出复制时,目标文件的属主。
group指出复制时,目标文件的属组。
content指出复制到目标主机上的内容,不能与src一起使用。

7 file模块

为远程主机创建/删除文件或目录,设置文件属性。

path指定远程服务器的路径,也可以写成"dest","name"
state状态,可以将值设定为directory表示创建目录,设定为touch表示创建文件,设定为link表示创建软链接,设定为hard表示创建硬连接,设定为absent表示删除目录文件或链接
mode文件复制到远程并设定权限,默认file=644,directory=755
owner文件复制到远程并设定属主,默认为root
group文件复制到远程并设定属组,默认为root
recurese递归修改
src指的是目标主机上的源文件。与copy模块不同。

8 hostname模块

用于管理远程主机上的主机名。

 ansible dbservers -m hostname -a 'name=myhost7-4'  #修改dbservers组的主机名

 

 9 ping模块

测试远程主机的连通性。

 ansible all -m ping   #测试所有主机的连通性

 10 yum模块

在远程主机上安装与卸载软件包, 需要被管理端配置好yum源。

name指定安装软件包名或软件包URL
state指定yum对应的方法,present(默认)、installed表示安装、latest表示安装最新版本软件包;absent、removed表示卸载。支持多程序一起安装,用逗号隔开
enablerepo允许从哪些仓库获取软件
disablerepo禁止从哪些仓库获取软件
exclude排除某些软件包,例如kernel
download_only仅下载软件包,不安装
disable_gpg_check不进行gpg检测
update_cache可以在安装包的同时更新yum缓存

11 service/systemd 模块

用于管理远程主机上的服务的运行状态。

name指定需要控制的服务名称
state指定服务状态,其值可以为stopped、started、reloaded、restarted、status
enabled指定服务是否为开机启动,yes为启动,no为不启动
daemon_reloadyes:重启systemd服务,让unit文件生效

12 script 模块

实现远程批量运行本地的shell脚本。

注意:script模块不具有幂等性。所以建议用剧本来执行。

 ansible-doc -s script
 ​
 #在本地写一个脚本
 vim test.sh
 #!/bin/bash
 echo "hello ansible from script" > /data/script.txt
 ​
 chmod +x test.sh                              #给脚本执行权限
 ansible dbservers -m script -a 'test.sh'      #远程运行本地脚本
 ansible dbservers -a 'cat /data/script.txt'   #查看生成的文件内容是否为指导内容
 
 
 #再次运行相同脚本,状态为changed,而不是successs,因为script模块不具有幂等性
 ansible dbservers -m script -a 'test.sh'

 

 13 setup 模块

facts组件是用来收集被管理节点信息的,使用setup 模块可以获取这些信息

 ansible-doc -s setup   #查看setup模块包含的操作动作
 ​
 #获取dbservers组主机的facts信息
 ansible dbservers -m setup
 ​
 #使用filter参数可以筛选指定的facts信息
 ansible dbservers -m setup -a 'filter=*ipv4'

 

 

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

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

相关文章

Web端H5播放FLV、HLS、MP4 (二)

使用video.js播放HLS、FLV、MP4。 MP4、FLV、HLS、RTMP等协协和播放器之间的支持情况&#xff0c;参看这里。 一、主要JS插件&#xff1a; jquery(v3.6.0) video.js (v7.21.0&#xff0c;其它版本没试) https://cdn.bootcdn.net/ajax/libs/video.js/7.21.0/video.min.js f…

基于FPGA的RGB转HSV图像算法设计

一、什么是HSV色彩空间&#xff1f; RGB色彩空间是基于三基色而言&#xff0c;即红色、绿色、蓝色。而HSV色彩空间则是基于色调、饱和度和亮度而言的。 色调&#xff08;H&#xff09;是指光的颜色&#xff0c;例如&#xff0c;彩虹中的赤&#xff0c;橙&#xff0c;黄&#…

如何自学黑客?自学黑客技术需要学多久?

问题一&#xff1a;黑客如何学起&#xff1f; 答&#xff1a;必须从学习者的角度来看&#xff0c;如果你是一个已经学过编程&#xff0c;通晓几门语言的人那么这个答案就会和一个从没有接触过的计算机&#xff0c;甚至连什么叫高级语言还不知道的人有所区别的对待。 这就像是登…

LeetCode題目笔记——面试题 01.01. 判定字符是否唯一

文章目录题目描述题目难度——简单方法一&#xff1a;使用集合代码/Python方法二——用一个数组代码/Python方法三——位运算代码/Python总结题目描述 实现一个算法&#xff0c;确定一个字符串 s 的所有字符是否全都不同。 示例 1&#xff1a; 输入: s “leetcode” 输出: …

nvm 实战过程

文章目录前情提要应用场景实战解析最后前情提要 nvm是什么&#xff1a; nvm 全名 node.js version management&#xff0c;顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。 应用场景 在我们前端工程师的日常工作中&#xff0c;不免要与不同基于n…

解决JavaWeb报错:此处不允许注解

目录 前言必读 一、遇到问题 二、解决办法 前言必读 读者手册&#xff08;必读&#xff09;_云边的快乐猫的博客-CSDN博客 一、遇到问题 1.在使用时候会发现报错为此处不允许使用注解&#xff0c;其实这是粗心和不熟练使用导致的 二、解决办法 2.把WebServlet("/ddd&…

【基于多尺度的融合:IVIF】

Infrared and visible image fusion via gradientlet filter &#xff08;基于梯度波滤波器的红外与可见光图像融合&#xff09; 本文从亮度和梯度分离的角度出发&#xff0c;提出了一种基于模糊梯度阈值函数和全局优化的图像滤波器梯度小波滤波器。它可以在保持图像的整体亮…

android aidl使用demo

android使用aidl原理 参考链接: https://www.twle.cn/l/yufei/android/android-basic-service-aidl.html 通过这部分代码, 加深对Android AIDL的理解 aidl server端 ILanguage.aidl 步骤: 在main目录下创建aidl文件夹, 并创建对应的包 com.example.aidl, 然后创建ILanguage.ai…

分享5款好用但一直不火的宝藏软件

很多软件用起来很好用&#xff0c;但是由于这样那样的原因&#xff0c;一直没什么知名度&#xff0c;但是不代表它们不好用&#xff0c;我的任务就是把这些宝藏分享给大家。 1.系统字体美化——MacType MacType是一款非常著名的系统字体美化软件&#xff0c;相比 GDI 更加容易…

【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?

背景介绍 最近的docker容器经常被kill掉&#xff0c;k8s中该节点的pod也被驱赶。 我有一个在主机中运行的Docker容器&#xff08;也有在同一主机中运行的其他容器&#xff09;。该Docker容器中的应用程序将会计算数据和流式处理&#xff0c;这可能会消耗大量内存。 该容器会不…

操作系统之线程和进程

文章目录一. 什么是操作系统二. 进程和线程1. 进程2. 线程3. 进程的管理3.1 PBC中的一些属性3.2 并发和并行3.3 进程的调度3.4 内存管理3.5 进程间的通信3.6 并发编程4. 进程与线程的区别一. 什么是操作系统 操作系统本质上是一个软件, 发挥的是管理作用, 可以管理软件和硬件,…

《Python多人游戏项目实战》第二节 使用pickle模块序列化数据

目录 2.1 设置游戏窗口 2.2 实现人物移动的功能 2.3 编写服务端代码 2.4 完善客户端代码 2.5 完整代码下载地址 在本节&#xff0c;笔者会带大家开发一个联机版的人物移动程序&#xff0c;示例如下&#xff1a; 在上一节&#xff0c;客户端和服务端通信的JSON数据中包含玩…

CentOS7中安装字体库中文字体

若存在中文乱码的情况&#xff0c;这是因为操作系统中没有安装中文字体。 安装字体库 yum install fontconfig -y 安装更新字体命令 yum install mkfontscale -y添加中文字体 # 新建目录 mkdir /usr/share/fonts/chinese # 切换到中文字体目录下&#xff0c;上传windows里宋…

浅谈人工智能生成内容(AIGC)

兴趣了解 [OpenAI ]人工智能绘画产品 DALLE: 在计算机上输入一句话&#xff0c;DALLE 就能够理解这句话、然后自动生成一幅意思相应的图像&#xff0c;且该图像是全网首发、独一无二。[谷歌 ] 5400 亿参数大模型 PaLM: PaLM 的文本理解能力与逻辑推理能力大幅提升&#xff0c;…

[附源码]Nodejs计算机毕业设计基于web的校园闲置物品交易系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

PyTorch中利用LSTMCell搭建多层LSTM实现时间序列预测

前言 前面已经写过不少时间序列预测的文章&#xff1a; 深入理解PyTorch中LSTM的输入和输出&#xff08;从input输入到Linear输出&#xff09;PyTorch搭建LSTM实现时间序列预测&#xff08;负荷预测&#xff09;PyTorch中利用LSTMCell搭建多层LSTM实现时间序列预测PyTorch搭建…

为什么AI距离智能越来越远?

2021年讨论了人机混合智能里的深度态势感知和人的算计与机器的计算如何结合的问题。之后有一位朋友问了我五个问题。第一&#xff0c;关于数学和逻辑的关系问题。这个问题是百年来数学的基础问题&#xff0c;迄今为止似乎没有定论。从实用主义角度说&#xff0c;“把数学等同于…

企业在项目中采用工时管理系统的好处

在如今疫情的影响下&#xff0c;不少企业面对经济形势愈发严峻的情况下&#xff0c;对项目员工工时的管理也是越来越注重。如何在确保企业正常运转的前提下提升企业发展空间&#xff0c;人员降低工作成本呢&#xff1f;根据目前研究表明&#xff0c;很多企业都选择使用项目工时…

Android Kotlin使用AspectJ进行AOP面向切面编程

前言 什么是面向切面编程&#xff1f;首先我们来了解下两个概念&#xff1a; OOP&#xff08;面向对象编程&#xff09;:针对业务处理过程的实体及其属性和行为进行抽象封装&#xff0c;以获得更加清晰高效的逻辑单元划分。 AOP(面向切面编程)&#xff1a;则是针对业务处理过程…

html好看的生日祝福,生日表白(源码)

文章目录1.设计来源1.1 主界面1.2 秘密基地1.3 甜言蜜语2.效果和源码2.1 动态效果2.2 源代码2.3 自定义背景图片代码2.4 自定义每次生日记录代码2.5 自定义背景音乐代码源码下载作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/de…