ansible 管理工具以及常用模块

一、前期准备

1、安装

yum install ansible

 如果yum源没有ansible,需要提前配置yum源:

mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache# 可以使用以下三种方式查看ansible包的信息
yum info ansible
yum list ansible
yum list | grep ansible# 安装ansible
yum -y install ansible
ansible --version

2、配置免密登录

  • 1、生成公钥

ssh-keygen -t rsa

  • 2、编写脚本分发公钥
public=(
172.16.17.10
172.16.17.11
172.16.16.61
)for i in ${public[*]}
dosshpass -p '登陆密码' ssh-copy-id -i /root/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${i}
done

二、常用模块

1、查看模块说明

#查看所有模块:
ansible-doc -l
#查看具体模块,比如查看 setup 模块:
ansible-doc setup
#查看 setup 模块的示例输出:
ansible-doc -s setup

2、ansible命令运行方式及常用参数

ansible +清单 +-m+ 模块+ -a +模块参数

-m module 指定模块,默认为command模块

-v ##详细过程 -vv -vvv更详细过程

--list ##显示主机列表,也可以用--list-hosts

        ansible westos --list

-k ##提示输入ssh连接密码,默认key认证

-C ##预执行检测

        ansible westos -m shell -a 'touch /mnt/file{1..4}' -C

-T ##执行命令的超时时间,默认10s

-u ##指定远程执行的用户

-b ##执行sudo切换身份操作

-become-user=USERNAME ##指定sudo的用户

-K ##提示输入sudo密码

3.ansible的基本颜色代表

绿色 ##执行成功但为对远程主机做任何改变

黄色 ##执行成功并对远程主机做改变

红色 ##执行失败

4、assert模块

Ansible assert 模块用于在任务执行期间对变量或表达式进行断言。如果断言失败,则任务将失败并停止执行。它可以用于确保在任务执行期间满足某些条件,以避免出现意外的结果。

assert 模块的语法:

- name: Ensure that a variable is set to a specific valueassert:that:- variable_name == expected_value

that 参数是一个列表,包含要断言的变量或者表达式。列表中的任一一个断言失败,则任务失败

assert 模块还有其他比较运算符,比如大于、小于、包含等,还可以用于检查变量是否存在、是否为真/假。

下面示例使用 assert 模块检查变量m_var 是否为字符串类型:

- name: Ensure that a variable is a stringassert:that:- m_var is string

如果 m_var 不是字符串类型,则任务将失败。

参数类型默认值说明
fail_msgstring用于失败断言的自定义消息
success_msgstring用于成功断言的自定义消息
thatlist可以传递给when语句的相同形式的字符串表达式列表
quietbooleanfalse将此设置为true以避免冗长的输出

5、authorized_key模块

authorized_key模块是Ansible中用于管理SSH授权密钥的模块。它可以将公钥添加到远程主机的授权密钥列表中,也可以从远程主机的授权密钥列表中删除公钥。

以下是一些常见的用法:
添加公钥到远程主机的授权密钥列表中:

- name: Add SSH key to authorized_keysauthorized_key:user: usernamekey: "{{ lookup('file', '/path/to/public/key') }}"

从远程主机的授权密钥列表中删除公钥:

- name: Remove SSH key from authorized_keysauthorized_key:user: usernamekey: "{{ lookup('file', '/path/to/public/key') }}"state: absent

从远程主机的授权密钥列表中删除所有公钥:

- name: Remove all SSH keys from authorized_keysauthorized_key:user: usernamestate: absent

注意:在使用authorized_key模块之前,需要确保远程主机上已经安装了SSH服务,并且已经启用了SSH密钥认证。

6、at模块

##at 模块示例:
- name: remove tempuserat:command: userdel -r tempusercount: 20units: minutesunique: yes

参数

选项

注释

command

Null

计划运行的命令

count

Null

单位数。(必须和units一起运行)

script_file

Null

要在将来执行的现有脚本文件

state

absent、present

添加或删除命令或脚本的状态

unique

yes、no

如果作业已经在运行,则不会再次执行

units

minutes/hours/days/weeks

时间名称

7、blockinfile模块

ansible blockinfile模块用于在文件中添加或修改一个块(block)的内容。它可以在文件中查找一个特定的标记(marker),然后在该标记之前或之后添加或修改一个块的内容。

该模块的常用参数包括:

path:要修改的文件路径。

block:要添加或修改的块的内容。

marker:标记,用于定位要修改的块的位置。

state:状态,可选值为present(添加或修改)或absent(删除)。

例如,以下是一个使用blockinfile模块添加一个块的示例:

- name: Add a block to a fileblockinfile:path: /etc/nginx/nginx.confblock: |server {listen 80;server_name example.com;location / {proxy_pass http://localhost:8000;}}marker: "# BEGIN NGINX BLOCK"state: present

这个任务会在/etc/nginx/nginx.conf文件中查找标记# BEGIN NGINX BLOCK,如果找到了该标记,则在该标记之前添加一个块。如果没有找到该标记,则在文件末尾添加该块。

8、command、shell、raw、script模块

  • command模块

Ansible command 模块是用于在远程主机上执行命令的模块。它可以在远程主机上执行任何命令,就像在本地终端上一样。使用 Ansible command 模块可以轻松地在远程主机上执行命令,而无需在远程主机上安装任何额外的软件。

ansible all -m command -a 'tail /etc/passwd' -i inventory

chdir ##执行命令前先进入到指定目录

ansible all -m command -a 'chdir=/data pwd'

creates ##如果文件存在将不运行

ansible all -m command -a 'creates=/data/file  touch /data/file'

removes ##如果文件存在再将运行

ansible all -m command -a 'removes=/data/file  rm -rf /data/file'
  • shell模块

chdir ##执行命令前先进入到指定目录

cmd ##运行命令指定

creates ##如果文件存在将不运行

removes ##如果文件存在在将运行

free_form ##在远程主机中执行的命令,此参数不需要加

executable ##指定执行环境,默认为sh

  • raw模块

raw模块用于在远程主机上执行命令,其支持管道符与重定向

ansible all -m raw -a 'echo "hello world"> /tmp/test';ansible 192.168.160.137 -m raw -a 'cat /tmp/test|grep -Eo hello'
  •  script模块

ansible执行本地脚本到目标服务器执行,注意脚本需要+x 权限
ansible demo -m script -a demo.sh 
  • 不同点

command:

         可以在受管主机上执行 shell 命令,但是不支持环境变量和操作符(例如 '|', '<', '>', '&')

shell 模块调用的/bin/sh指令执行。

raw 模块不需要受管主机上安装Python,直接使用远程shell运行命令,通常用于无法安装Python的系统(例如网络设备等)。

9、copy模块

举例:

ansible all -m copy -a 'content="this server is managed by ansible\n" dest=/etc/motd' --become

Ansible的copy模块用于将文件或目录从控制节点复制到远程主机。它可以复制本地文件到远程主机,也可以复制远程主机上的文件到本地。

copy模块的基本语法如下:

- name: Copy file from local to remotecopy:src: /path/to/local/filedest: /path/to/remote/fileowner: usergroup: groupmode: 0644

其中,src表示源文件路径,dest表示目标文件路径。owner、group和mode是可选参数,用于设置文件的所有者、组和权限。

如果要复制目录,可以使用递归选项:

- name: Copy directory from local to remotecopy:src: /path/to/local/directory/dest: /path/to/remote/directory/owner: usergroup: groupmode: 0755recurse: yes

在复制文件或目录之前,Ansible会检查目标文件是否存在。如果存在,它会根据md5校验和检查文件是否相同。如果不同,Ansible会覆盖目标文件。如果相同,Ansible会跳过复制操作。

ansible copy模块常用参数:

src:指定源文件路径,可以是绝对路径或相对路径。
dest:指定目标文件路径,可以是绝对路径或相对路径。
backup:指定备份文件路径,可以是绝对路径或相对路径。
force:如果目标文件已经存在,是否强制覆盖。
mode:指定目标文件的权限模式,可以是数字或字符串形式。
owner:指定目标文件的所有者。
group:指定目标文件的所属组。
validate:指定一个命令或脚本,用于验证复制的文件是否正确。
content:指定要复制的文件内容,可以是字符串或文件路径。
remote_src:如果源文件在远程主机上,是否使用远程主机上的文件进行复制。
follow:如果源文件是符号链接,是否跟随符号链接进行复制。
selevel:指定目标文件的安全级别。
serole:指定目标文件的安全角色。
setype:指定目标文件的安全类型。
seuser:指定目标文件的安全用户。

group 指定文件所有组

ansible test -m copy -a 'src=./test.sh dest=/mnt owner=westos group=westos'

mode 指定目的地文件权限

ansible test -m copy -a 'src=./test.sh dest=/mnt owner=westos group=westos mode=755'

backup=yes 当受控主机中存在文件时备份原文件

ansible test -m copy -a 'src=./test.sh dest=/mnt owner=westos group=westos mode=755 backup=yes'

content 指定文本内容直接在受控主机中生成文件

ansible test -m copy -a 'dest=/mnt/file owner=westos group=westos mode=755 content="hellolinux"'

10、cron模块

job :任务脚本或命令

disabled :yes 禁用计划任务 ,no 启动计划任务

state :absent 删除计划任务

ansible test -m cron -a 'job="echo test" name=lee minute=*/2'
##job:要做的动作
##name:cron的名字
## */2:每隔两分钟执行一次
ansible test -m cron -a 'job="echo test" name=lee disabled=yes'
disabled=yes:禁用
disabled=no:启用
ansible test -m cron -a 'job="echo test" name=lee disabled=no state=absent'
state:删除任务
ansible test -m cron -a 'job="echo test" name=lee minute=*/2 day=1.5 user=westos'
## user=westos 指定用户身份
- cron:name: "Flush Bolt"user: "root"minute: 45hour: 11job: "php ./app/nut cache:clear"

此play在情况bolt缓存后立即使用公司的chche:clear 命令,在每天上午11:45 删除缓存的文件以及CMS 服务器的 directories.flushes 缓存。

nsible 将使用用户声明的正确语法将 play 写入到crontab 中。

通过检查 crontbab 来验证是否已经添加。

cron 模块的一些常用参数有:

参数

选项

注释

slecial_time

reboot、yearly、annually、monthly

一系列重复出现时间

state

absent、present

present创建;absent删除

cron_file

Null

如果有大量的服务器要维护,那么最好预先写好crontab文件

backup

yes、no

在编辑之前备份crontab文件

11、fetch模块

从受控主机把文件复制到ansible主机,但不支持目录

src 受控主机的源文件 dest 本机目录

ansible test -m fetch -a 'src=/mnt/test.sh dest=/tmp'

flat 复制文件时,不复制文件的路径,只复制文件本身

ansible test -m fetch -a 'src=/mnt/test.sh dest=/tmp flat=yes'

12、unarchive:解压缩

常用参数

copy :默认为yes 从ansible主机复制文件到受控主机

设定为no 从受控主机中寻找src源文件

mode 加压后文件权限 <copy=yes>

src :包路径,可以是ansible主机也可以是受控主机

dest :受控主机目录

ansible all -m unarchive -a 'src=/data/aaa.bz2 dest=/data copy=no'

13、archive:压缩

path 打包目录名称

dest 打包文件名称

format 打包格式

owner 指定文件所属

mode 指定文件权限

ansible all -m archive -a 'path=/data dest=/data/test/test.tar.gz2 format=bz2 owner=test mode=755'

14、hostname

管理主机名称

ansible 192.168.0.1 -m hostname -a 'name=test.com'

15、yum_repository

配置系统软件仓库源文件

name

指定仓库名称

baseurl

指定源路径

description

指定仓库描述

file

指定仓库文件名称

enabled

仓库是否启用

gpgcheck

仓库是否检测gpgkey

state

默认值present建立

absent

为删除

ansible all -m yum.repository -a 'file=/testos name=baseOS baseurl=http://192.168.0.1/xxx/baseOS description="test baseOS" gpgcheck=no enabled=yes'

16、dnf

管理系统中的dnf仓库及管理软件

name

指定包

state

指定动作

present安装

latest更新

absent删除

list

列出指定信息

httpd

installed

all

available

disable_gpg_check

禁用gpgkey检测

enablerepo

指定安装包来源

disablerepo

禁用安装包来源

# 列出httpd
ansible test -m dnf -a 'list=httpd'# 安装httpd
ansible test -m dnf -a 'name=httpd state=present'# 卸载httpd
ansible test -m dnf -a 'name=httpd state=absent'# 卸载的时候依赖也卸载
ansible test -m dnf -a 'name=httpd state=absent autoremove=yes'

17、service

管理系统服务状态

name

指定服务名称

state

指定对服务的动作

started

stopped

restarted

reloaded

enabled

设定服务开机是否启动

yes开启启动

no开机不启动

# 开启httpd
ansible test -m service -a 'name=httpd state=started enabled=yes'# 查看是否开启
ansible test -m shell -a 'systemctl status httpd'# 关闭httpd
ansible test -m service -a 'name=httpd state=stopped enabled=no'

18、user

管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作

name 必须参数,用于指定要操作的用户名称

uid 指定用户的 uid 号。

group 指定用户所在的基本组。

gourps 指定用户所在的附加组。

append 指定添加附加组默认值为no。

comment 指定用户的注释信息。

state 用于指定用户是否存在于远程主机

        present 建立

        absent 删除

默认值为nopassword 此参数用于指定用户的密码。但密码为明文

可以用openssl password -6 '密码'生成加密字符

# 创建 test 用户
ansible test -m user -a 'name=test'# 删除 test 用户
ansible test -m user -a 'name=tesst state=absent'# 删除 test 用户一起删除家目录
ansible test -m user -a 'name=tesst state=absent remove=yes'# 指定 uid 创建用户
ansible test -m user -a 'name=test uid=1000 group=1000 groups=999'

19 、group

管理远程主机上的组

state 用于指定组的状态

        present 建立

        absent 删除

gid 用于指定组的gid。

ansible  test -m group -a 'name=test gid=999'

20、lineinfile

功能类似sed,对文件替换、插入、删除

替换/插入:如果有重复的,都是匹配最后一个 , 如果不加backrefs项, 替换/插入如无匹配者,则将line所指定的行插入到文件的末尾

删除:如果有重复的,全部删除

path/dest:  目标文件绝对路径+文件名,必须参数
line:        替换/插入的内容
regexp:      待匹配内容
insertbefore:   匹配行前面插入 
insertafter:    匹配行面插入 
state:    删除匹配行,需要将值设为absent,默认值present。 
backup:   是否在修改文件之前对文件进行备份。 yes/no
create:   当要操作的文件并不存在时,是否创建对应的文件。yes/no
backrefs:yes/no
        1.backrefs为no时,如果没有匹配,则添加一行line。如果匹配了,则把匹配内容替被换为line内容。
        2.backrefs为yes时,如果没有匹配,则文件保持不变。如果匹配了,把匹配内容替被换为line内容。

# 备份文件tasks:- name: 'backup file'lineinfile:path: /root/line.txtbackup: yesline: state=present# 替换行tasks:- name: 'replace'lineinfile:path: /root/line.txtregexp: 'ddddeeeee'line: '此行已被替换'# 在匹配行前面插入tasks:- name: '在匹配行前面插入'lineinfile:path: /root/line.txtinsertbefore: 'aaaavvvaaaaaaaa'line: '成功在匹配行前面插入一行'# 在匹配行后面插入tasks:- name: "在匹配行后面插入"lineinfile:dest: /root/line.txtinsertafter: 'aassssaaaaaaaa'line: 成功在匹配行后面插入一行# 删除匹配行tasks:- name: '删除匹配行'lineinfile:dest: /root/line.txtregexp: 's\+awc\_i\!t\@\#x'state: absent
# 注意,需要删除的是 s+awc_i!t@#x 匹配需要转义特殊符号# 新建文件tasks:- name: 'create'lineinfile:dest: /root/test.txtcreate: yesline: state=present

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

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

相关文章

Web框架开发-Django模型层(数据库操作)

一、ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动ORM是“对象-关系-映…

[C++11] 智能指针(auto_ptr(弃用)、unique_ptr、shared_ptr、weak_ptr)详细解读

说明&#xff1a;本文主要解释auto_ptr、unique_ptr、shared_ptr、weak_ptr这几种智能指针。接下来我们对每一个指针类型进行详细说明并给出一些基本的使用方式&#xff0c;重在深入理解。 在 C 中&#xff0c;auto_ptr、unique_ptr、shared_ptr 和 weak_ptr四种智能指针主要用…

拌合楼管理系统(八) c#海康威视摄像头车牌识别

前言: c#调用海康威视SDK实现车牌识别 原本以为海康威视sdk的Demo里面没有车牌识别的实例,后来发现自己肤浅了,官方是有提供的,只是车牌识别是通过安防布警的方式实现的.程序主动监听,触发告警后获取到车牌信息. 一、接口调用的流程&#xff1a; 首先初始化sdk -> 开…

SQLiteC/C++接口详细介绍sqlite3_stmt类(四)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;三&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;五&#xff09; 7. sqlite3_bind_parameter_count函数 sqlite3_bind_param…

流畅的 Python 第二版(GPT 重译)(十一)

第二十章&#xff1a;并发执行器 抨击线程的人通常是系统程序员&#xff0c;他们心中有着典型应用程序员终其一生都不会遇到的用例。[…] 在 99%的用例中&#xff0c;应用程序员可能会遇到的情况是&#xff0c;生成一堆独立线程并将结果收集到队列中的简单模式就是他们需要了解…

Java newInstance方法学习

用newInstance与用new是有区别的&#xff0c;区别在于创建对象的方式不一样&#xff0c;前者是使用类加载机制&#xff1b; newInstance方法要求该 Class 对应类有无参构造方法&#xff1b; 执行 newInstance()方法实际上就是使用对应类的无参构造方法来创建该类的实例&#x…

docker离线安装并修改存储目录

docker下载 根据cpu选择不同版本&#xff0c;正常x86就选x86_64 下载地址&#xff1a;https://download.docker.com/linux/static/stable/ docker安装 tar -zxvf arm-docker-25.0.4.tgz sudo cp docker/* /usr/bin/ rm -rf docker/* mkdir /etc/docker vi /etc/docker/daemo…

YOLOV4-车道线检测-车距离预测

1.前言 最近在看华为的CANN框架&#xff0c;发现了一些很有意思的开源算法(本文所有的代码都出自华为开源git发布的代码)&#xff0c;华为最近出了AI PRO开发板&#xff0c;想着现在开发板上用用(不想重新配置环境了&#xff0c;麻烦还累)&#xff0c;看着代码有onnx的模型&…

浅学redis

一、持久化 1.为什么需要持久化&#xff1f; 如果不将内存中的数据保存到磁盘&#xff0c;那么一旦服务器进程退出&#xff0c;服务器中数据也会消失&#xff0c;所以redis提供了持久化功能 2.RDB&#xff08;redis database&#xff09; redis配置中&#xff0c;默认使用RDB…

绝地求生:PUBG延长GPU崩溃时间新方法

相信大家都在被GPU游戏崩溃苦恼已久&#xff0c;PUBG这个游戏崩溃&#xff0c;跟超频是没有多大关系的&#xff0c;只要超频TM5过测&#xff0c;YC过测&#xff0c;或者双烤过测&#xff0c;就没问题。主要是这个游戏的优化不行&#xff0c;特别40系显卡&#xff0c;对内存条也…

C# System.Console.WriteLine的格式化输出

C#中Console.WriteLine()函数输出格式详解 真 C#中Console.WriteLine()函数输出格式详解 假 using System;namespace Test {class TODO {static void Main() {System.Console.WriteLine("!{1,4:D3}!", 12, 24);}} }! 024!{index[,alignment][:formatString]} 其中&a…

免费AI出图神器:StableStudio——定义AI作画新前景

StableStudio&#xff1a;探索艺术与科技的无限交界&#xff0c;StableStudio引领AI智能创作新浪潮&#xff01; - 精选真开源&#xff0c;释放新价值。 概览 ChatGPT大语言模型AI的诞生引爆了对AIGC的讨论。AIGC 又称生成式 AI (Generative AI)&#xff0c;是继专业生产内容&…

VSCode使用MSVC编译器

1.其他大佬的配置&#xff1a;下载和安装库环境 2.安装好C/C插件<选择1.8.4的版本最好>。 3.分别生成对应的默认模板即可。但是其中参数可能需要配置。 task.json {"version": "2.0.0","tasks": [{"type": "cppbuild"…

Python 全栈体系【四阶】(十七)

第五章 深度学习 一、基本理论 3. 深度神经网络训练法则 3.1 损失函数 3.1.1 什么是损失函数&#xff1f; 损失函数&#xff08;Loss Function&#xff09;&#xff0c;也有称之为代价函数&#xff08;Cost Function&#xff09;&#xff0c;用来度量预测值和实际值之间的差…

html5cssjs代码 029 CSS计数器

html5&css&js代码 029 CSS计数器 一、代码二、解释 该HTML代码定义了一个网页的结构和样式。在头部&#xff0c;通过CSS样式定义了body和h1-h2元素的样式。body元素的样式包括文本居中、计数器重置、字体颜色和背景颜色。h2元素的样式使用了CSS计数器来自动在标题前添加…

2024最新华为OD机试试题库全 -【转盘寿司】- C卷

1. 🌈题目详情 1.1 ⚠️题目 寿司店周年庆,正在举办优惠活动回馈新老客户。 寿司转盘上总共有 n 盘寿司,prices[i] 是第 i 盘寿司的价格, 如果客户选择了第 i 盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j,前提是 prices[j] < prices[i],如果没…

RIDE控制台中文显示为乱码问题解决方案【版本1.7.4.1】

1、方法&#xff1a; 将 C:\Users\user_name\AppData\Roaming\Python\Python37\site-packages\robotide\contrib\testrunner\testrunnerplugin.py文件中的第80行修改&#xff0c;改为utf-8 2、修改代码位置&#xff1a; 3、效果&#xff1a; 4、参考文章 试了前面的方法没有…

千益畅行共享旅游卡怎么代理? 开启江浙沪区域畅享0费用旅游新机遇

想要探索副业项目的新领域&#xff0c;共享旅游卡无疑是一个极具潜力的选择。千益畅行旅游卡作为市场上的佼佼者&#xff0c;为众多创业者提供了一个零风险、高回报的副业项目。无论是上海共享旅游卡代理、江苏共享旅游卡代理、还是浙江共享旅游卡代理&#xff0c;都能让你轻松…

vue-pdf的注意事项

vue2项目 node版本切换到14.21.3 npm install --save vue-pdf4.2.0 npm install pdfjs-dist2.5.207 [^ 注意]&#xff1a;一般情况下&#xff0c;执行上述命令就可以解决这个问题&#xff0c;但有时候在执行完后还是不行&#xff0c;这时候如果你执意要搜索为什么&#xff0c;…

Python 深度学习第二版(GPT 重译)(一)

前言 序言 如果你拿起这本书&#xff0c;你可能已经意识到深度学习在最近对人工智能领域所代表的非凡进步。我们从几乎无法使用的计算机视觉和自然语言处理发展到了在你每天使用的产品中大规模部署的高性能系统。这一突然进步的后果几乎影响到了每一个行业。我们已经将深度学…