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

目录

一、实验前准备

二、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写的)等,它们区别是:

我们一般推荐使用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协议

由上面的图可以看到 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 标准先行

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

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

 

2.3.2 为什么要做标准化

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

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

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

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

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

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

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

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

1.基础实施层面

2. 应用层面

 

 三、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 ~

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组件,前面aeriscloudgalaxy上创建该模块的用户名,后面对应的是其模块。在实际应用中也可以指定txtyml 文件进行多个组件的下载安装。这部分可以参看官方文档

4. ansible-lint

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

5. ansible-playbook(重要)

该指令是使用最多的指令,其通过读取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执行任务

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值