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

news2024/12/15 23:14:05
相关文章
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'

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

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

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

相关文章

期末复习-编译原理

一、引论 1.编译、翻译、解释的概念&#xff08;掌握&#xff09; 翻译程序&#xff1a;将一种语言程序&#xff08;源&#xff09;转换成另一种语言程序&#xff08;目标&#xff09;&#xff0c;两者在逻辑上是等价的。 如果源语言是高级语言&#xff0c;目标语言是低级语言…

pytorch bilstm crf的教程,注意 这里不支持批处理,要支持批处理 用torchcrf这个。

### Bi-LSTM Conditional Random Field ### pytorch tutorials https://pytorch.org/tutorials/beginner/nlp/advanced_tutorial.html ### 模型主要结构&#xff1a; ![title](sources/bilstm.png) pytorch bilstm crf的教程&#xff0c;注意 这里不支持批处理 Python version…

docker安装、升级、以及sudo dockerd --debug查看启动失败的问题

1、docker安装包tar下载地址 Index of linux/static/stable/x86_64/ 2、下载tgz文件并解压 tar -zxvf docker-24.0.8.tgz 解压后docker文件夹下位docker相关文件 3、将老版本docker相关文件&#xff0c;备份 将 /usr/bin/docker下docker相关的文件&#xff0c;mv到备份目录…

hive—炸裂函数explode/posexplode

1、Explode炸裂函数 将hive某列一行中复杂的 array 或 map 结构拆分成多行&#xff08;只能输入array或map&#xff09; 语法&#xff1a; select explode(字段) as 字段命名 from 表名; 举例&#xff1a; 1&#xff09;explode(array)使得结果中将array列表里的每个元素生…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换符 资料连接 Android RxJava&#xff1a; 这是一份全面…

浅谈Kubernetes(K8s)之RC控制器与RS控制器

1.RC控制器 1.1RC概述 Replication Controller 控制器会持续监控正在运行的Pod列表&#xff0c;并保证相应类型的Pod的数量与期望相符合&#xff0c;如果Pod数量过少&#xff0c;它会根据Pod模板创建新的副本&#xff0c;反之则会删除多余副本。通过RC可实现了应用服务的高可用…

直流开关电源技术及应用

文章目录 1. 开关电源概论1.1 开关电源稳压原理1.1.1 开关电源稳压原理核心组成部分及其作用工作过程稳压原理 1. 开关电源概论 1.1 开关电源稳压原理 为了提高效率&#xff0c;必须使功率调整器件处于开关工作状态。 作为开关而言&#xff0c;导通时压降很小&#xff0c;几乎…

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…

如何windows命令行使用kali?ssh连接高效又快捷

一、打开虚拟机kali进入cmd中 输入vim /etc/ssh/sshd_config&#xff0c;&#xff08;注意这里需要使用root权限&#xff09; 二、进入编辑文件页面 找到PermitRootLogin prohibit-password和 PasswordAuthentication no两行 将“prohibit-password”修改为“yes”&#xff0…

自动化测试之单元测试框架

单元测试框架 一、单元测试的定义 1&#xff1a;什么是单元测试&#xff1f; 还记不记得我们软件测试学习的时候&#xff0c;按照定义&#xff1a;单元测试就是对单个模块或者是单个函数进行测试&#xff0c;一般是开发做的&#xff0c;按照阶段来分&#xff0c;一般就是单元…

ansible部署nginx:1个简单的playbook脚本

文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…

SpringBoot左脚进门之Maven管理家

一、概念 Maven 是一个项目管理和整合工具。通过对 目录结构和构建生命周期 的标准化&#xff0c; 使开发团队用极少的时间就能够自动完成工程的基础构建配置。 Maven 简化了工程的构建过程&#xff0c;并对其标准化&#xff0c;提高了重用性。 Maven 本地仓库 (Local Reposi…

最短路----Dijkstra算法详解

简介 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger Dijkstra&#xff09;在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…

论文概览 |《Urban Analytics and City Science》2022.11 Vol.49 Issue.9

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2022年11月第49卷第9期的论文的题目和摘要&#xff0c;一共包括19篇SCI论文&#xff01; 论文1 On economic and urban growth 经济发展与城市增长 【摘要】 The dominant imperativ…

软件安装不成功,一直出现“chrome_elf.dll丢失”问题是什么原因?“chrome_elf.dll丢失”要怎么解决和预防?

软件安装遇阻&#xff1a;“chrome_elf.dll丢失”问题全解析与解决方案 在软件安装与运行的过程中&#xff0c;我们时常会遇到各式各样的错误提示&#xff0c;其中“chrome_elf.dll丢失”便是较为常见的一种。这个错误不仅阻碍了软件的正常安装&#xff0c;也给用户带来了不小…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

java之静态变量和方法(类变量、类方法)

1 类变量 1.1 简要介绍 由一个简单的程序引出&#xff1a; public class Example1 {int n;static int num 10; //有 static 修饰//此时 num 即为一个类变量&#xff08;静态变量&#xff09;&#xff0c;static 表示静态的//这个变量的最大特点是&#xff0c;它会被 Exampl…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试&#xff1a; 第一轮是逻辑行测&#xff0c;25道题目&#xff0c;类似于公务员考试题目&#xff0c;要求90分钟内完成。第二轮是技术面试&#xff0c;主要是做一些数据结…

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…

音视频入门基础:MPEG2-TS专题(16)——PMT简介

一、引言 PMT&#xff08;Program Map Table&#xff09;与PAT表成对出现&#xff0c;其PID由PAT表给出。通过PMT表可以得到该节目包含的视频和音频信息&#xff0c;从而找到音视频流&#xff1a; 二、PMT表中的属性 根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第79页&#x…