hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)
  f8a0V3iFVhbW 2023年11月02日 128 0


目录

​一、实验前准备​

​二、ansible介绍​

​2.1 ansible简介​

​2.2 ansible工作机制​

​2.3  ansible应用前提:标准体系建设(重要)​

​2.3.1 标准先行​

​2.3.2 为什么要做标准化​

​ 三、ansible安装配置及使用说明​

​3.1 安装ansible(yum)​

​3.1.1 安装第三方epel源​

​3.1.2 安装ansible( yum)​

​3.2 ansible相关说明​

​3.2.1 ansible的七个命令​

​3.2.2 ansible命令语法​

​2.3.3 ansible主要配置文件​

​3.3 运行第一条命令​

​3.3.1 指定登陆用户名和密码方式(不推荐)​

​3.3.2 使用免密码方式​

​四、机子清单Inventory介绍​

​附录一、 ansible七个命令​

​1. ansible(核心命令 常用)​

​2. ansible-doc(模拟说明 常用)​

​3. ansible-galaxy​

​4. ansible-lint​

​5. ansible-playbook(重要)​

​6. ansible-pull​

​7. ansible-vault​

​附录二、ansible命令参数解释​


ansible是运维必须掌握的工具,找运维工作几乎都要求会,在学习ansible之前先学会安装,这样边安装边学会效果更好。

我在入门篇的安装软件都是手工安装的,当你看完我所有入门篇的东西,发现很多其实是重复的,手工安装慢效率低下,又容易出错,为了提交效率一般我们推荐自动化部署工具,如ansible(python写的)、saltStack(python写的)、Puppet(ruby写的)等,它们区别是:

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_centos8 ansible

我们一般推荐使用python工具,因为火啊,而且我们做运维的,开发也是用python,更有助于我们对python的理解。

一、实验前准备

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

         通过VMware虚拟机实验熟悉使用ansible

主机名

IP地址(NAT)

IP地址(内网)

描述

vm82

ens33:192.168.128.82

ens34:192.168.3.82

  1. Centos8.2最小化(2内存)
  2. 只安装了一些基础软件,做了快照
  3. yum 安装ansible 目前版本为2.9.11

vm821

ens33:192.168.128.21

ens34:192.168.3.21

  1. Centos8.2最小化(1.5内存)
  2. 只安装了一些基础软件,做了快照
  3. 普通机子,不用安装ansible

vm76 

ens33:192.168.128.76

ens34:192.168.3.76

  1. Centos7.6最小化(1.5内存)
  2. 只安装了一些基础软件,做了快照
  3. 普通机子,不用安装ansible

备注:

  1. 我用的是VMware10虚拟机做的实验,本机内存8G,可以根据你们的情况调整
  2. 这里使用的是双网卡,一个是物理网卡,一个是loopBack网卡
    如果公司内网都做了mac地址绑定,可以使用NAT模式上网。这里使用NAT模拟外网
    内网的IP地址我使用的是LoopBack网卡方便登陆管理,实验都会用它做内网
  3. 内存推荐2G,小的话弄1.5G也行,centos7以上不建议弄1G,很容易出

PS:

centos8安装可以看我的《centos8最小化安装​》,centos7安装可以看《centos7最小化安装》

centos7和centos8都按上面的教程,关闭了selinux、防火墙、安装第三方源epel源及remi源、安装了基础的软件。

 

二、ansible介绍

2.1 ansible简介

 ansible是个什么东西呢?官方的title是“Ansible is Simple IT Automation”——简单的自动化IT工具。这个工具的目标有这么几项:

  1. 自动化部署APP;
  2. 自动化管理配置项;
  3. 自动化的持续交互;
  4. 自动化的(AWS)云服务管理;

所有的这几个目标从本质上来说都是在一个台或者几台服务器上,执行一系列的命令而已。通俗的说就是批量的在远程服务器上执行命令。当然,最主要的是它是基于 paramiko 开发的。这个paramiko是什么呢?它是一个纯Python实现的ssh协议库。因此fabric和ansible还有一个共同点就是不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。

ansible通过ssh实现配置管理、应用部署、任务执行等功能,因此,需要事先配置ansible端能基于密钥认证的方式联系各被管理节点。

ansible不像saltStack那样是没有agent端的,轻量级,虽然没有saltStack那样强大,但是因为简单方便入门相对简单,还是有不少企业在使用,还有现在python的流行也是不少运维学习ansible的原因

 

2.2 ansible工作机制

ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:

        (1)、连接插件connection plugins:负责和被监控端实现通信;
        (2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
        (3)、各种模块核心模块、command模块、自定义模块;
        (4)、借助于插件完成记录日志邮件等功能;
        (5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

下面是ansible的架构图:连接其他主机默认使用ssh协议

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_centos8 ansible_02

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_ansible_03

由上面的图可以看到 Ansible 的组成由 以下部分组成:

  1. 核心:ansible
  2. 核心模块(Core Modules):这些都是ansible自带的模块
  3. 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块
  4. 插件(Plugins):完成模块功能的补充
  5. 剧本(Playbooks):
  6. ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行
  7. 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件
  8. 主机群(Host Inventory):定义ansible管理的主机

 

2.3  ansible应用前提:标准体系建设(重要)

2.3.1 标准先行

自动化的前提是“标准先行,标准先行,标准先行”,重要的事情说三遍

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_hualinux 进阶_04

我们运维工作的开展常常不知从何下手,或者上来就冲着工具和自动化去了,却始终不得章法,工具做了一堆,效率却并没有提升。其实绝大多数情况下,问题和原因就是标准化这个基础工作没做扎实。

 

2.3.2 为什么要做标准化

标准化的过程实际上就是对运维对象的识别和建模过程。形成统一的对象模型后,各方在统一的认识下展开有效协作,然后针对不同的运维对象,再抽取出它们所对应的运维场景,接下来才是运维场景的自动化实现。

这有点像我们学的面向对象编程的思想,其实我们就是需要遵循这样一个思路,我们面对的就是一个个实体和逻辑运维对象。

在标准化的过程中,先识别出各个运维对象,然后我们日常做的所有运维工作,都应该是针对这些对象的运维。如果运维操作脱离了对象,那就没有任何意义。同样,没有理清楚对象,运维自然不得章法。

比如我们说扩容,那就要先确定这里到底是服务器的扩容,还是应用的扩容,还是其它对象的扩容。你会发现,对象不同,扩容这个场景所实施的动作是完全不一样的。

如果把服务器的扩容套用到应用的扩容上去,必然会导致流程错乱。同时对于对象理解上的不一致,也会徒增无谓的沟通成本,造成效率低下。自然地,这种情况下的运维自动化不但不能提升效率,还会越自动越混乱。

这就是为什么我每次都会连续强调三遍“标准先行”的原因。虽然这个事情比较枯燥和繁琐,但是于纷繁复杂中抽象出标准规范的东西,是我们后续一系列自动化和稳定性保障的基础。万丈高楼平地起,所以请你一定不要忽略这个工作。

具体怎么实现我这里就不详解,毕竟这是教ansible的,不能远离主题。

下面截2个简单标准化截图:

1.基础实施层面

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_ansible手把手版_05

2. 应用层面

 

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_ansible手把手版_06

 三、ansible安装配置及使用说明

3.1 安装ansible(yum)

3.1.1 安装第三方epel源

根据ansible官网文档的安装教程 ​​Installing Ansible on RHEL, CentOS, or Fedora​​​得知需要安装​​epel​​源,我的是centos8所以安装 

#RHEL/CentOS 7 版本安装命令
#yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#RHEL/CentOS 8版本安装命令
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

3.1.2 安装ansible( yum)

ansible第三安装也简单,直接yum,centos8推荐用dnf也行,一样的,安装命令如下:

#yum安装会直接调用epel源
yum install ansible -y

PS:如果卡的话可以使用国内的源安装,命令如下:

#建立相关存放软件的目录 mkdir -p /disk1/tools cd /disk1/tools/ #epel官方清华大学镜像下载对应版本,我这里是 ansible-2.9.11-1.el8.noarch.rpm wget https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/Packages/a/ansible-2.9.11-1.el8.noarch.rpm #不能使用rpm安装,一定要yum或dnf install安装,这样安装了才会自动安装第三方依赖 yum install ansible-2.9.11-1.el8.noarch.rpm -y #安装完返回到home目录 cd ~

hualinux 进阶 2-1.1:centos8安装ansible(手把手版 注解版)_ansible_07

3.2 ansible相关说明

3.2.1 ansible的七个命令

#输入ansible+tab键盘
[root@vm82 ~]# ansible
ansible ansible-console ansible-inventory ansible-test
ansible-config ansible-doc ansible-playbook ansible-vault
ansible-connection ansible-galaxy ansible-pull

从上面看到默认yum安装之后可以使用的ansible命令,其中比较重要的有7个为:

ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault有兴趣可以看“附录一”,用的最多的只有两个ansible 和ansible-playbook ,这两个一定要掌握,其他五个属于拓展或高级部分。

3.2.2 ansible命令语法

ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令,一般语法为:

格式:ansible <hosts_name/inventory_file> -m <module_name> -a <arguments>

例子:

ansible t1 -m shell -a 'date'

可选参数:

-m 模块名,默认不指定模块时,使用的是command模块。

-a 针对模块的具体指令,用单引号包含

-f 并行执行的设备数(默认为5)

-i 指定Inventory的路径(默认为/etc/ansible/hosts)

-u 执行用户(默认为root)

-P 后台执行(后跟数字表示隔多少秒轮询一次,为0表示静默执行)

-B 最大执行时长(单位秒)

ansible-playbook命令到后面再讲

2.3.3 ansible主要配置文件

         yum安装完ansible之后一些主要的配置文件及作用如下:

/etc/ansible  #ansible配置目录
/etc/ansible/ansible.cfg #配置文件
/etc/ansible/hosts #主机库(host inventory)
/usr/bin/ansible #主程序
/usr/bin/ansible-doc #文档
/usr/bin/ansible-playbook #剧本

关于更多的Ansible的配置文件请看​​ansible中文文档详解​​,这里就不作详解。

3.3 运行第一条命令

         ansible执行远程主机操作命令,所以得先配置主机库,在这里打算定义一个t1的主机组。为了方便我只添加vm821的主机,当后面用到的时候再添加centos7主机vm76

#进入配置目录并备份配置
cd /etc/ansible/
cp hosts hosts.orig

我们如果配置了主机组,因ansible用的是ssh连接的而且操作的,所以需要用到用户名和密码,这里有二种方式

  1. 在ansible配置中指定用户名和密码(不安全,不推荐)
  2. 免密码登陆方式

3.3.1 指定登陆用户名和密码方式(不推荐)

         把远程主机的ssh用户名和密码放在配置文件中,如果一旦这台主机被入侵那么就可以取得用户名和密码了,这种方式非常不安全,只做实验测试。

配置格式一般为:

[主机组名]
ip1 [ansible_ssh_port=端口] [ansible_ssh_user=用户名] [ansible_ssh_pass=密码]
ip2 [ansible_ssh_port=端口] [ansible_ssh_user=用户名] [ansible_ssh_pass=密码]
...

参数详见官方或​​ansbile中文权威指南​

#我现在我把vm821的添加到hua主机组中,操作如下:

#尾部添加,我配置文件中填写root用户名和密码
cat>>hosts<<EOF
[hua]
192.168.3.21 ansible_ssh_user=root ansible_ssh_pass=123456a
EOF
tail -2 hosts
#效果如下:
[root@vm82 ansible]# egrep -v '^$|^#' hosts
[hua]
192.168.3.21 ansible_ssh_user=root ansible_ssh_pass=123456a

#注:

实际线上环境不能用”hua”这种名字做工作组,这种组名,估计做了作者没人知道它是干嘛的了,不适合规范化!应该要根据公司约定,弄一个规范出来如是nginx+php的,其中起名字可以是 [centos8_web_nginx1.18_php56]这种有意义的组名

#运行一个测试命令,如获取对方的IP地址

根据上面所说的“ansible”命令的语法,执行如下:

#-a是参数args的意思,还有-m是模块名module-name,如果没有指定的话可以
ansible hua -a 'ip addr'

发现报错了,如下:

[root@vm82 ansible]# ansible hua -a 'ip addr' 192.168.3.21 | FAILED | rc=-1 >> Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.

解决方法:第一次登陆还需要手动输入“yes”添加信任,如果避免这一步的话也可以,需要配置ansible的配置文件ansible.cfg,如果不想每次都提示可以在 ansible.cfg配置中设置 “host_key_checking = False”

#备注配置 cp ansible.cfg ansible.cfg.orig # 把 #host_key_checking = False 注解去掉 sed -i '/host_key_checking/s/#//' ansible.cfg grep host_key_checking ansible.cfg

#执行效果:
[root@vm82 ansible]# ansible hua -a 'ip addr'
192.168.3.21 | CHANGED | rc=0 >>
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:b7:b1:bc brd ff:ff:ff:ff:ff:ff
inet 192.168.128.21/24 brd 192.168.128.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::4244:1241:cb64:9560/64 scope link dadfailed tentative noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::5c43:ae16:3d21:3439/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens34: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:b7:b1:c6 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.21/24 brd 192.168.3.255 scope global noprefixroute ens34
valid_lft forever preferred_lft forever
inet6 fe80::b253:8225:92cb:c810/64 scope link dadfailed tentative noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::a557:999e:f395:cbae/64 scope link noprefixroute
valid_lft forever preferred_lft forever

3.3.2 使用免密码方式

上面把密码写在配置文件中不安全,这里推荐使用免密码的方式,操作如下:

在ansible所在的主机上执行如下操作。

#1.生成私钥

#一直回车,为了方便,我没有设置密码

#生成密钥
ssh-keygen -t rsa
ll /root/.ssh/
[root@vm82 ansible]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
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:Uo8BMSILN+oHSDJ6slONi4dPQ05fp314HzqGEKL7sL8 root@vm822
The key's randomart image is:
+---[RSA 3072]----+
|+.+ . +. |
|== * . o |
|=.B o o + |
|.@.+ o * = |
|=.B.. + S + . |
| =.o o + o . |
| + . + . |
| + . . |
| ..E. |
+----[SHA256]-----+
[root@vm822 ansible]# ll /root/.ssh/
总用量 12
-rw------- 1 root root 2590 9月 4 21:02 id_rsa
-rw-r--r-- 1 root root 564 9月 4 21:02 id_rsa.pub
-rw-r--r-- 1 root root 174 9月 4 20:53 known_hosts

#2.通过 ssh-copy-id 进行传输公钥

#复制公钥到要控制的服务器上,这样有公钥的情况下,只有拿到私钥的服务器就可以免密码连接了
[root@vm82 ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.3.21
/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@192.168.3.21's password: #这里输入192.168.3.21的root密码

Number of key(s) added: 1

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

PS:一般生产环境中,为了安全不能直接用root,也会禁止root直接登录,可以是普通用户,如果需要用到普通用户的root功能,可以使用把普通用户添加到 sudo中,可以使用 visudo 命令进行添加,不懂的可以搜索一下。

#3.去掉ansible配置中的用户名和密码相关的参数

sed -i '/192.168.3.21/c\192.168.3.21' hosts
#把 192.168.3.21 ansible_ssh_user=root ansible_ssh_pass=123456a 改为 192.168.3.21
tail -2 hosts

#运行一下测试命令
ansible hua -a "hostname"
#效果
#直接运行 hua 主机组下所有主机,我这里目前只有一个
[root@vm82 ansible]# ansible hua -a "hostname"
192.168.3.21 | CHANGED | rc=0 >>
vm821

同理,我们也为centos7,建立一个名为h1的组,并把它放在下面

#尾部添加配置
cat>>hosts<<EOF
[h1]
192.168.3.76
EOF
#最终配置文件的配置如下:
[root@vm82 ansible]# egrep -v '^$|^#' hosts
[hua]
192.168.3.21
[h1]
192.168.3.76
#复制公钥
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.3.11
#按提示输入192.168.3.11的密码即可
#效果
[root@vm82 ansible]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.3.76
/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@192.168.3.76's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'root@192.168.3.76'"
and check to make sure that only the key(s) you wanted were added.
#测试一下命令,发现是可用的
[root@vm82 ansible]# ansible h1 -a 'hostname'
192.168.3.76 | CHANGED | rc=0 >>
vm76
[root@vm822 ansible]# cd ~
[root@vm822 ~]#

四、机子清单Inventory介绍

​Inventory file 机器清单​​,ansible用于管理机器节点的配置文件,类似系统的/etc/hosts文件。最常见的格式是YAML和INI

默认的配置文件为:​​/etc/ansible/hosts​

PS:关于详细说明可以看ansible中文权威指南中的 ​​Inventory文件​​​ 介绍,也可以看ansible官方​​inventory的介绍​

Inventory文件遵循ini文件风格,[]标记分组,方便对机器列表的管理。下面是例子:

#inventory file例子,可在这里添加主机名hostname或者ip地址 
#未分组的主机,添加在最前面
122.19.45.201
hostname1
122.19.45.[1:10] #[1:10]表示所有1~10之间的数字,表示一组ip地址45.1、45.2、...

#分组管理的主机,以便对不同主机进行不同的管理,同一主机可同时属于不同组
[test0] #组名
122.28.13.100
122.19.61.68:5030 #如果主机ssh端口不是22,可在地址后加:指定

[targets1]
localhost ansible_connection=local
122.28.13.10 ansible_connection=ssh
ansible_ssh_user=user #指定连接类型和连接用户名

[targets2] #可配置主机变量
host1 http_port=80
host2 http_port=80 var2=xxx var3=xxx

[targets2:var] #添加关键字var,配置组变量,对属于该组的所有主机都适用
var4=xxx
var5=xxx

[targets3:children] #添加关键字children,把组作为其他组的子成员
targets1
targets2

 

附录一、 ansible七个命令

1. ansible(核心命令 常用)

ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块

 这个命令使用得最频繁,需要熟悉,部分参数解释见“附录二”

2. ansible-doc(模拟说明 常用)

该指令用于查看模块信息,常用参数有两个-l 和 -s

ansible-doc -l 列出Ansible系统支持的所有模块

ansible-doc <module_name> 模块的详细说明

ansible-doc -s <module_name> 模块支持的操作

例子:

#查看shell模块的使用说明
ansible-doc shell

3. ansible-galaxy

ansible-galaxy 指令用于方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,我们可以形象的理解其类似于centos下的yum、python下的pip或easy_install

例:

ansible-galaxy install aeriscloud.docker

这个安装了一个aeriscloud.docker组件,前面aeriscloud是galaxy上创建该模块的用户名,后面对应的是其模块。在实际应用中也可以指定txt或yml 文件进行多个组件的下载安装。这部分可以参看​​官方文档​​。

4. ansible-lint

ansible-lint是对playbook的语法进行检查的一个工具。用法是ansible-lint playbook.yml

5.

该指令是使用最多的指令,其通过读取playbook(剧本)文件后,执行相应的动作,这个后面会做为一个重点来讲。

6. ansible-pull

该指令使用需要谈到ansible的另一种模式---pull 模式,这和我们平常经常用的push模式刚好相反,其适用于以下场景:你有数量巨大的机器需要配置,即使使用非常高的线程还是要花费很多时间;你要在一个没有网络连接的机器上运行Anisble,比如在启动之后安装。

7. ansible-vault

ansible-vault主要应用于配置文件中含有敏感信息,又不希望他能被人看到,vault可以帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里比如涉及到配置密码或其他变量时,可以通过该指令加密,这样我们通过cat看到的会是一个密码串类的文件,编辑的时候需要输入事先设定的密码才能打开。这种playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。具体该部分可以参查​​官方博客​​。

注:上面七个指令,用的最多的只有两个ansible 和ansible-playbook ,这两个一定要掌握,其他五个属于拓展或高级部分。

 

附录二、ansible命令参数解释

输入“ansible --help”会得到帮助,部分参数解释如下

参数:
-a 'Arguments', --args='Arguments' 命令行参数
-m NAME, --module-name=NAME 执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts.
-u Username, --user=Username 执行用户,使用这个远程用户名而不是当前用户
-U --sud-user=SUDO_User sudo到哪个用户,默认为 root
-k --ask-pass 登录密码,提示输入SSH密码而不是假设基于密钥的验证
-K --ask-sudo-pass 提示密码使用sudo
-s --sudo sudo运行
-S --su 用 su 命令
-l --list 显示所支持的所有模块
-s --snippet 指定模块显示剧本片段
-f --forks=NUM 并行任务数。NUM被指定为一个整数,默认是5。 #ansible testhosts -a "/sbin/reboot" -f 10 重启testhosts组的所有机器,每次重启10台
--private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
-v --verbose 详细信息
all 针对hosts 定义的所有主机执行
-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文件
-o --one-line 压缩输出,摘要输出.尝试一切都在一行上输出。
-t Directory, --tree=Directory 将内容保存在该输出目录,结果保存在一个文件中在每台主机上。
-B 后台运行超时时间
-P 调查后台程序时间
-T Seconds, --timeout=Seconds 时间,单位秒s
-P NUM, --poll=NUM 调查背景工作每隔数秒。需要- b
-c Connection, --connection=Connection 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。
--tags=TAGS 只执行指定标签的任务 例子:ansible-playbook test.yml --tags=copy 只执行标签为copy的那个任务
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文件
--list-tasks 列出所有将被执行的任务
-C, --check 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
--syntax-check 执行语法检查的剧本,但不执行它
-l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.0.15 只对这个ip执行
--skip-tags=SKIP_TAGS 只运行戏剧和任务不匹配这些值的标签 --skip-tags=copy_start
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 额外的变量设置为键=值或YAML / JSON
#cat update.yml
---
- hosts: {{ hosts }}
remote_user: {{ user }}
..............
#ansible-playbook update.yml --extra-vars "hosts=vipers user=admin" 传递{{hosts}}、{{user}}变量,hosts可以是 ip或组名
-l,--limit 对指定的 主机/组 执行任务 --limit=192.168.3.11,192.168.3.12 或 -l 192.168.3.11,192.168.3.12 只对这个2个ip执行任务
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

f8a0V3iFVhbW