Ansible 自动化运维工具(完善版)

这篇具有很好参考价值的文章主要介绍了Ansible 自动化运维工具(完善版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 Ansible概述

Ansible特点

Ansible应用

1、使用者

2、Ansible工具集合

3、作用对象

Ansible的搭建

环境

ansible主机

1、ansible

2、Ansible-doc

Ansible模块

1.command模块

2.shell模块

3.raw模块


 Ansible概述

Ansible是最近非常火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误,Ansible可以通过本身集成的非常丰富的模块实现各种管理任务,其自带模块数量已超过上千个,更为重要的是,它的操作非常简单,即使新手也比较容易上手,Ansible提供的功能却非常丰富,在运维领域,几乎可以实现任何事情。目前属于RedHat公司产品,官方地址:Ansible is Simple IT Automation。

Ansible特点

Ansible自2012年发布以来,很快在全球流行,其特点表现如下:

  1. Ansible基于python开发,运维工程师对其二次开发相对容易
  2. Ansible拥有丰富的内置模块,基本可以满足一切要求
  3. 管理模式非常简单,一条命令可以影响上千台机器
  4. 无客户端模式设计,底层基于SSH通信
  5. Ansible发布后也陆续被AWS,Google,Cloud Platfrom,Microsoft Azure,Cisco,HP,VMware,Twitter等大公司接纳并投入使用

Ansible应用

Ansible没有客户端,也不需要在被管理主机添加任何代理程序,通过SSH完成底层通信,而SSH在Linux的发型版本中默认已经安装并启用,而在Windows系统下则依赖于PowerShell,Ansible要求管理端必须是Linux系统,在管理节点通过应用模块将指令发送到被管理主机上,并在执行完毕后自动删除产生的临时文件,根据Ansible使用过程中不同角色,可将其分为三个部分。

  1. 使用者如何使用Ansible实现自动化运维?
  2. Ansible的工具集,Ansible可以实现的功能?
  3. 作用对象,Ansible可以影响哪些主机?

1、使用者

如图所示:Ansible使用者可以采用多种方式和Ansible交互,图中我们展示了四种方式

  1. CMDB:CMDB系统存储和管理着企业IT架构中的各种配置信息,是构建ITL项目核心工具,运维人员可以组合CMDB和Ansible,通过CMDB直接下发指令调用Ansible工具完成操作者所希望达到的目标。
  2. PUBLIC/PRIVATE方式,Ansible除了丰富的内置模块外,同时提供丰富的API语言接口,如PHP,Pythone,PERL等多种流行语言,基于PUBLIC/PRIVATE,Ansible以API调用的方式运行。
  3. Ad-Hoc命令集,Users直接通过Ad-Hoc命令集调用Ansible工具来完成工作。
  4. Playbooks:Users预先编写好Ansible Playbooks,通过执行Playbooks中预先编排好的任务集按序执行命令。

2、Ansible工具集合

Ansible工具集合了inventory,Moudles,Plugins和API。其中,inventory用来管理设备列表,可以通过分组(不同的业务)实现,对组的调用直接影响组内所有的主机;Moudles是各种执行模块,几乎所有的管理任务都是通过模块来执行的;Plugins提供了各种附加功能;API为编程人员提供了一个调用接口,可以做Ansible的二次开发具体表现如下:

  1. Ansible Playbook:任务脚本,编排定义Ansible任务集的配置文件,由Ansible按序依次执行,通常是JSON格式的YML/YAML文件;
  2. inventory:Ansible管理主机清单
  3. Moudle:Ansible执行命令功能模块,多数为内置的核心模块也可以用户自定义;
  4. Plugins:模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插件等,该功能不常用。
  5. API:提供第三方程序调用的应用程序编程接口;

Ansible:该部分图中表示的,组合inventory,API,Moudles,Plugins可以理解为Ansible

命令工具其核心执行工具。

3、作用对象

Ansible的作用对象不仅仅是Linux和非Linux操作系统的主机,也可以作用于各类PUBLIC/PRIVATE,商业和非商业设备的网络设施。

使用者使用Ansible或Ansible-playbooks时,在服务器终端输入Ansible的Ad-Hoc命令集或playbooks后,Ansible会遵循预先定义安排的规则将Playbooks逐步拆解为Play,再将Play组织成Ansible可以识别的任务,随后调用任务涉及的所有模板和插件,根据inventory中自定义的主机列表通过SSH将任务集以临时文件或命令的形式传输给远程客户端执行并返回执行结果,如果是临时文件则执行完毕后自动删除。

Ansible的搭建

接下来我们来学习Ansible的安装和部署。Ansible的安装部署非常简单,以RPM安装为例,配置好阿里云的yum源直接安装就可以了,Ansible的管理端只能是Linux,如Redhat,Debian,CentOS。下面介绍在CentOS7.x上安装部署Ansible。 

环境

三台主机

192.168.1.127      ansible

192.168.1.104      client1

192.168.1.139      client2

关闭防火墙规则

ansible主机

rpm -ivh epel-release-latest-7.noarch.rpm       获取/下载epel

[root@ansible yum.repos.d]#  yum -y install ansible       下载ansible

[root@ansible yum.repos.d]# ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg                     查看安装成功没有
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

配置免密

[root@ansible yum.repos.d]# ssh-keygen -t rsa                          获取密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:zk14Bvu7AMdgMrTTwwac8ehWIU8MwC4ZHZg0nBQIkvs root@ansible
The key's randomart image is:
+---[RSA 2048]----+
|O@=+*=o          |
|Bo+.o@..         |
| =  * @ .        |
|+ .. B + +       |
| o  o . S +      |
|  E.   = *       |
|        + o      |
|         . .     |
|          o.     |
+----[SHA256]-----+

[root@ansible yum.repos.d]# ssh-copy-id root@192.168.1.139                  密钥转发
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.139 (192.168.1.139)' can't be established.
ECDSA key fingerprint is SHA256:KUnDzA9EBdTNT0UE3pDB18XcdeWBK780vEkpfsZR7PI.
ECDSA key fingerprint is MD5:f6:96:4e:cc:7f:5d:73:60:d6:e3:22:7c:00:25:32:3a.
Are you sure you want to continue connecting (yes/no)? yes
/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@192.168.1.139's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.1.139'"
and check to make sure that only the key(s) you wanted were added.

[root@ansible ansible]# ssh-copy-id 192.168.1.104                                 密钥转发
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.1.104 (192.168.1.104)' can't be established.
ECDSA key fingerprint is SHA256:piBqU+u0+t5qsjQT4q0bo3thfDsvUqPyITyru9QgFpI.
ECDSA key fingerprint is MD5:ce:f2:03:71:59:73:26:75:ed:a0:92:32:ed:e3:89:a5.
Are you sure you want to continue connecting (yes/no)? yes
/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: WARNING: All keys were skipped because they already exist on the remote system.
        (if you think this is a mistake, you may want to use -f option)

[root@ansible yum.repos.d]# cp /etc/ansible/hosts{,.bak}      做备份
[root@ansible yum.repos.d]# ll /etc/ansible/hosts{,.bak}
-rw-r--r--. 1 root root 1016 1月  16 2022 /etc/ansible/hosts
-rw-r--r--. 1 root root 1016 7月  14 09:13 /etc/ansible/hosts.bak

[root@ansible ~]# vim /etc/ansible/hosts                                         

inventory是Ansible管理主机信息的配置文件,相当于系统的Hosts文件功能,默认存放在/etc/ansible/hosts。在hosts文件中通过分组来组织设备,Ansible通过inventory来定义主机和分组,通过ansible命令中是用选项-i或者--inventory-file指定inventory。

[web]
192.168.1.104
192.168.1.139

实验

Ansible 自动化运维工具(完善版),运维,ansible,自动化

 置完成后可以针对hosts定义服务组件进行远程操作,也可以针对组中的指定的某一个或多个主机操作,下面接收如何针对特定的服务器操作

只对192.168.1.0网段主机进行操作。通过通配符限定主机变更

Ansible 自动化运维工具(完善版),运维,ansible,自动化

[root@ansible ~]#  ansible 192.168.1.* -m command -a "head -5 /etc/passwd"

nsible的维护命令大多以ansible开头,在终端输入ansible后连续按两次tab键,会补全所有以ansible字母开头的命令,下面介绍Ansible的一些常用命令。

[root@ansible ~]# ansible
ansible               ansible-console-2     ansible-galaxy-2      ansible-pull
ansible-2             ansible-console-2.7   ansible-galaxy-2.7    ansible-pull-2
ansible-2.7           ansible-doc           ansible-inventory     ansible-pull-2.7
ansible-config        ansible-doc-2         ansible-playbook      ansible-vault
ansible-connection    ansible-doc-2.7       ansible-playbook-2    ansible-vault-2
ansible-console       ansible-galaxy        ansible-playbook-2.7  ansible-vault-2.7

1、ansible

Ansible是生产环境中使用非常频繁的命令之一,主要在以下场景应用

  1. 非固化需求
  2. 临时一次性操作
  3. 二次开发接口调用

非固化需求是指临时性的维护,如查看Rich服务器组的磁盘使用情况,复制一个文件

到其他机器等,类似这些没有规律的,临时需要做的任务,我们称为非固化需求,临时一次性操作

语法: ansible  <host -pattem> [options]

可用选项如下

  • -v(--verbose):输出详细的执行过程信息,可以得到执行过程所有信息
  • -i PATH(inventory=PATH):指定inventory信息,默认为/etc/ansible/hosts
  • -f NUM(--forks=NUM):并发线程数,默认为5个线程
  • --private-key=PRIVATE_KEY_FILE:指定密钥文件
  • -m NAME,--moudle-name=NAME:指定执行时使用的模块
  • -M DIRECTORY(--module-path=DIRECTORY):指定模块存放路径,默认为/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认目录
  • -a ARGUMENTS(--args=ARGUMENTS):指定模块参数
  • -u USERNAME(--user=USERNAME):指定远程主机USERNAME运行命令
  • -l subset(--limit=SUBSET):限定运行主机
  • --list-hosts:列出符合条件的主机列表,不执行任何命令

实验所有主机是否存活

Ansible 自动化运维工具(完善版),运维,ansible,自动化

root@ansible ~]# ansible all -f 2 -m ping

这里只有两台,可以按需求调整

查看所有主机列表

[root@ansible ~]# ansible web --list-host
  hosts (2):
    192.168.1.104
    192.168.1.119
[root@ansible ~]# ansible web --list
  hosts (2):
    192.168.1.104
    192.168.1.119

查看web组磁盘使用情况
[root@ansible ~]# ansible web -m command -a "df -hT"
192.168.1.104 | CHANGED | rc=0 >>
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  475M     0  475M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M  7.9M  479M    2% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.8G   16G   11% /
/dev/sda1               xfs      1014M  168M  847M   17% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
192.168.1.119 | CHANGED | rc=0 >>
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  898M     0  898M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.7M  900M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  1.8G   16G   11% /
/dev/sda1               xfs      1014M  181M  834M   18% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0

  1. Rich需要提前在/etc/ansible/hosts文件中定义组
  2. Ansible的返回结果非常友好,一般会用三种颜色执行结果:红色绿色橘黄色,其中红色表示执行过程中有异常,橘黄色表示命令执行后目标有状态变化,绿色表示执行成功且没有对目标机器做修改

2、Ansible-doc

ansible-doc用来查询ansible模块文档的说明,类似于man命令,针对每个模块都有详细的用法说明及应用案例介绍

[root@ansible ~]#  ansible-doc -l | wc -l           查看帮助
3387

[root@ansible ~]# ansible-doc -s shell               查看 shell模块帮助

[root@ansible ~]# ansible-doc -s raw                 raw模块帮助

Ansible 自动化运维工具(完善版),运维,ansible,自动化

ansible-playbook

Ansible-playbook是日常应用中使用频率最高的命令,类似于Linux系统中的sh或source命令,用来执行系列任务,其工作机制是,通过读取编写好的playbook文件实现集中处理任务,ansible-playbook命令后跟yml或者yaml格式的playbook文件,playbook文件存放了要执行的任务代码,命令使用方式如下

[root@ansible ~]# vim sdf.yml

---
- name: Play 1
  hosts: all
  tasks:
    - name: Task 1
      command: ip a

- name: Play 2
  hosts: localhost
  tasks:
    - name: Task 2
      debug:
        msg: Hello, World!

 启动

[root@ansible ~]# ansible-playbook sdf.yml 

PLAY [Play 1] *****************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [192.168.1.119]
ok: [192.168.1.104]

TASK [Task 1] *****************************************************************************************
changed: [192.168.1.104]
changed: [192.168.1.119]

PLAY [Play 2] *****************************************************************************************

TASK [Gathering Facts] ********************************************************************************
ok: [localhost]

TASK [Task 2] *****************************************************************************************
ok: [localhost] => {
    "msg": "Hello, World!"
}

PLAY RECAP ********************************************************************************************
192.168.1.104              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.1.119              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Ansible playbook 的执行结果。结果分为几个部分:

  1. PLAY [Play 1]PLAY [Play 2] 是 playbook 中定义的两个 plays 的名称。
  2. TASK [Gathering Facts] 是一个内置的任务,用于收集主机的基本信息,如 IP 地址、操作系统等。
  3. TASK [Task 1]TASK [Task 2] 是你在 playbook 中定义的具体任务。
  4. ok: [192.168.1.119]ok: [192.168.1.104] 表示任务在这两台主机上成功执行。
  5. changed: [192.168.1.104]changed: [192.168.1.119] 表示任务在这两台主机上执行了变更。
  6. ok: [localhost] 表示任务在本地主机成功执行。
  7. "msg": "Hello, World!" 是任务执行结果中的一条 debug 信息,它打印了 "Hello, World!"。
  8. PLAY RECAP 列出了每个主机的执行结果汇总,包括执行成功的任务数、变更的任务数、不可达的主机数等。

综合来看,这个执行结果表示 playbook 中的任务在指定的主机上成功执行,并且有一些任务执行了变更操作。最后,打印了一个 debug 信息 "Hello, World!"。

ansible-console

ansible-console是ansible为用户提供的一款交互式工具,类似于Windows中的cmd以及Linux中的shell,用户可以在ansible-console虚拟出来的终端上做像shell一样使用ansible内置的各种命令,这为习惯于使用shell交互方式的用户提供了良好的体验,在终端输入ansible-console命令后显示如下

[root@ansible ~]# ansible-console
Welcome to the ansible console.
Type help or ? to list commands.

root@all (2)[f:5]$ cd web
root@web (2)[f:5]$ list
192.168.1.104
192.168.1.119
root@web (2)[f:5]$ exit

所有操作与shell类似,而且支持Tab键补全,按快捷键Ctrl+D或Ctrl+C即可退出当前的虚拟终端

Ansible模块

1.command模块

command模块在远程主机执行命令,但是不支持管道,重定向等shell的特征,常用参数如下(不支持管道,不建议使用)。

  1. chdir:在远程主机上运行命令前要提前进入的目录
  2. creates:在命令运行时创建一个文件,如果文件已经存在,则不会创建任务
  3. removes:在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务
  4. executable:指明运行命令的shell程序

实验案例

1.在所有主机上运行“ls./”命令,运行前切换到/home目录。操作如下。

准备一下环境:在两台主机上分别创建Rich用户否则/home下是空的查看不到效果

[root@ansible ~]#  ansible web -m command -a "useradd web"          创建
192.168.1.119 | CHANGED | rc=0 >>

192.168.1.104 | CHANGED | rc=0 >>

[root@client1 home]# ll                          查看
总用量 0
drwx------. 2 sd  sd  62 6月  19 21:55 sd
drwx------. 2 web web 62 7月  14 10:52 web

[root@clint2 home]# ll                               查看
总用量 0
drwx------. 2 sd  sd  62 6月  16 16:50 sd
drwx------. 2 web web 62 7月  14 10:52 web

[root@ansible ~]# ansible web -m command -a "chdir=/home ls -l"                      也可在ansible主机查看
192.168.1.104 | CHANGED | rc=0 >>
总用量 0
drwx------. 2 sd  sd  62 6月  19 21:55 sd
drwx------. 2 web web 62 7月  14 10:52 web
192.168.1.119 | CHANGED | rc=0 >>
总用量 0
drwx------. 2 sd  sd  62 6月  16 16:50 sd
drwx------. 2 web web 62 7月  14 10:52 web

[root@ansible ~]# ansible web -m command -a "uptime"
192.168.1.104 | CHANGED | rc=0 >>
 10:54:40 up  2:25,  5 users,  load average: 0.00, 0.01, 0.05
192.168.1.119 | CHANGED | rc=0 >>
 10:54:40 up  2:22,  5 users,  load average: 0.04, 0.04, 0.05

2.shell模块

shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令,和command模块的区别是它支持shell特征,如管道,重定向等。

实验案例

1、重定向

[root@ansible ~]# ansible web -m shell -a "echo 123 > 1.txt"
192.168.1.104 | CHANGED | rc=0 >>

192.168.1.119 | CHANGED | rc=0 >>

[root@client1 ~]# ll
总用量 8
-rw-r--r--. 1 root root    4 7月  14 10:55 1.txt

[root@clint2 ~]# ll
总用量 8
-rw-r--r--. 1 root root    4 7月  14 10:55 1.txt

2、测试管道符

过滤client端mac地址严格遵守文档格式 要不会报错

[root@ansible ~]# ansible web -m shell -a 'ifconfig ens33 | awk "/ether/{print $2}"'
192.168.1.104 | CHANGED | rc=0 >>
        ether 00:0c:29:13:d2:b5  txqueuelen 1000  (Ethernet)
192.168.1.119 | CHANGED | rc=0 >>
        ether 00:0c:29:44:9f:54  txqueuelen 1000  (Ethernet)

3.raw模块

最原始的方式运行命令(不依赖python,仅通过ssh实现)

清除yum缓存

[root@ansible ~]# ansible web -m raw -a "yum clean all"
192.168.1.119 | CHANGED | rc=0 >>
已加载插件:fastestmirror
正在清理软件源: base epel extras updates
Cleaning up list of fastest mirrors
Shared connection to 192.168.1.119 closed.

192.168.1.104 | CHANGED | rc=0 >>
已加载插件:fastestmirror
正在清理软件源: base epel extras updates
Cleaning up list of fastest mirrors
Shared connection to 192.168.1.104 closed.

4.copy模块

copy模块用于复制指定主机文件到远程主机的指定位置,常见参数如下

  1. dest:指出复制文件的目标目录位置,使用绝对路径。如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有内容。
  2. src:指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录
  3. mode:指出复制时,目标文件的权限 可选
  4. owner:指出复制时,目标文件的属主 可选
  5. group:指出复制时,目标文件的属组 可选
  6. content:指出复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据到目标文件中

特别提示:

参数:backup=yes===>意思是,如果目标路径下,有与我同名但不同内容的文件时,在覆盖前,对目标文件先进行备份。

所有被管理端节点必须安装libselinux-python包

[root@clint ~]#  rpm -q libselinux-python
libselinux-python-2.5-15.el7.x86_64

实验案例

将web组中主机的/etc/hosts文件拷贝到/tmp下 指定权限为777 更改属主为root更改属组为root

[root@ansible ~]#  ansible web -m copy -a "src=sdf.yml dest=/root/ mode=777 owner=root group=root"
192.168.1.111 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "6e0ddb56588e88a722a8e760908d45b834f25813", 
    "dest": "/root/sdf.yml", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "10f1cf7ec44e340cedc19d8bec114564", 
    "mode": "0777", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 183, 
    "src": "/root/.ansible/tmp/ansible-tmp-1689555382.53-63305-256611193573936/source", 
    "state": "file", 
    "uid": 0
}
192.168.1.108 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "6e0ddb56588e88a722a8e760908d45b834f25813", 
    "dest": "/root/sdf.yml", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "10f1cf7ec44e340cedc19d8bec114564", 
    "mode": "0777", 
    "owner": "root", 
    "secontext": "system_u:object_r:admin_home_t:s0", 
    "size": 183, 
    "src": "/root/.ansible/tmp/ansible-tmp-1689555382.53-63304-75918112237681/source", 
    "state": "file", 
    "uid": 0
}

5.hostname模块

hostname模块用于管理远程主机上的主机名,常用参数如下

1. name:指明主机名

实验案例

更改client1(192.168.1.111)的主机名为web

[root@ansible ~]# ansible 192.168.1.111 -m hostname -a "name=web"
192.168.1.111 | CHANGED => {
    "ansible_facts": {
        "ansible_domain": "", 
        "ansible_fqdn": "web", 
        "ansible_hostname": "web", 
        "ansible_nodename": "web", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "name": "web"
}

client1上查看

[root@client1 ~]# bash
[root@web ~]# bash

注意:更改回来,否则后面如果在测试主机名会报错

6.yum模块

Yum模块基于yum机制,对远程主机管理程序包,常用参数如下。

  1. name:程序包的名称,可以带上版本号,如不指定版本号默认安装为最新版本
  2. state=present | latest | absent:指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包
  3. disablerepo:在用yum安装时禁用某个仓库的ID
  4. enablerepo:在用yum安装时启用某个参考的ID
  5. conf_file:yum运行时的配置文件而不是使用默认的配置文件
  6. diable_gpg_check=yes | no:是否启用完整性校验功能

实验案例

注意实验前要在client端配置yum仓库

管理员只是发送yum命令道被管理端,被管理端要存在可用的yum仓库才可以成功安装

1. client端yum安装bind

  ansible web -m yum -a "name=bind state=present"

Ansible 自动化运维工具(完善版),运维,ansible,自动化

 

8.User模块

User模块用于管理远程主机上的用户账户,常见参数如下:

  1. name:必选参数  账号名称
  2. state=present | absent:创建账号或者删除账号,present表示创建,absent表示删除
  3. system=yes | no:是否为系统账号
  4. uid:用户UID
  5. group:用户的基本组
  6. groups:用户的附加组
  7. shell:默认使用的shell
  8. home:用户的家目录
  9. move_home=yes | no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
  10. password:用户的密码,建议使用加密后的字符串
  11. comment:用户的注释信息
  12. remove=yes | no:当state=absent时,是否删除用户的家目录

实验案例

1. 创建用户

[root@ansible ~]#  ansible web -m user -a 'name=user1 state=absent remove=yes'
192.168.1.111 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "force": false, 
    "name": "user1", 
    "remove": true, 
    "state": "absent", 
    "stderr": "userdel: user1 邮件池 (/var/spool/mail/user1) 未找到\n", 
    "stderr_lines": [
        "userdel: user1 邮件池 (/var/spool/mail/user1) 未找到"
    ]
}
192.168.1.108 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "force": false, 
    "name": "user1", 
    "remove": true, 
    "state": "absent", 
    "stderr": "userdel: user1 邮件池 (/var/spool/mail/user1) 未找到\n", 
    "stderr_lines": [
        "userdel: user1 邮件池 (/var/spool/mail/user1) 未找到"
    ]
}

9.script模块

script模块能够实现远程服务器批量运行本地的shell脚本

所有被管理端需要挂载光盘,并创建本地yum仓库文件

[root@ansible ~]# vim sdf.yml

touch /tmp/file{1..20}.txt文章来源地址https://www.toymoban.com/news/detail-570683.html

[root@ansible ~]# ansible web -m script -a "sdf.yml"
192.168.1.108 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.1.108 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.1.108 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}
192.168.1.111 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.1.111 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.1.111 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}

到了这里,关于Ansible 自动化运维工具(完善版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Ansible】Ansible自动化运维工具之playbook剧本

      简单来说,playbooks是一种简单的配置管理系统与多机器部署系统的基础。与现有的其他系统有不同之处,且非常适合复杂应用的部署。   Playbooks 可用于声明配置,更强大的地方在于,playbooks可以编排有序的去执行过程,甚至做到多组机器间来回有序的执行特别指定的

    2024年02月14日
    浏览(27)
  • 自动化运维工具之Ansible

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月08日
    浏览(53)
  • 自动化运维工具-------Ansible(超详细)

    Ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能, ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架 。 1)、no agents:不需要在

    2024年02月10日
    浏览(27)
  • Linux:ansible自动化运维工具

    当前所有执行权限我是在root下执行的,如果提示权限之类的,可以在每句命令前  加上 sudo     ansible主服务器  192.168.0.194         另外两个客户端分别为 192.168.0.193   192.168.0.192 软件只需要在主服务器上安装,客户端不需要去安装软件,因为他们相互使用的是ssh 只需要

    2024年02月11日
    浏览(29)
  • Ansible自动化运维工具的认识

    目录 一、Ansible概述 二、Ansible特点 三、Ansible应用 1、使用者 2、Ansible工具集合 3、作用对象 四、Ansible的搭建 1、实验环境 2、环境准备 Ansible: 3、创建ssh免密交互登录 client端环境准备 五、Ansible配置 六、Ansible命令 1、ansible 实验案例: 1.检查所有主机是否存活 2.列出Rich组中

    2024年02月16日
    浏览(31)
  • Ansible自动化运维工具---Playbook

    playbook是剧本的意思,通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。 playbook各部分组成 : Tasks : 任务,即调用模块完成的某操作 Variables : 变量 emplates : 模板 Handlers : 处理器,当某条件满足时,触发执行的操作 Roles : 角色 playbook yaml语法 是换行空两格,-和

    2024年02月03日
    浏览(28)
  • Ansible 自动化运维工具的使用

    目录   一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 (1)command 模块 (2)shell 模块 (3)cron 模块 (4)user 模块 (5)group 模块 (6)copy 模块 (7)file 模块 (8)hostname 模块 (9)ping 模块  (10)yum 模块 (11)service/

    2024年02月11日
    浏览(30)
  • 自动化运维工具——Ansible学习(二)

    目录 一、handlers和notify结合使用触发条件 1.新建httpd.yml文件 2.复制配置文件到ansible的files目录中 3.卸载被控机已安装的httpd 4.执行httpd.yml脚本 5.更改httpd.conf配置文件 6.使用handlers 7.重新执行httpd.yml脚本 8.检查被控机的端口号是否改变 9.handlers也可以触发多个 二、tags 1.通过指定

    2024年02月16日
    浏览(28)
  • Ansible自动化运维工具介绍与部属

    ansible是新出现的自动化运维工具,基于python开发,集合了从多的运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基于paramiko开发的,并且基于模块化工作,它本身没有批量部署的能力。真正具有批量部署的是

    2024年02月07日
    浏览(32)
  • 自动化运维工具Ansible教程(一)【入门篇】

    ansible 学习大纲 Ansible 是一个开源的自动化工具,用于配置管理、应用部署和任务执行。它以简单、可读性强的 YAML 格式的 Playbooks 为基础,使得自动化任务变得简单、可维护和可扩展。 简单易用 :Ansible 的设计目标之一是简单易用。它使用 YAML 语法定义任务和配置,无需编

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包