ansible

1 ansible概述介绍

来自 https://www.cnblogs.com/keerya/p/7987886.html

1.0 ansible 是什么?

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远
程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。

1.1ansible 特点

部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
默认使用SSH协议对设备进行管理;
有大量常规运维操作模块,可实现日常绝大部分操作;
配置简单、功能强大、扩展性强;
支持API及自定义模块,可通过Python轻松扩展;
通过Playbooks来定制强大的配置、状态管理;
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台。

1.2ansible 架构图

ansible架构图

上图中我们看到的主要模块如下:

Ansible:Ansible核心程序。
HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等。
Playbooks:“剧本”YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能。
CoreModules:核心模块,主要操作是通过调用核心模块来完成管理任务。
CustomModules:自定义模块,完成核心模块无法完成的功能,支持多种语言。
ConnectionPlugins:连接插件,Ansible和Host通信使用

1.3ansible 任务执行模式

Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc和playbook:

ad-hoc模式(点对点模式)
  使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。
playbook模式(剧本模式)
  是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。

1.4ansible 执行流程

ansible架构图

简单理解就是Ansible在运行时, 首先读取ansible.cfg中的配置, 根据规则获取Inventory中的管理主机列表, 并行的在这些主机中执行配置的任务, 最后等待执行返回的结果。

1.5ansible 命令执行过程

加载自己的配置文件,默认/etc/ansible/ansible.cfg;
查找对应的主机配置文件,找到要执行的主机或者组;
加载自己对应的模块文件,如 command;
通过ansible将模块或命令生成对应的临时py文件(python脚本), 并将该文件传输至远程服务器;
对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件;
给文件 +x 执行权限;
执行并返回结果;
删除临时py文件,sleep 0退出;

来自 https://www.cnblogs.com/xuwymm/p/15157466.html

1.0 ansible概述

Ansible 是一个 IT 自动化的“配置管理”工具,自动化主要体现在 Ansible 集成了丰富模块,以及强大的功能组件,可以通过一个命令行完成一系列的操作。进而能减少我们重复性的工作,以提高工作的效率。
创始人,Michael DeHaan(Cobbler 与 Func 的作者)。
2015-10-17,Red Hat宣布收购。

1.1 ansible的功能

批量执行远程命令,可以对N多台主机同时进行命令的执行。
批量配置软件服务,可以进行自动化的方式配置和管理服务。
实现软件开发功能, jumpserver 底层使用 ansible 来实现的自动化管理。
编排高级的IT任务, Ansible 的 Playbook 是一门编程语言,可以用来描绘一套 IT 架构。

1.2 ansible的特性

容易学习:无代理,基于SSH实现,不像 saltstack既要学客户端与服务端,还需要学习客户端与服务端中间通讯协议;
操作灵活: Ansible 有较多的模块,提供了丰富的功能、 playbook 则提供类似于编程语言的复杂功能;
简单易用:体现在 Ansible 一个命令可以完成很多事情;
安全可靠:因为 Ansible 使用了 SSH 协议进行通讯,既稳定也安全;
移植性高:可以将写好的 playbook 拷贝至任意机器进行执行;
幂等性:一个任务执行1遍和执行n遍效果一样,不会因为重复执行带来意外情况;

1.3 ansible的架构
https://img2020.cnblogs.com/blog/2367894/202108/2367894-20210818163717051-274279688.png

ansible基本架构

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YAML文件;

INVENTORY:Ansible管理主机的清单/etc/anaible/hosts;

MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义;

PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用;

API:供第三方程序调用的应用程序编程接口;

Ansible主要操作对象:HOSTS主机,主机组和NETWORKING网络设备;

利用ansible实现管理的方式:

Ad-Hoc
即执行单条的ansible命令,主要用于临时命令使用场景;

Ansible-playbook
主要用于长期规划好的,大型项目的场景,需要有前提的规划;

执行过程:
将已有编排好的任务集写入Ansible-Playbook

通过ansible-playbook命令分拆任务集至逐条ansible命令,按预定规则逐条执行。

1.4 ansible注意事项

执行ansible的主机一般称为主控端,中控,master或堡垒机;
主控端Python版本需要2.6或以上;
被控端Python版本小于2.4需要安装python-simplejson;
被控端如开启SELinux需要安装libselinux-python;
windows不能做为主控端;
建议使用ssh的秘钥验证方式管理被控主机;

来自 https://www.jianshu.com/p/c82737b5485c

ansible是一种自动化运维工具,基于paramiko开发的,并且基于模块化工作,Ansible是一种集成IT系统的配置管理、应用部署、执行特定任务的开源平台,它是基于python语言,由Paramiko和PyYAML两个关键模块构建。集合了众多运维工具的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的.

1.1 ansible基本架构
ansible系统由控制主机和被管理主机组成,控制主机不支持windows平台

https://upload-images.jianshu.io/upload_images/6078939-1799907d732a3e87.png?imageMogr2/auto-orient/strip|imageView2/2/w/885/format/webp

ansible基本架构

核心: ansible
Core Modules: ansible自带的模块
Custom Modules: 核心模块功能不足时,用户可以添加扩展模块
Plugins: 通过插件来实现记录日志,发送邮件或其他功能
Playbooks: 剧本,YAML格式文件,多个任务定义在一个文件中,定义主机需要调用哪些模块来完成的功能
Connectior Plugins: ansible基于连接插件连接到各个主机上,默认是使用ssh
Host Inventory: 记录由Ansible管理的主机信息,包括端口、密码、ip等

1.2 ansible特点

部署简单, 只需要在控制主机上部署ansible环境,被控制端上只要求安装ssh和python 2.5以上版本,这个对于类unix系统来说相当与无需配置.

no angents: 被管控节点无需安装agent
no server: 无服务端,使用是直接调用命名
modules in any languages: 基于模块工作, 可以使用任意语言开发模块
易读的语法: 基于yaml语法编写playbook
基于推送模式: 不同于puppet的拉取模式,直接由调用者控制变更在服务器上发生的时间
模块是幂等性的:定义的任务已存在则不会做任何事情,意味着在同一台服务器上多次执行同一个playbook是安全的

1.3 ansible程序目录结构:

配置文件: /etc/ansible/
执行文件目录: /usr/bin/
lib依赖库: /usr/lib/python2.7/site-packages/ansible/
help文件: /usr/lib/python2.7/site-packages/ansible

2.ansible任务执行

2.1 ansible任务执行模式

Ansible任务执行模式分为以下两种:

ad-hoc模式(点对点模块)  使用单个模块,支持批量执行单条命令,相当与在bash中执行一句shell命令
playbook模式(剧本模式)  ansible主要的管理方式,通过多个task的集合完成一类功能,可以理解为多个ad-hoc的配置文件

2.2 ansible执行流程:

ansible执行流程

2 ansible使用安装

Ansible 是一种安装在控制节点上的无代理自动化工具。
Ansible 是一个无代理自动化工具,您可以安装在控制节点上。
Ansible 从控制节点远程管理机器和其他设备(默认情况下,通过 SSH 协议)。 
要安装 Ansible 以在命令行中使用,只需在一台机器上安装 Ansible 包(很容易就是一台笔记本电脑)。 您不需要安装数据库或运行任何守护程序。 Ansible 可以从一个控制节点管理一整套远程机器。 

控制节点需要 安装 python 和对应的 ansible 工具

被控制节点需要 python
尽管您的托管节点上不需要守护进程,但您确实需要一种 Ansible 与它们进行通信的方式。 对于大多数受管节点,Ansible 通过 SSH 建立连接并使用 SFTP 传输模块。 如果 SSH 有效但 SFTP 在您的某些受管节点上不可用,您可以在 ansible.cfg 中切换到 SCP。 对于任何可以运行 Python 的机器或设备,您还需要 Python 2(版本 2.6 或更高版本)或 Python 3(版本 3.5 或更高版本)。 

1 编译安装

ansible依赖于Python 2.6或更高的版本、paramiko、PyYAML及Jinja2。

1
2
3
4
5
6
7
8
# yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
# tar xf ansible-1.5.4.tar.gz
# cd ansible-1.5.4
# python setup.py build
# python setup.py install
# mkdir /etc/ansible
# cp -r examples/* /etc/ansible

2 Ubuntu上安装

1
2
3
4
5
6
7

$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository --yes --update ppa:ansible/ansible
$ sudo apt install ansible


Ubuntu上安装20.04上面安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

ansible@ansible:~$ sudo apt install ansible
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
ieee-data python3-argcomplete python3-crypto python3-dnspython python3-jmespath python3-kerberos python3-libcloud python3-lockfile python3-netaddr python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-selinux python3-winrm python3-xmltodict
Suggested packages:
cowsay sshpass python-lockfile-doc ipython3 python-netaddr-docs
The following NEW packages will be installed:
ansible ieee-data python3-argcomplete python3-crypto python3-dnspython python3-jmespath python3-kerberos python3-libcloud python3-lockfile python3-netaddr python3-ntlm-auth python3-requests-kerberos python3-requests-ntlm python3-selinux python3-winrm python3-xmltodict
0 upgraded, 16 newly installed, 0 to remove and 132 not upgraded.
Need to get 9,644 kB of archives.
After this operation, 90.2 MB of additional disk space will be used.
Do you want to continue? [Y/n]



ansible@ansible:~$ ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.8.10 (default, Sep 28 2021, 16:10:42) [GCC 9.3.0]

3 conda 环境下安装

1
2
3
4
5
6

bin/conda create --name ansible python=3.8 # 创建个 3.8的python虚拟环境

bin/conda install -n ansible -c conda-forge ansible # 安装 ansible 模块


4centos 上安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# yum install ansible
Installed:
ansible.noarch 0:2.9.23-1.el7

Dependency Installed:
PyYAML.x86_64 0:3.10-11.el7 libyaml.x86_64 0:0.1.4-11.el7_0 python-babel.noarch 0:0.9.6-8.el7
python-backports.x86_64 0:1.0-8.el7 python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7 python-cffi.x86_64 0:1.6.0-5.el7
python-enum34.noarch 0:1.0.4-1.el7 python-idna.noarch 0:2.4-1.el7 python-ipaddress.noarch 0:1.0.16-2.el7
python-jinja2.noarch 0:2.7.2-4.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7
python-ply.noarch 0:3.4-11.el7 python-pycparser.noarch 0:2.14-1.el7 python-setuptools.noarch 0:0.9.8-7.el7
python-six.noarch 0:1.9.0-2.el7 python2-cryptography.x86_64 0:1.7.2-2.el7 python2-httplib2.noarch 0:0.18.1-3.el7
python2-jmespath.noarch 0:0.9.4-2.el7 python2-pyasn1.noarch 0:0.1.9-7.el7

Complete!

5pip安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pip是安装python的工具。

# yum install python3 python3-devel python3-pip - y
# pip3 install --upgrade pip -i https://pypi.douban.com/simple/
# pip3 install ansible -i https://pypi.douban.com/simple/
# /usr/local/bin/ansible --version

查看ansible的安装信息,包括版本以及各种文件的路径
# ansible --version
ansible 2.9.23
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, Apr 2 2020, 13:16:51) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]


ansible安装后修改配置文件

ansible与我们其他的服务在这一点上有很大不同,这里的配置文件查找是从多个地方找的,顺序如下:

检查环境变量ANSIBLE_CONFIG指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible.cfg);
~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;
/etc/ansible.cfg检查etc目录的配置文件。
1
2
3
4
5
Ansible 的配置文件可以存放在任何位置,但配置文件有读取顺序,查找顺序如下:
最先查找 $ANSIBLE_CONFIG 变量;
其次查找当前项目目录下 $PWD/ansible.cfg;
然后查找用户家目录下的 $HOME/.ansible.cfg;
最后查找 /etc/ansible/ansible.cfg;

ansible 的配置文件为/etc/ansible/ansible.cfg,主配置文件,配置 ansible 工作特性.ansible 有许多参数,下面我们列出一些常见的参数:

1
2
3
4
5
6
7
8
inventory = /etc/ansible/hosts		#这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5 #并发连接数,默认为5
sudo_user = root #设置默认执行命令的用户
remote_port = 22 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60 #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log #指定一个存储ansible日志的文件(默认不记录日志)

ansible 的主配置文件存在 /etc/anible/ansible.cfg ,其中大部分的配置内容无需进行修改;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

[defaults]
#inventory = /etc/ansible/hosts
`主机清单配置文件`
#library = /usr/share/my_modules/
`库文件存放目录,存放模块`
#module_utils = /usr/share/my_module_utils/
`用到的utils工具存放目录`
#remote_tmp = $HOME/.ansible/tmp
`临时py命令文件存放在远程主机目录,先把ansible执行的指令,先生成py程序,然后放在本地的目录里,然后再用ssh协议,将生成的py程序复制到被管理的机器remote_tmp目录下,复制过去后,拿出来执行,执行完毕后会将该程序删除`
#local_tmp = $HOME/.ansible/tmp
`本机的临时命令执行目录`
#forks = 5 #
`默认并发数`
#poll_interval = 15
`每隔15秒去查看对方的状态`
#sudo_user = root
`默认sudo 用户 `
#ask_sudo_pass = True
#ask_pass = True
`每次执行ansible命令是否询问ssh密码`
#remote_port = 22
`客户端的ssh端口`
#host_key_checking = False
`检查对应服务器的host_key,建议取消注释,用于取消第一次连接问yes|no,若设置为true,则没有输入过yes|no的主机不能使用ansible管理。
#log_path=/var/log/ansible.log
`日志文件,建议取消注释,可以记录日志`

[privilege_escalation] #如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False

我的配置文件,我比较喜欢修改的几个选项,在自己的home目录下面配置个 .ansible.cfg 文件

1
2
3
4
5
6
7
8
9
[defaults]           
inventory = ./hosts #这样写就是 账号 home 目录下面
remote_tmp = /tmp/ansibletmpr
local_tmp = /tmp/ansibletmpl
remote_user = ansible # 这样要设置一下,不然ssh 连接被控节点 都是以 jenkins 账号去连接了
executable = /bin/bash
[ssh_connection]
control_path_dir = /tmp/ansibletmpl/cp
control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r

ansible主机清单inventory介绍

在配置文件中,我们提到了资源清单,这个清单就是我们的主机清单,里面保存的是一些 ansible 需要连接管理的主机列表。我们可以来看看他的定义方式:

1、 直接指明主机地址或主机名:

1
2
3
4
## green.example.com#
# blue.example.com#
# 192.168.100.1
# 192.168.100.10

2、 定义一个主机组[组名]把地址或主机名加进去

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[mysql_test]
192.168.253.159
192.168.253.160
192.168.253.153

可以将同一个主机同时归并到多个不同的组中,如192.168.169.129同时存在于[web]与[app]中:

[web]
192.168.169.128
192.168.169.129
[app]
192.168.169.130
192.168.169.129

支持主机名写法,并且支持通配符:
[web]
www[01:50].example.com <==支持通配符匹配www01 www02 ...www50

当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明:
[web]
www.example.com:2222

可以使用基于用户名密码的方式连接被控主机,可以在主机清单中定义被控主机的用户名密码:

1
2
3
[webservers] 
10.0.0.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
10.0.0.41 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(ansible) ansible@jenkins-master:~$ cat tools/ansible/inventory.conf
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers:

## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10

# Ex 2: A collection of hosts belonging to the 'webservers' group:

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110

# If you have multiple hosts following a pattern, you can specify
# them like this:

## www[001:006].example.com

# Ex 3: A collection of database servers in the 'dbservers' group:

## [dbservers]
##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57

# Here's another example of host ranges, this time there are no
# leading 0s:

## db-[99:101]-node.example.com

[bf]
192.168.xxxxxx.[31:45]
192.168.xxxxxx.[31:48]

[gb]
192.168.xxxxxx.[46:90]

[app]
192.168.xxxxxx.101
192.168.xxxxxx.98
192.168.xxxxxx.99

[bfdocker]
192.168.xxxxxx.[93:97]
[anbf]
192.168.xxxxxx.[98:100]

[rmsh]
192.168.xxxxxx.[111:142]
192.168.xxxxxx.[145:150]

[rmnj]
192.168.xxxxxx.[211:217]
[rmsz]
192.168.xxxxxx.[171:176]

[core]
192.168.xxxxxx.xxx




ansible 常用命令介绍

0.总览介绍

/usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault  Ansible 文件加密工具
/usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具
其中,我们比较常用的是/usr/bin/ansible和/usr/bin/ansible-playbook。

ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:
ansible-doc -l				#获取全部模块的信息
ansible-doc -s MOD_NAME		#获取指定模块的使用帮助

1.ansible 命令详解

ansible 命令详解  命令的具体格式如下:c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    ansible <host-pattern> [-f forks] [-m module_name] [-a args]

-a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K,--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS #后台运行超时时间
-C #模拟运行环境并进行预运行,可以进行查错测试
-c CONNECTION #连接类型使用
-f FORKS #并行任务数,默认为5
-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #查看有哪些主机组
-m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# ansible-doc
Usage: ansible-doc [options] [module...]

Options:
-h, --help show this help message and exit  # 显示命令参数API文档
-l, --list List available modules  #列出可用的模块
-M MODULE_PATH, --module-path=MODULE_PATH  #指定模块的路径
specify path(s) to module library (default=None)
-s, --snippet Show playbook snippet for specified module(s)  #显示playbook制定模块的用法
-v, --verbose verbose mode (-vvv for more, -vvvv to enable  # 显示ansible-doc的版本号查看模块列表:
connection debugging)
--version show program's version number and exit


查看shell模块的帮助信息:
ansible-doc shell


查看模块的简要说明,主要包括用法和选项:
ansible-doc -s shell

查看ansible共加载了多少模块:
ansible-doc -l | wc -l

ansible-playbook 功能:用于执行配置好的剧本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ansible-playbook <filename.yml> ... [options]

-C,--check 只检测可能会发生的改变,但不真正执行操作
--list-hosts 列出运行任务的主机
--limit 主机列表 只针对主机列表中的主机执行
-v 显示过程 -vv -vvv 更详细
--syntax-check 检查语法
-e 向playbook命令中传递变量
-i 指定inventory主机清单文件,默认为/etc/ansible/roles

#只检测
ansible-playbook file.yml --check

#执行剧本
ansible-playbook file.yml

#执行剧本,只针对hosts中的websrvs组
ansible-playbook file.yml --limit websrvss

ansible-galaxy 主要功能:管理从 https://galaxy.ansible.com 下载的各种roles

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

列出所有已安装的galaxy
ansible-galaxy list
# /root/.ansible/roles
- geerlingguy.apache, 3.1.4
# /usr/share/ansible/roles
# /etc/ansible/roles

安装galaxy
ansible-galaxy install geerlingguy.apache
- downloading role 'apache', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-apache/archive/3.1.4.tar.gz
- extracting geerlingguy.apache to /root/.ansible/roles/geerlingguy.apache
- geerlingguy.apache (3.1.4) was installed successfully


删除galaxy
ansible-galaxy remove geerlingguy.apache
- successfully removed geerlingguy.apache


ansible-console 2.0+新增,可交互执行命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
ansible-console

Welcome to the ansible console.
Type help or ? to list commands.

root@all (2)[f:5]# forks 5 <==设置并发数

root@all (2)[f:5]# cd NginxWebs <==切换主机组

root@NginxWebs (2)[f:5]# list <==列出主机组的成员
192.168.20.22
192.168.20.23

root@NginxWebs (2)[f:5]# shell df <==直接输入模块和服务名,不需要加-m和-a
192.168.20.23 | CHANGED | rc=0 >>
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 485896 0 485896 0% /dev
tmpfs 497840 0 497840 0% /dev/shm
tmpfs 497840 7864 489976 2% /run
tmpfs 497840 0 497840 0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 3284320 49118880 7% /
/dev/sda1 1038336 139940 898396 14% /boot
/dev/mapper/centos-home 154057220 119636 153937584 1% /data
tmpfs 99572 0 99572 0% /run/user/0
192.168.20.22 | CHANGED | rc=0 >>
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 485896 0 485896 0% /dev
tmpfs 497840 0 497840 0% /dev/shm
tmpfs 497840 7924 489916 2% /run
tmpfs 497840 0 497840 0% /sys/fs/cgroup
/dev/mapper/centos-root 52403200 3338584 49064616 7% /
/dev/sda1 1038336 139940 898396 14% /boot
/dev/mapper/centos-home 154057220 202628 153854592 1% /data
tmpfs 99572 0 99572 0% /run/user/0

root@NginxWebs (2)[f:5]# help <==列出所有的内置命令

Documented commands (type help <topic>):
========================================
EOF
a10
a10_server
a10_server_axapi3
a10_service_group
a10_virtual_server
accelerate
aci
......