ansible自动化运维(一)简介及清单,模块

相关文章
ansible自动化运维(二)playbook模式详解-CSDN博客
ansible自动化运维(三)jinja2模板&&roles角色管理-CSDN博客
ansible自动化运维(四)运维实战-CSDN博客

ansible自动化运维工具

1.什么是自动化运维

自动化运维是指将日常运维的、大量的重复性工作自动化,把手工执行的工作,通过梳理分析,进行逻辑分解,借助平台或工具转为自动化操作。自动化是it运维工作的升华,it运维自动化不单纯是一个维护的过程,更是一个管理的提升过程,是运维更高层次,也是未来的发展趋势。

1.1运维自动化解决的问题

  • 项目整体工作效率提升;
  • 减少人为误操作;
  • 方便信息传递,配置类信息聚合,信息链更完整;
  • 事务留痕,方便跟踪,追述;
  • 运维工作更加轻松、灵动;
  • 提升运维工作价值,管理更多资源,更多服务对象;

1.2自动化运维分类工具

  1. 系统安装:PXE,Cobbert
  2. 应用程序配置:Puppet,Ansible,Saltstack
  3. 命令执行与控制:Fabric,Func,Ansible
  4. 程序发布:git/svn(版本管理),Jenkins/Gitlab-runner(持续集成)

1.3自动化运维工具对比

此处只对比Puppet,Ansible,Saltstack

Puppet

Saltstack

Ansible

开发语言

Ruby语言

Python语言

Python

是否支持客户端

有(salt-ssh无客户端)

是否支持二次开发

不支持

支持

支持

通信加密

标准的SSL加密

AES加密

OpenSSH

平台支持

AIX,BSD,HP-UX,Linux,MacOSX,Solaris,Windows

BSD,Linux,MacOSX,Solaris,Windows

AIX,BSD,HP-UX,Linux,MacOSX,Solaris

是否提供web UI

商用提供

配置文件语法

Ruby语法格式

YAMl

YUML

         命令行执行

     不支持(配置实现)

                  支持

                支持

 2.Ansible介绍

Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块Ansible只是提供一种框架。

主要包括:

(1) 连接插件connection plugins:负责和被监控端实现通信;

(2) host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3) 各种模块核心模块、command模块、自定义模块;

(4) 借助于插件完成记录日志邮件等功能;

(5) playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

3.Ansible工作原理

基于SSH和模块

Ansible 通过 SSH 协议连接到目标主机。这意味着它不需要在目标主机上安装额外的代理软件。它使用一系列的模块来执行具体的任务。这些模块是 Ansible 的核心功能单元,比如 “yum” 模块用于在基于 RPM 的系统(如 CentOS、Red Hat)上安装软件包,“apt” 模块用于 Debian 和 Ubuntu 系统的软件安装,“service” 模块用于管理系统服务等。当 Ansible 执行一个任务时,它会将相应的模块发送到目标主机,然后在目标主机上运行模块来完成任务。

Inventory 文件

Ansible 使用一个名为 “Inventory” 的文件来管理目标主机列表。这个文件可以是简单的文本格式,列出了主机的 IP 地址或主机名,也可以按照组进行分类。例如,你可以将所有的 Web 服务器放在一个名为 “web_servers” 的组中,将数据库服务器放在 “db_servers” 的组中。在 playbook 中,就可以针对不同的组执行不同的任务,比如只在 “web_servers” 组中安装和配置 Web 服务器软件。

4.Ansible工作流程

(1)加载配置文件: Ansible 默认查找 /etc/ansible/ansible.cfg 配置文件,这个文件包含了Ansible运行时的行为设定,如连接方式、插件路径等。 

(2)解析Inventory: Ansible 使用 Inventory 文件(默认是 /etc/ansible/hosts)来确定需要操作的目标主机或主机组。

(3)编译Playbook或命令: Ansible 准备执行的Playbook或直接执行的Ad-Hoc命令,并解析其中的任务和模块调用。

(4)模块加载与执行策略准备: 对于每个任务,Ansible 加载相应的模块(如 command 模块),并准备执行上下文,包括变量、环境等。

(5)生成并传输临时脚本: Ansible 会根据任务和模块生成一个或多个临时的Python脚本,并通过SSH连接传输到目标主机的临时目录,通常位于目标用户的 ~/.ansible/tmp/ansible-tmp-<UNIQUE_ID>/ 目录下。

(6)赋予执行权限: 在目标主机上,Ansible 会给这个临时Python脚本加上执行权限,以便能够运行。

(7)执行远程脚本: Ansible 通过SSH在目标主机上执行这个临时脚本,并收集执行结果。

结果收集与处理: 执行完毕后,各个主机的执行结果被收集并汇总,Ansible根据这些结果决定是否继续执行后续任务,或是根据Playbook中的错误处理逻辑(如 rescue 和 always 块)进行操作。

(8)清理: 一旦任务执行完成,无论成功还是失败,Ansible 会清理目标主机上的临时文件,包括删除之前上传的Python脚本。

(9)退出与报告: 清理完成后。

5.Ansible模式

Ansible中有两种模式:分别是ad-hoc模式和playbook模式;

  1. ad-hoc:简而言之,就是“临时命令”,不会保存;
  2. playbook”翻译过来就是剧本,在文件中保存执行的流程;

Ansible与SaltStack对比:

相同点:

  1. 都是使用python语言开发的
  2. 都具有二次开发的特性
  3. 执行命令都支持Ad-hoc模式(临时文件,执行完就返回)
  4. 都可以通过YAML格式文件批量执行
  5. 返回的结果都是JSON数据,便于后续处理

不同点:

  1. Ansible部署更简单,没有客户端,而Saltstack有客户端;
  2. Saltstack的响应速度要比Ansible更快;Ansible通过SSH协议实现,Saltstack使用了ZeroMQ实现通信;
  3. Ansible更加安全,SSH加密传输
  4. Saltstack对于Windows支持更友好,Ansible通过Power Shell来管理Windows
  5. Ansible维护简单,没有客户端,没有守护进程;saltstack需要有Master和minion,主机要启动一个守护进程。

6.Ansible的架构

 

  1. 主机清单inventory定义Ansible需要操作主机的范围
  2. 剧本playbook Ansible的配置文件,将多个任务定义在剧本中,由ansible自动执行
  3. 核心模块Core Modules连接主机实现操作,它依赖于具体的模块来做具体的事情
  4. 自定义模块Custom Modules根据自己的需求编写具体的模块
  5. 连接插件Connection Plugins 用于连接主机,用来连接被管理端
  6. 插件Plugins完成模块功能的补充

最重要的一点是:Ansible是模块化的,所有的操作都依赖于模块。

Ansible集群搭建

准备:

Server节点

192.168.213.10

Host1节点

192.168.213.11

Host2节点

192.168.213.12

Host3节点

192.168.213.13

1.编写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.213.10 server

192.168.213.11 host1

192.168.213.12 host2

192.168.213.13 host3

2.配置免密登录

主节点生成密钥对

[root@server ~]#  ssh-keygen -P "" -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:NYJeAQrXDBOcdJ4Adyy/2nkXn5ONq4xWJlYe6c405kc root@host1

The key's randomart image is:

+---[RSA 2048]----+

|  o+OB+..        |

|   ++B+o .       |

|    .o+ o o.     |

|     ... o+.     |

|      ..S+ .     |

|      . o X E    |

|     o o X = =   |

|    . o oo= B .  |

|       o..oo.o   |

+----[SHA256]-----+

-P "":设置空密码

-t rsa:指定生成密钥的类型为RSA

将公钥发给受管制节点(三台机器都要发)

[root@server ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@host1

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

root@host1's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@host1'"

and check to make sure that only the key(s) you wanted were added.

三个受管制的节点一次发送,测试免密登录:

[root@server ~]# ssh host1

Last login: Tue Nov 26 10:22:15 2024 from 192.168.213.1

[root@host1 ~]# exit

登出

Connection to host1 closed.

[root@server ~]# ssh host2

The authenticity of host 'host2 (192.168.213.12)' can't be established.

ECDSA key fingerprint is SHA256:6Mpa+9K+FMhcZ1UYuKOM9iK/ZBw9BWYC5snJeK12tPI.

ECDSA key fingerprint is MD5:68:37:fd:6d:82:a4:ad:d3:ff:4e:70:47:e2:70:01:99.

Are you sure you want to continue connecting (yes/no)? y

Please type 'yes' or 'no': y

Please type 'yes' or 'no': yess

Warning: Permanently added 'host2,192.168.213.12' (ECDSA) to the list of known hosts.

root@host2's password:

Last login: Tue Nov 26 10:22:34 2024 from 192.168.213.1

[root@host2 ~]# exit

登出

Connection to host2 closed.

[root@server ~]# ssh host3

The authenticity of host 'host3 (192.168.213.13)' can't be established.

ECDSA key fingerprint is SHA256:6Mpa+9K+FMhcZ1UYuKOM9iK/ZBw9BWYC5snJeK12tPI.

ECDSA key fingerprint is MD5:68:37:fd:6d:82:a4:ad:d3:ff:4e:70:47:e2:70:01:99.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'host3,192.168.213.13' (ECDSA) to the list of known hosts.

root@host3's password:

Last login: Tue Nov 26 10:22:52 2024 from 192.168.213.1

 

3.主节点安装Ansible

主节点安装epel-release源后,安装Ansible,并检查是否安装成功

[root@host3 ~]# yum install -y epel-release

[root@host3 ~]# yum install -y ansible

[root@server ~]# ansible --version

4.修改主机清单设置分组 

ansible常见的配置文件

  1. /etc/ansible/ansible.cfg:主配置文件
  2. /etc/ansible/hosts:主机清单文件
  3. /etc/ansible/roles:角色目录

备份主机求清单文件

[root@server ~]# cd /etc/ansible/

[root@server ansible]# ls

ansible.cfg  hosts  roles

[root@server ansible]# cp -f hosts hosts.bak

[root@server ansible]# ls

ansible.cfg  hosts  hosts.bak  roles

编写主机清单文件

[root@server ansible]# vi hosts

[all-servers]

server

host1

host2

host3

[node1]

host1

[node2]

host2

[node3]

host3

[mysql_test]      #规划节点host1和host2节点为数据库节点

host1

host2

[web_test]       #规划节点host2和host3节点为web节点

host2

host3

[manager]

server

 Ansible模块基本使用

Ansible常用参数说明

参数

说明

-h

显示帮助信息

-i

指定inventory文件路径,默认路径为/etc/ansible/hosts

-l

限制palybook或命令的作用范围

-u

连接远程主机时使用的用户名。

-b

相当于sudo

--become-user=USER

提上权限后切换到的用户

-m

指定要使用的模块名

-a

指定模块的参数

-f

指定并发进程数,默认为5

-v

增加输出的详细程度

-e

指定变量名

-diff

修改文件时显示修改前后的差异

Ansible的执行状态

绿色:执行成功并且不需要做改变的操作

黄色:执行成功并且对目标主机做变更

红色:执行失败

粉色:警告信息

蓝色:显示ansible命令执行的过程

1.shell模块

Shell模块用于在受控机上执行受控机上的脚本,亦可直接在受控机上执行命令。

Shell模块亦支持管道与重定向。

[root@server ansible]# ansible host1 -m shell -a 'a=10086;echo $a'

 ​​​​

查看web_test组远程主机的系统版本

[root@server ansible]# ansible web_test -m shell -a 'cat /etc/os-release | grep PRETTY_NAME | cut -d "=" -f2'

2.ping模块

Ping模块用于检查指定节点机器是否连通,用法很简单,不涉及参数

主机如果在线,则回复pong

[root@server ansible]# ansible -m ping node1

[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see

details

host1 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

以组为单位测试

[root@server ansible]# ansible -m ping all

[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see

details

The authenticity of host 'server (192.168.213.10)' can't be established.

ECDSA key fingerprint is SHA256:6Mpa+9K+FMhcZ1UYuKOM9iK/ZBw9BWYC5snJeK12tPI.

ECDSA key fingerprint is MD5:68:37:fd:6d:82:a4:ad:d3:ff:4e:70:47:e2:70:01:99.

Are you sure you want to continue connecting (yes/no)? host3 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

host2 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

host1 | SUCCESS => {

    "ansible_facts": {

        "discovered_interpreter_python": "/usr/bin/python"

    },

    "changed": false,

    "ping": "pong"

}

3.command模块

command模块用于在远程主机上执行命令,ansible默认就是使用command模块。

root@server ansible]# ansible host1 -m command -a 'ls /etc/yum.repos.d/'

相当于远程让host1节点执行ls命令

在受管制主机host1的/opt/目录下创建文件

[root@server ansible]# ansible host1 -m command -a 'touch /opt/hzy'

[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see

details

[WARNING]: Consider using the file module with state=touch rather than running 'touch'.  If you

need to use command because file is insufficient you can add 'warn: false' to this command task

or set 'command_warnings=False' in ansible.cfg to get rid of this message.

host1 | CHANGED | rc=0 >>

[root@server ansible]# ansible host1 -m command -a 'ls /opt/'

[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see

details

host1 | CHANGED | rc=0 >>

hzy

command模块有一个缺陷就是不能使用管道符和重定向功能。

command模块也可以多节点执行

[root@server ansible]# ansible -m command -a 'hostname' all

[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see

details

The authenticity of host 'server (192.168.213.10)' can't be established.

ECDSA key fingerprint is SHA256:6Mpa+9K+FMhcZ1UYuKOM9iK/ZBw9BWYC5snJeK12tPI.

ECDSA key fingerprint is MD5:68:37:fd:6d:82:a4:ad:d3:ff:4e:70:47:e2:70:01:99.

Are you sure you want to continue connecting (yes/no)? host2 | CHANGED | rc=0 >>

host2

host1 | CHANGED | rc=0 >>

host1

host3 | CHANGED | rc=0 >>

host3

4.user模块

主要用于管理远程系统上的用户账户,包括创建、修改和删除用户。

它允许你设置用户的密码、shell、主目录、权限等属性

常用参数:

system

创建用户设置用户是系统用户

uid

指定uid

group

指定用户组

home

指定家目录

comment

用户的描述信息

password

指定的用户密码

state

设置账号状态,默认为pressent表示新建用户,指定值为absent表示删除

update_password

更新用户密码

name

指定用户名

remove

在使用state=absent时,行为是与userdel -remove一致

[root@server ~]# ansible host1 -m user -a 'system=yes name=menys uid=776 comment="mys"'

指在host1节点创建一个名为menys的用户,uid为776,用户描述为mys

检查menys用户是否被正确创建,调用shell模块

[root@server ~]# ansible host1 -m user -a 'system=yes name=menys uid=776 comment="mys"'

删除menys用户

[root@server ansible]# ansible host1 -m user -a 'name=menys state=absent remove=yes'

再次调用shell模块检查menys是否被删除

[root@server ansible]# ansible host1  -m shell -a 'id hongzy ; grep ^menys: /etc/passwd | awk -F ":" '\''{print $5}'\'''

5.group模块 

group模块用于在受控机上添加或删除组

常用参数

gid

用于设置组GID

name

指定组名称(必选项)

non_uniue

允许组ID为非唯一值,与gid一起使用

state

指定用户组在远程主机上的状态,present和absent

system

创建的用户组是否是系统组

创建组

[root@server ansible]# ansible host1 -m group -a "name=footabll gid=1001 system=yes"

使用shell模块检查是否创建成功

[root@server ansible]# ansible host1 -m shell -a "cat /etc/group | grep 1001"

删除组

[root@server ansible]# ansible host1 -m group -a "name=football gid=1001 state=absent"

6.copy模块

在Ansible中,copy模块主要是将本地(执行Ansible任务的控制节点)的文件或目录复制到远程的host主机(被管理节点)。

常用参数

src

被复制文件的本地路径

dest

复制到管控节点的绝对路径(必选)

content

可以指定文件的值(内容)

mode

设置文件权限

force

当目标主机含有该文件时,但内容不同时,设为yes表示强制覆盖,设置为no,表示目标主机的目标位置不存在才复制

backup

在覆盖前,将源文件备份,备份文件包含时间信息

创建一个txt文件并写入内容

[root@server ansible]# echo "hello word" > /root/test.txt

将该文件复制到被管理主机host1节点的/opt/目录下并赋予权限755

[root@server ansible]# ansible host1 -m copy -a 'src=/root/test.txt dest=/opt/copy.txt mode=755'

7.fetch模块

Ansile的fetch模块用于从远程节点抓取文件并存储到Ansible控制器(执行A的指定目录)

常用参数

src

要远程拉取的文件(只能时文件)

dest

用来存放文件的目录

flat

设置为yes时,即使src是目录,也会将所有内容扁平化存储到dest

size

限制抓取文件的大小

force

即使本地文件已经存在了仍旧抓取,默认yes,设置no只有当远程文件比本地文件新或不同才执行抓取

validate_checksum

当设置为yes时,在下载完成后校验文件校检和确保文件完整无误

fail_on_missing

当设置为yes时,如果远程文件不存在,则标记任务失败,否则只是简单地跳过文件

path

必选项,定义文件/目录的路径

mode

定义文件/目录的权限

group

定义文件/目录的属组,后面可以加上mode:定义文件/目录的权限

owner

定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径

recurse

递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件state=link的情况

从远程主机抓取文件

#从mysql_test组的主机中抓取aliyun.sh文件到本机的/tmp/data目录下

[root@server ~]# ansible mysql_test -m fetch -a "src=/root/aliyun.sh dest=/tmp/data"

#通过检查/tmp/data下的目录结构可知文件以完整获取

[root@server ~]# ansible manager -m shell -a "tree -L 5 /tmp/data"

限制抓取文件的大小、添加文件存在检测

#从mysql-test组的主机中抓取install.sh文件。限制最大抓取大小20kb,传输中校检文件完整性,添加文件存在检测(不存在任务失败)

[root@server ~]# ansible mysql_test -m fetch -a "src=/root/install.sh dest=/tmp/data/ verify_checksum=yes fail_on_missing=yes size=20k"

这条命令的作用就是在manager这台机器或一组机器上列出/tmp/data目录的结构,并且只展示到第五级目录。这对于查看特定目录的层次结构非常有用,特别是在需要快速了解目录内容组织情况时。

[root@server ~]# ansible manager -m shell -a "tree -L 5 /tmp/data"

这条命令的作用就是在mysql_test这台机器或一组机器上列出/root目录的内容,并以长格式显示每个条目的详细信息,包括权限、所有者、组、大小、修改日期以及文件名等

[root@server ~]# ansible mysql_test -m shell -a "ls -l /root"

 8.file模块

file模块主要对于文件的创建、删除、修改、权限、属性

选项及描述

path

必选项,定义文件/目录的路径

mode

定义文件/目录的权限

force

需要在两种情况下创建软连接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软连接已存在,需要先取消之前的软连接,然后创建新的软链接,有两个选项:yes

group

定义文件/目录的属组,后面可以家伙三清宫mode:定义文件/目录的权限

owner

定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径

recurse

递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件路径,只应用于state=link的情况

dest

被链接到的路径,只应用于state=link的情况

Src

被链接的源文件路径,只应用于state=link的情况

state

状态,有以下选项:directory、file、link、hard、touch、absent

在指定路径下创建目录

#在mysql_test组所有主机在/tmp/路径下创建权限都是只读、属主属组都是root的file1目录

[root@server ~]# ansible mysql_test -m file -a "path=/tmp/file1 mode=444 owner=root group=root state=directory"

#查看创建好的目录

[root@server ~]# ansible mysql_test -m shell -a "ls -l /tmp/ | grep file1"

 

创建软连接文件

#给mysql_test组的所有主机创建软连接文件test1指向/root/aliyun.sh

[root@server ~]# ansible mysql_test -m file -a "path=/tmp/test1 src=/root/aliyun.sh state=link"

#要在host1和host2中分别创建aliyun.sh

 

创建硬链接文件

#给mysql_test组的所有主机创建硬链接文件test1指向/root/aliyun.sh

[root@server ~]# ansible mysql_test -m file -a "path=/tmp/test2 src=/root/aliyun.sh state=hard"

 

删除文件

#删除mysql-test -m file -a “path=/tmp/test1 state=sbsent”

[root@server ~]# ansible mysql_test -m file -a "path=/tmp/test1 state=absent"

9.corn模块 

远程给主机设置定时任务

两种状态:

present

表示添加(默认就是添加,可以省略)

absent

表示移除。absent在整个ansible的语法中都表示移除

minute

hour

day

mounth

weekday

job

任务执行的命令

name

任务计划的名称

backup

如果设置,会在修改crontab前创建备份。备份文件的位置通过backup_file变量返回

corn_file

如果指定,将使用此文件而非用户个人的crontab。如果是相对路径,于/etc/corn.d/绝对路径通常为/etc/crontab。为了使用cron_file参数

添加计划任务

#给mysql_test组中的所有主机添加一个以root用户每天三点执行/root/aliyun.sh脚本的计划任务

[root@server ~]# ansible mysql_test -m cron -a "name='Daily Task' minute=0 hour=3 job='/root/aliyun.sh &> /dev/null' user=root"

 

删除指定任务

#删除名为Daily Task的计划任务 (没有明确的计划任务名称写完整的计划任务也可以删除)

[root@server ~]# ansible mysql_test -m cron -a "name='Daily Task' state=absent"

10.yum模块

主要用于在基于RPM的linux系统上管理软件包。

它允许用户安装、更新、卸载软件包,并可配置额外的选项以控制操作的具体行为。

选项及描述

name

必选项,所安装的包的名称

state

安装->present; 安装最新版本的->latest;absent->卸载包

update_cache

强制更新yum的缓存

conf_file

指定远程yum安装时所依赖的配置文件(安装本地已有的包)

disable_pgp_check

是否禁止GPS checking,只用于presentor latest。

disableerepo

临时禁止使用yum库。只用于安装或更新时。

enablerepo

临时使用的yum库。只用于安装或更新时。

skip_borken

跳过异常软件节点

autoremove

当设置为yes且状态为absent时,自动移除不在被任何已安装包依赖的包。

安装httpd服务

#给web_test组的所有主机安装httpd服务

[root@server ~]# ansible web_test -m yum -a "name=httpd state=present"

#远程启动httpd服务

[root@server ~]# ansible web_test -m shell -a "systemctl start httpd"

#远程查看httpd服务进程

[root@server ~]# ansible web_test -m shell -a "ps aux | grep httpd"

#远程停止httpd服务

[root@server ~]# ansible web_test -m shell -a "systemctl stop httpd"

#远程卸载httpd服务

 

 启动并查看进程

关闭并卸载httpd服务

 

更新所有的软件包

#给所有主机更新所有的软件包

[root@server ~]# ansible all-servers -m yum -a "name=* state=latest"

 

11.service模块

Ansible的service模块用于管理系统服务(如启动、停止、重启服务等)。

这个模块与特定的系统服务管理工具(如systemctl、sysvinit、upstart等)兼容,能够跨不同的Linux发行版和系统管理框架工作。

选项及描述

arguments

额外的命令行参数,提供给服务管理命令。

enabled

服务是否应该在系统启动时自动启动。至少需要指定state或enabled中的一个。

name

(必须)服务的名称

pattern

如果服务不影响状态查询命令,可以指定一个子字符串作为查找依据,该字符串应能在ps命令的输出中找到,作为服务状态的替代判断。如果找到该字符串,服务将被认为已启动。

runlevel

仅针对OpenRC初始化脚本(如Gentoo)使用。指定该服务属于哪个运行级别。

sleep

当服务处于restarted状态时,停止与启动命令之间

state

有四种状态,分别为start--->启动服务,stopped--->停止服务,restart--->重启服务,reloaded--->重载配置

use

服务模块通常通过自动检测使用系统特定的模块,此设置可以强制使用特定模块。默认情况下,它使用ansible_service_mgr事实的值,并且在找不到匹配项时回退到旧的service模块。

远程开启/关闭防火墙

#给web_test组中的所有主机重启firewalld服务

[root@server ~]# ansible web_test -m service -a "name=firewalld state=restarted"

 

#查看web_test组中所有主机的firewalld服务运行部状态

[root@server ~]# ansible web_test -m shell -a "systemctl status firewalld"

 

给web_test组中的所有主机关闭firewalld服务

[root@server ~]# ansible web_test -m service -a "name=firewalld state=stopped"

12.script模块

Ansible的script模块允许你在远程主机上执行位于Ansible控制节点上的本地脚本

chdir

在远程节点上执行脚本之前切换到的目录路径。

cmd

要在远程节点上运行的本地脚本的路径,后面可以跟上可选的参数。注意,这个选项与free_form二选一使用。

creates

指定远程节点上的一个文件名,如果该文件已存在,则此步骤不执行,可用防止重复执行脚本。

decrypt

控制是否自动解密使用Vault加密的源文件

executable

用于调用脚本的可执行文件的名称或路径,例如如果脚本是python脚本,可以设置为/usr/bin/python

Free_form

直接提供本地脚本文件的路径以及可选的参数,与cmd选项作用相似但格式不同,两者选其一使用。

removes

指定远程节点上的一个文件名,如果该文件不存在,则此步骤将不执行,可以作为执行脚本的另一个条件。

编辑并部署脚本

控制节点本地编辑脚本并添加执行权限

 

通过script模块部署

#给web_test组的所有主机执行控制节点上的df.sh脚本文件

ansible web_test -m script -a “/tmp/df.sh”

13.setup模块 

Ansible的setup模块用于收集远程主机的信息,并将这些信息以facts的形式返回给Ansible控制节点。

这些facts可以包括系统变量(如操作系统类型、架构、网络配置、已安装软件包等),并且在Playbook执行期间可以被其他任务使用。

选项及描述

  1. act_path:用于存放本地Ansible事实(*.fact文件)的路径。此目录下的文件如果可执行,将被执行,其结果会被添加到ansible_local事实中;如果文件不可执行,则会被读取。适用于从2.1版本开始。文件/结果格式可以是JSON或INI格式。默认的fact_path可以在ansible.cfg中为自动调用setup作为gather_facts一部分时指定。Windows环境下有特定选项,请查看注释。
  2. filter:如果提供,仅返回匹配此shell风格(fnmatch通配符)的变量。这允许筛选出特定的facts进行查看或使用。
  3. gather_subset:如果提供,限制收集的额外事实子集。可能的值包括:all(全部)、min(最小集合)、hardware(硬件信息)、network(网络信息)、virtual(虚拟化信息)、ohai(类似Chef Ohai的扩展信息)、facter(使用Facter收集的信息)。可以指定值的列表来定义更大的子集。值前可加!来排除特定子集的收集,例如:!hardware,!network,!virtual,!ohai,!facter。如果指定!all,则只收集最小集合。要避免收集最小集合,可以指定!all,!min。要仅收集特定事实,使用!all,!min并指定特定的事实子集。如果只想隐藏某些收集到的事实,使用filter参数。
  4. gather_timeout:设置单个事实收集的默认超时时间(以秒为单位)。这有助于控制事实收集过程,避免因个别慢速收集导致整个任务超时。

查看内存信息

#查看mysql_test组所有主机的内存信息

[root@server ~]# ansible mysql_test -m setup -a "filter='*mem*'"

通过free -m 命令查看内存大小是否一致

#通过free -m命令查看mysql_test组主机的内存信息

root@server ~]# ansible mysql_test -m shell -a "free -m"

保存信息

#将筛选的信息保存到控制节点的/tmp/data目录下

[root@server ~]# ansible node3 -m setup -a 'filter="*mem*"' --tree /tmp/data

14.synchronize模块 

Ansible的synchronize模块提供了使用rsync进行文件和目录同步的功能

rsync是一个快速且高效的文件传输工具,支持增量更新,特别适合在远程主机之间同步大量文件或保持文件夹内容一致性。

选项及描述

  1. archive:镜像rsync的归档标志,启用递归、链接、权限、时间戳、所有者、组标志及-D。默认开启。
  2. checksum:基于校验和而非修改时间和大小来跳过同步,注意“archive”选项默认仍启用,"checksum"选项不会禁用它。默认关闭。从1.6版本起可用。
  3. compress:在传输过程中压缩文件数据。大多数情况下应保持启用状态,除非引起问题。默认开启。从1.7版本起可用。
  4. copy_links:将符号链接作为它们指向的对象(被链接项)复制,而不是复制符号链接本身。默认关闭。
  5. delete:删除目标路径中不存在于源路径的文件(在传输之后,不是之前)。此选项要求recursive=yes。表现得像rsync的--delete-excluded选项,忽略被排除的文件。默认关闭。
  6. dest:同步的目的地主机路径,将从源路径同步而来。路径可以是绝对或相对的。此选项是必须的。
  7. dest_port:目标主机SSH端口。在Ansible 2.0之前,ansible_ssh_port库存变量优先于这个值。此参数默认为ansible_ssh_port或ansible_port的值、remote_port配置设置的值,或如果没有设置前者,则使用SSH客户端配置的值。从1.5版本起可用。
  8. dirs:仅传输目录而不递归进入。默认关闭。
  9. existing_only:跳过在接收端创建新文件。默认关闭。从1.5版本起可用。
  10. group:保留组信息。默认值取决于archive选项。
  11. link_dest:添加一个硬链接目标,在rsync期间与之关联。默认为无。从2.5版本起可用。
  12. links:作为符号链接复制符号链接。默认值取决于archive选项。
  13. mode:指定同步的方向。推模式下,本地主机或代理是源;拉模式下,上下文中的远程主机是源。(可选值:pull, push)默认为push。
  14. owner:保留所有者(仅超级用户)。默认值取决于archive选项。
  15. partial:告诉rsync保留部分文件,这应该会使后续传输文件剩余部分快得多。默认关闭。从2.0版本起可用。
  16. perms:保留权限信息。默认值取决于archive选项。
  17. private_key:为基于SSH的rsync连接指定私钥(如~/.ssh/id_rsa)。默认为无。从1.6版本起可用。
  18. recursive:递归进入目录。默认值取决于archive选项。
  19. rsync_opts:通过传递数组来指定额外的rsync选项。注意,rsync_opts中的空字符串最终会传输当前工作目录。默认为无。从1.6版本起可用。
  20. rsync_path:指定在远程主机上运行的rsync命令。参见rsync手册页上的--rsync-path。要指定在本地主机上运行的rsync命令,你需要设置任务变量ansible_rsync_path。默认为无。
  21. rsync_timeout:为rsync命令指定一个超时时间(秒)。默认为0。
  22. set_remote_user:为远程路径添加user@。如果你有自定义的ssh配置来为与库存用户不匹配的主机定义远程用户,应将此参数设为no。默认为True。
  23. src:源主机上的路径,将同步到目的地。路径可以是绝对或相对的。此选项是必须的。
  24. times:保留修改时间。默认值取决于archive选项。
  25. use_ssh_args:使用ansible.cfg中指定的ssh_args。默认关闭。从2.0版本起可用。
  26. verify_host:验证目标主机密钥。默认关闭。从2.0版本起可用。

将源目录同步至目标目录

#既然是基于rsyno那么所有主机安装rsync

[root@server ~]# ansible all-servers -m shell -a "yum install -y rsync"

#将本地的/tmp/目录同步到node1组的host1主机上

[root@server ~]# ansible node1 -m synchronize -a "src=/tmp/ dest=/tmp/"

#查看node1组的host1主机的/tmp/目录结构

[root@server ~]# tree -L 5 /tmp/

root@server ~]# ansible node1 -m shell -a "tree -L 5 /tmp/"

所有主机安装rsync

 

同步本地/tmp/到host1主机上

查看目录结构

 

15.raw模块

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

[root@server ~]# ansible node3 -m raw -a 'echo "hello world" > /tmp/test'

[root@server ~]# ansible node3 -a 'cat /tmp/test'

[root@server ~]# ansible node3 -m raw -a 'cat /tmp/test | grep -Eo hello'

看到这了给个一键三连呗谢谢各位看官,可以一起交流学习。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB四种逻辑运算

MATLAB中的四种逻辑运算包括逻辑与用&或 a n d 表示 ( 全为 1 时才为 1 &#xff0c;否则为 0 ) and表示(全为1时才为1&#xff0c;否则为0) and表示(全为1时才为1&#xff0c;否则为0)&#xff0c;逻辑或用|或 o r 表示 ( 有 1 就为 1 &#xff0c;都为 0 才为 0 ) or表示…

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

鸿蒙NEXT开发案例:世界时间表

【引言】 本案例将展示如何使用鸿蒙NEXT框架开发一个简单的世界时钟应用程序。该应用程序能够展示多个城市的当前时间&#xff0c;并支持搜索功能&#xff0c;方便用户快速查找所需城市的时间信息。在本文中&#xff0c;我们将详细介绍应用程序的实现思路&#xff0c;包括如何…

Windows如何安装Php 7.4

一、进入官网&#xff0c;选择其他版本 https://windows.php.net/download/ 二、配置环境变量 将解压后的php 路径在系统环境变量中配置一下 cmd 后输入 php-v

yosys内部数据结构

一、参考链接 1.Yosys内部结构doxygen文件 yosys-master: RTLIL Namespace Reference 2.yosys内部结构介绍 https://yosyshq.readthedocs.io/projects/yosys/en/docs-preview-cellhelp/yosys_internals/formats/rtlil_rep.html 二、概览 图 1 网表核心数据结构 如图 1所示…

Java性能调优 - 多线程性能调优

锁优化 Synchronized 在JDK1.6中引入了分级锁机制来优化Synchronized。当一个线程获取锁时 首先对象锁将成为一个偏向锁&#xff0c;这样做是为了优化同一线程重复获取锁&#xff0c;导致的用户态与内核态的切换问题&#xff1b;其次如果有多个线程竞争锁资源&#xff0c;锁…

window的conda环境下espeak not installed on your system问题解决

1 问题描述 windows的conda环境下运行VITS2模型预处理&#xff0c;报出如下错误&#xff1a; Traceback (most recent call last):File "D:\ml\vits2\filelists.py", line 63, in <module>text_norm tokenizer(text_norm, Vocab, cleaners, languagehps.dat…

wine的使用方法

wine版本 所有分支&#xff0c;新的主要版本&#xff1a; wine-x.0 All branches, release candidates:各分支、候选版本&#xff1a; wine-x.0-rcn Stable branch updates: 稳定分支更新&#xff1a; wine-x.0.z Development branch updates: wine-x.y wine *.exe “更改目…

深度学习笔记26_糖尿病预测模型优化探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境&#xff1a;Python 3.9 2.编译器&#xff1a;Pycharm 3.深度学习环境&#xff1a;TensorFlow 2.10.0 二、GPU设置…

深度学习的unfold操作

unfold&#xff08;展开&#xff09;是深度学习框架中常见的数据操作。与我们熟悉的卷积类似&#xff0c;unfold也是使用一个特定大小的窗口和步长自左至右、自上至下滑动&#xff0c;不同的是&#xff0c;卷积是滑动后与核求乘积&#xff08;所以取名为卷积&#xff09;&#…

Redis篇-2--原理篇1--I/O多路复用机制(5种I/O模型,I/O多路复用)

I/O多路复用机制&#xff1a; Redis 是通过I/O多路复用机制来管理大量客户端连接。这使得redis可以实现通过单线程来处理多个客户端连接的请求&#xff0c;避免了为每个客户端创建独立的线程&#xff0c;从而减少了上下文切换的开销&#xff0c;提高了系统的并发性和性能。 理解…

计算机毕设-基于springboot的某学院兼职平台的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

Promise详解-1:初识Promise

最近在回顾ES6的知识&#xff0c;想整理下跟Promise相关的内容。我准备整一个Promise解读的系列&#xff0c;看看能深入到什么程度吧。由浅入深&#xff0c;先认识下Promise。 痛苦的回忆&#xff1a;回调地狱 假如现在让你维护一个“古老”的项目&#xff0c;缺少脚手架的加…

【蓝桥杯备战】Day 1

1.基础题目 LCR 018.验证回文串 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。 本题中&#xff0c;将空字符串定义为有效的 回文串 。 示例 1: 输入: s "A man, a plan, a canal: Panama…

让文案生成更具灵活性/chatGPT新功能canvas画布编辑

​ ​ OpenAI最近在2024年12月发布了canvas画布编辑功能&#xff0c;这是一项用途广泛的创新工具&#xff0c;专为需要高效创作文案的用户设计。 无论是职场人士、学生还是创作者&#xff0c;这项功能都能帮助快速生成、优化和编辑文案&#xff0c;提升效率的同时提高内容质量…

使用秘钥登录服务器

在我们测试或生产环境中&#xff0c;为了服务器安全性&#xff0c;有时可能需要以 SSH 密钥的方式登录服务器&#xff0c;接下来&#xff0c;将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…

linux-16 关于shell(十五)date,clock,hwclock,man,时间管理,命令帮助

想显示一下当前系统上的时间该怎么显示&#xff1f;有一个命令叫做date&#xff0c;来看date命令&#xff0c;如下图&#xff0c; 第一个星期几对吧&#xff1f;然后是月日小时分钟秒&#xff0c;最后一个是年对吧&#xff1f;CST指的是它的时间格式&#xff0c;我这个可以先姑…

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…

在 Ubuntu 中 make 是否是系统自带的?怎么样查看Linux系统中是否有make?

make 命令 并不是所有 Ubuntu 系统都默认安装的&#xff0c;但它通常是开发工具链的一部分&#xff0c;许多开发者会在安装系统后配置它。make 是一个非常重要的构建工具&#xff0c;用于自动化编译和构建过程&#xff0c;特别是在编译软件或内核时。 make 的来源 make 是一个…

ubuntu+ros新手笔记(一)

系统ubuntu20.04 ros noetic humble(源码安装失败&#xff0c;放弃源码安装了) 1. ubuntu安装vcs 拉取autoware源码的时候需要用到命令 vcs import src < autoware.ai.repos但是ubuntu默认没有安装vcs工具&#xff08;zsh: command not found: vcs&#xff09; 应使用以…