ansible 常用模块

执行前设定

它的Config文件呢,默认在/etc/ansible/ansible.cfg

第一步,就是我们的ansible的机器,需要链接上被它控制的机器。因为ansible的ssh是默认有个检查key的设置,我们第一次使用它,肯定对面机器没有Public key啊,所以我们要关闭配置文件内的private key的检查:

host_key_checking = False

生成ssh-key

生成ssh-key这部分,就不再多说了。

创建你的hosts

设置控制的主机清单在/etc/ansible/hosts下

然后就是要把你想控制的机器的ip\域名等等按照ansible的格式写进去:

如:

[webservers]
foo.example.com
bar.example.com

什么意思呢?我把域名为foo.example.com和bar.example.com的2个机器,分给了webservers组。

除了域名也可以这样:

[dbservers]
192.168.10.12
127.152.112.13

如果某些主机的SSH运行在自定义的端口上,但是如果修改   ansible使用openssh进行ssh连接时将会使用:

192.168.1.1:3091

假如你想要为某些静态IP设置一些别名,可以这样做:

web1 ansible_ssh_port = 3333 ansible_ssh_host = 192.168.1.2

上面的 web1别名就指代了IP为192.168.1.2,ssh连接端口为3333的主机。

[webservers]

www[01:50].yanruogu.com

[databases]

db-[a:f].yanruogu.com

上面指定了从web1到web50,webservers组共计50台主机;databases组有db-a到db-f共6台主机。

这时候,有经验的运维人员,肯定纳闷,又没配好ssh,又没地方写密码用户,怎么连过去?

这里ansible是准备好了答案的(主机变量),它支持在ssh配好以前,使用用户名密码登录远程机器

[webservers]
192.168.10.12  ansible_ssh_pass=123456 ansible_ssh_user=root
127.152.112.13 ansible_ssh_pass=123567 ansible_ssh_user=root

这么一设置,能理解了吧?那么我们本次第一次运行ansible的准备工作也差不多了。

示例

[[email protected] .ssh]#vim /etc/ansible/hosts

[websrvs]
172.18.21.100
172.18.21.200
[dbsrvs]
172.18.21.100
172.18.21.7
[[email protected] .ssh]#ansible all --list-hosts
  hosts (3):
    172.18.21.100
    172.18.21.7
    172.18.21.200
[[email protected] .ssh]#ansible websrvs --list-hosts
  hosts (2):
    172.18.21.100
    172.18.21.200
[[email protected] .ssh]#ansible dbsrvs --list-hosts
  hosts (2):
    172.18.21.100
    172.18.21.7
这里执行了ansible的最简单的模块ping,让它对所有在Hosts里的机器进行ping.探测远程主机网络是否畅通
[[email protected] .ssh]#ansible all -m ping
172.18.21.7 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
172.18.21.200 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
172.18.21.100 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible的安装、初始化、第一个ping,我们也搞定了。

那么我们可以继续说下,Ansible的常用命令了,不过这个部分我们只需要知道下就行了。

重点是后面的playbook。

这里需要说明下的就是,ansible本身是没有部署能力的,它只是个框架,它的模块才有真正的部署能力。

Command 模块

在远程主机运行命令

常用参数:

chdir   运行command命令前先cd到这个目录

creates  如果这个参数对应的文件存在,就不运行command

executable   将shell切换为command执行,这里的所有命令需要使用绝对路径

removes  如果这个参数对应的文件不存在,就不运行command,存在运行

示例:

ansible-doc -s command   \\可以查看这个模块的帮助信息
ansible 172.18.21.100 -m command -a "pwd chdir=/tmp"   \\在172.18.21.10主机切换到/tmp目录执行pwd命令
ansible 172.18.21.100 -m command -a "mkdir mydir chdir=/app" \\在远程主机创建目录
ansible 172.18.21.100 -m command -a "mkdir mydir chdir=/app creates=mydir"  \\creates表示此文件或者目录如果存在就不执行
172.18.21.100 | SUCCESS | rc=0 >>
skipped, since mydir exists
ansible 172.18.21.100 -m command -a "touch f1 chdir=/app removes=f1"

172.18.21.100 | SUCCESS | rc=0 >>
skipped, since f1 does not exist

shell 模块

这个是一个很神奇的模块,它也是ansible的核心模块之一。它跟command模块一样负责在被ansible控制的节点(服务器)执行命令行。它与command模块有着相似的地方,也有不同的地方如在远程主机的shell进程下运行命令,支持shell特性,如管道等

常用参数

chdir   运行command命令前先cd到这个目录

creates  如果这个参数对应的文件存在,就不运行command

removes  如果这个参数对应的文件不存在,就不运行command,存在运行

案例1:

让所有节点运行somescript.sh并把log输出到somelog.txt。

ansible websrvs -m shell -a "/usr/bin/sh  somescript.sh >> somelog.txt"

案例2:

先进入somedir/ ,再在somedir/目录下让所有节点运行somescript.sh并把log输出到somelog.txt。

ansible websrvs -m shell -a "somescript.sh >> somelog.txt" chdir=somedir/

案例3:

体验shell和command的区别,先cd到某个需要编译的目录,执行condifgure然后,编译,然后安装。

ansible websrvs -m shell -a "./configure && make && make insatll" chdir=/xxx/yyy/

案例4:

ansible-doc -s shell
ansible websrvs -m command -a "useradd user1"  \\在远程的两个主机上创建一个用户
ansible websrvs -m shell -a "echo magedu|passwd --stdin user1"  \\创建一个密码
ansible websrvs -m shell -a "echo magedu|passwd --stdin user1 executable=/bin/tcsh" \\也可以指定其他的shell类型,这要这个shell类型可以解析里面的命令即可

user模块

用户管理

state={present|absent}   #present表示创建,absent表示删除。

force=yes          #强制删除用户。 一般情况下用户在已登录状态下是不能删除的。相当于userdel -f

remove=yes     #在删除用户的时候,同时删除家目录与mail spool。相当于userdel -r

system=yes   #创建的系统用户

uid                #指定uid

shell             #指定shell

password       #用来指定密码,要用已加密的密码。

示例

ansible websrvs -m user -a "name=tom groups=haproxy state=present uid=3000 shell=/usr/bin/sh"

\\!/usr/bin/sh用途就是指出本脚本是用的哪种shell写的,执行时系统应该用哪种shell来解释执行它

ansible websrvs -m user -a "name=tom groups=haproxy state=present uid=3000 shell=/usr/bin/sh  generate_ssh_key=true"   \\创建用户并生产公钥私钥对

ansible websrvs -m user -a "name=test01 state=absent remove=yes"  \\删除用户

group模块

组管理

gid        # Optional `GID' to set for the group.

name       # Name of the group to manage.

state     # Whether the group should be present or not on the remote host.

system   # If `yes', indicates that the group created is a system group.

跟user差不多

示例

ansible websrvs -C -m group -a "name=haproxy system=no state=present" \\先测试跑一遍看有没有错误
ansible websrvs -m group -a "name=haproxy system=no state=present" \\state为状态,指明是创建还是删除,创建用present,删除用absent,不是系统组

ansible websrvs -m group -a "name=haproxy system=no state=absent"   \\---删除组

copy模块

复制文件到远程主机

content          #代替src,可以直接设定指定文件的内容 。

src                    #要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。。

owner                 #属主。

group                 #属组。

mode                   #权限。

dest         #必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

backup       #覆盖文件之前,先备份。 yes/no

others       #所有的file模块里的选项都可以在这里使用

force        #如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

vim /app/test.txt
hello magedu
welcome
ansible all -m copy -a "src=/app/test.txt dest=/app/ owner=daemon group=nobody mode=664"
ansible all -m copy -a "content='hello true\n how are you\n' dest=/app/test2.txt"  \\也可以复制一个内容到一个文件中
fetch模块

从远程主机取文件
ansible 172.18.21.7 -m fetch -a "src=/etc/fstab dest=/app/fstab" \\注意这里只能有一台主机上去取
file模块

设置文件的属性、创建空文件和目录软连接等

file模块主要用于远程主机上的文件操作,file模块包含如下选项:

force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

group:定义文件/目录的属组

mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:要被链接的源文件的路径,只应用于state=link的情况

state:

directory:如果目录不存在,创建目录

file:即使文件不存在,也不会被创建,用于修改已存在文件的权限

link:创建软链接   src=源文件   path=链接文件

hard:创建硬链接

touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

absent:删除目录、文件或者取消链接文件

ansible all -m file -a "path=/app/hidir state=directory owner=nobody mode=700" \\在远程主机创建一个空目录,并指定权限
ansible all -m file -a "path=/app/ff state=touch owner=nobody mode=770" \\创建空文件并指定权限,注意这里要用touch
ansible all -m file -a "path=/app/ff state=file owner=daemon mode=770" \\file只能用于已经存在文件修改权限,如果文件不存在不会创建
ansible all -m file -a "path=/app/fff src=/app/ff state=link" \\创建一个软连接文件/app/fff指向源文件/app/ff
ansible all -m file -a "path=/app/fff state=absent"  \\删除文件
get_url模块

该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:

sha256sum:下载完成后进行sha256 check;

timeout:下载超时时间,默认10s

url:下载的URL必须有

url_password、url_username:主要用于需要用户名密码进行验证的情况

use_proxy:是事使用代理,代理需事先在环境变更中定义

dest  下载到目录必须有

ansible all -m get_url -a "url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440"

ansible all -m get_url -a  "url=http://example.com/path/file.conf dest=/etc/foo.conf sha256sum=b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c"

ansible all -m get_url -a "url=http://mirrors.sohu.com/centos/7/os/x86_64/RPM-GPG-KEY-CentOS-7 dest=/app"   \\下载网上的文件到多台主机
cron 模块

用于管理计划任务包含如下选项:

backup:对远程主机上的原任务计划内容修改之前做备份 backup=true

cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划

day:日(1-31,*,*/2,……)

hour:小时(0-23,*,*/2,……)

minute:分钟(0-59,*,*/2,……)

month:月(1-12,*,*/2,……)

weekday:周(0-7,*,……)

job:要执行的任务,依赖于state=present

name:该任务的描述

special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly

state:确认该任务计划是创建present(默认)还是删除 absent

user:以哪个用户的身份执行

例:


[[email protected] ~]# ansible wserver -m cron -a 'name=sync_time minute=*/5 job="/sbin/ntpdate 172.16.0.1 > /dev/null;/sbin/hwclock -w"'

连到一台主机看一下crontab。


[[email protected] ~]# crontab -l

#Ansible: sync_time                #这个就是我们刚添加的。

*/5 * * * * /sbin/ntpdate 172.16.0.1 > /dev/null;/sbin/hwclock -w

删除:


[[email protected] ~]# ansible wserver -m cron -a 'name=sync_time state=absent'

例: 添加每2天的2:30备份/etc目录到/var/backup下。


[[email protected] ~]# ansible wserver -m cron -a 'name=etc_tar minute=30 hour=2 day=*/2 job="/bin/tar -Jcf /var/backup/`/bin/date "+\\%Y\\%m\\%d-\\%H\\%M"`.tar.xz /etc"'

查看一下:


#Ansible: etc_tar

30 2 */2 * * /bin/tar -Jcf /var/backup/`/bin/date +\%Y\%m\%d-\%H\%M`.tar.xz /etc

yum模块

在远程主机安装软件包

使用yum包管理器来管理软件包,其选项有:

config_file:yum的配置文件

disable_gpg_check:关闭gpg_check

disablerepo   #临时禁止使用yum库。 只用于安装或更新时。

enablerepo    #临时使用的yum库。只用于安装或更新时。

name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径

state:状态(present,absent,latest)

例:安装httpd。

这里只是说明一下conf_file的用法,yum的仓库文件没有在/etc/yum.repos.d/目录下的话。


[[email protected] ~]# ansible wserver -m yum -a 'name=httpd state=present conf_file="/root/local.repo"'

如果库本来是禁止使用的,就要用enablerepo来临时使用这个库。

这里的yum库文件已经在/etc/yum.repos.d/目录下了,不需要conf_file指定配置文件了。


[[email protected] html]# ansible wserver -m yum -a 'name=httpd state=present enablerepo=local'

安装包组

ansible test -m yum -a 'name="@Development tools" state=present' \安装包组,只要在名称前面加上@

url路径安装

ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'

service模块

服务程序管理

arguments            #命令行提供额外的参数

enabled                 #设置开机启动。

name=                  #服务名称

runlevel                #开机启动的级别,一般不用指定。

sleep                     #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。

state                      #started启动服务, stopped停止服务, restarted重启服务,reloaded重载配置。

启动httpd服务:


[[email protected] html]# ansible all -m service -a 'name=httpd state=started'

设置开机启动:


[[email protected] ~]# ansible all -m service -a 'name=httpd enabled=yes'

重启服务:


[[email protected] ~]# ansible all -m service -a 'name=httpd sleep=2 state=restarted'

unarchive模块

用于解压文件,模块包含如下选项:

  • copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
  • creates:指定一个文件名,当该文件存在时,则解压指令不执行
  • dest:远程主机上的一个路径,即文件解压的路径
  • grop:解压后的目录或文件的属组
  • list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
  • mode:解决后文件的权限
  • src:如果copy为yes,则需要指定压缩文件的源路径
  • owner:解压后文件或目录的属主

示例如下:

- unarchive: src=foo.tgz dest=/var/lib/foo   \复制到远程主机,在解压

- unarchive: src=/tmp/foo.zip dest=/usr/local/bin copy=no
- unarchive: src=https://example.com/example.zip dest=/usr/local/bin copy=no

filesystem模块

在块设备上创建文件系统

选项:

dev:目标块设备

force:在一个已有文件系统 的设备上强制创建

fstype:文件系统的类型

opts:传递给mkfs命令的选项

示例:

ansible test -m filesystem -a 'fstype=ext2 dev=/dev/sdb1 force=yes'

ansible test -m filesystem -a 'fstype=ext4 dev=/dev/sdb1 opts="-cc"'

mount模块

配置挂载点

选项:

dump

fstype:必选项,挂载文件的类型

name:必选项,挂载点

opts:传递给mount命令的参数
src:必选项,要挂载的文件 
state:必选项 
     present:只处理fstab中的配置 
     absent:删除挂载点 
     mounted:自动创建挂载点并挂载之 
     umounted:卸载

示例1:

ansible test -m mount -a "name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present"

ansible test -m mount -a "name=/srv/disk src='LABEL=SOME_LABEL' state=present"

ansible test -m mount -a "name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present'"

示例2:

创建disk.img磁盘镜像文件

ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'

使用 losetup将磁盘镜像文件虚拟成快设备

ansible test -a 'losetup /dev/loop0 /disk.img'

给块设备创建文件系统

ansible test -m filesystem -a 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'

挂载

ansible test -m mount -a  'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'

经过上面的四步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件disk.img。

ansible webs -m mount -a  'name=/mnt state=absent'  \\删除挂载点

script模块

发送脚本到各被管理节点,并执行。同样不需要参数。


[[email protected] ~]# ansible all -m script -a 'test.sh'

直接在-a 后面指定脚本即可。

selinux模块

管理selinux选项

conf     #指定应用selinux的配置文件。

state=enforcing|permissive|disabled           #对应于selinux配置文件的SELINUX。

policy=targeted|minimum|mls        #对应于selinux配置文件的SELINUXTYPE

关闭selinux:


[[email protected] ~]# ansible all -m selinux -a 'state=disabled'

在selinux处于enforceing状态下的时候好像只能用permissive。

在state非disabled的情况下必须要指定policy。

pip模块:在远程主机安装python库
常用参数name,state,version
npm模块:在远程主机安装node.js库
常用参数name,state,version

git模块:Deploy software (or files) from git checkouts

在websrvs每个节点上yum install git
访问此https://github.com/
搜索fastdfs

[[email protected] app]#ansible websrvs -m git -a "repo=https://github.com/happyfish100/fastdfs.git dest=/app/fastdfs"  \\可以在github上下载软件或者文件到远程多台主机

setup模块

setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。

这些信息是由特定格式的键和值组成的,键可以做为ansible的系统内建变量,可以调用这些变量使用,以后想使用哪些变量,可以用这种方式查找变量,相当于查字典的方式,如果要调用变量里面嵌套的变量可以使用外面的变量名[嵌套的变量]的方式实现.

setup模块下经常使用的一个参数是filter参数

具体使用示例如下:

[[email protected] ~]# ansible db -m setup

db | SUCCESS => {

"ansible_facts": {

"ansible_all_ipv4_addresses": [

"192.168.33.137",

"172.17.42.1"

],

….

….

使用filter过滤等等,支持通配符

获取ip

[[email protected] ~]# ansible db -m setup -a 'filter=ansible_default_ipv4'

获取主机名。。

[[email protected] ~]# ansible db -m setup -a 'filter=ansible_nodename'

获取内存信息。

[[email protected] ~]# ansible db -m setup -a 'filter=ansible_memory_mb'

可以使用grep过滤

[[email protected] ~]$ ansible 172.18.251.90 -m setup |grep mem

"ansible_memfree_mb": 1240,

"ansible_memory_mb": {

"ansible_memtotal_mb": 1823,

deploy_helper模块:Manages some of the steps common in deploying projects.
常用参数: backend、 host、 state、 weight
可以标记多台后端主机的状态,实现灰度发布

template模块:基于模板方式生成一个文件复制到远程主机
主要参数:*src,*dest,owner,group,mode
注意此模块只能在playbook中使用,而不能在命令行中使用,因为只有ansible-playbook才能收内建变量,基于内建变量才能生成
模板文件

时间: 2024-10-09 23:13:15

ansible 常用模块的相关文章

ansible常用模块详解

ansible常用模块详解: ansible <host-pattern> [-m module_name] [-a args] [options] #ansible命令格式  指定主机组或ip地址  指定调用模块   传递给模块的参数   ansible-doc -l #列出可用模块 ansible-doc -s model_name #查看指定模块详细用法 command:ansible默认模块,对指定主机执行命令,不能理解特殊字符 例:ansible web -a 'date' #对we

Ansible 常用模块详解(3)

title: Ansible 常用模块详解(3) date: 2018-12-01 15:22:11 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是an

二:Ansible常用模块

二:Ansible常用模块 一:Ansible命令模块 1.1 command # 默认模块, 执行命令 [[email protected] ~]# ansible web_group -a "hostname" 1.2 shell # 如果需要一些管道操作,则使用shell [[email protected] ~]# ansible web_group -m shell -a "ps -ef|grep nginx" -f 50 注意:command不识别管道符

2. ansible常用模块

Ansible通过模块的方式来完成一些远程的管理工作. ansible-doc -l查看所有模块 ansible-doc -s module来查看某个模块的参数, ansible-doc help module来查看该模块更详细的信息. 模块命令 -i 设备列表路径,可以指定一些动态路径 -f 并发任务数 -private-key 私钥路径 -m 模块名称 -M 模块夹的路径 -a 参数 -k 登陆密码 -K sudo密码 -t 输出结果保存路径 -B 后台运行超时时间 -P 调查后台程序时间

ansible常用模块介绍

ansible查看模块用法 例子 查看shell 模块使用方法 [[email protected] opt]# ansible-doc -s shell 注: -i 指定配置文件  tomcatserver自己定义的工作组  -m 指定模块 file模块 file模块包含如下选项: force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下:另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no group:定义文件/目录的属组 mo

Ansible常用模块介绍及使用

ansible常用命令解析: 查看当前 ansible 都支持哪些模块: ansible-doc -l 查看某一模块可以使用的参数:ansible-doc -s copy (eg:copy模块) ansible用法: ansible 主机名 -m 模块名 -a 模块参数 -m:模块的名字,如果执行单一的命令不用加-m,默认走command -a: 模块参数,如果模块是command,-a 后面跟的就是命令参数 -i : 指定hosts文件位置      默认:/etc/ansible/hosts

Ansible常用模块及API

Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm 安装Ansible: yum install ansible -y 配置文件: 路径:/etc/ansible/hosts配置说明:webservers为组名,下面的ip或域名则是属于该组的主机. [webservers] 192.168.1.111

ansible使用一(ansible的安装及ansible常用模块的使用)

1.ansible概述        Ansible是一款基于Python开发的自动化运维工具,它不需要安装客户端,使用SSH进行通信,同时可支持系统账号认证或秘钥认证,也支持windows客户端. Ansible主要组成部分: (1)ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件: (2)INVENTORY:Ansible管理主机的清单: (3)MODULES:Ansible执行命令的

Ansible常用模块基本操作

Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提供很多常用的模块,这样让大家也很容易使用起来.Ansible也是一样的,所以这些常用的模块,就好比基本功,基本招式一样,我们需要掌握这些基本功,掌握这些基本招式.这篇文章,就对这些常用的模块进行一个比较全面的总结. ping模块 ping是测试远程节点的SSH连接是否就绪的常用模块,但是它并不像Li

Ansible常用模块实例

ansible主要文件 (/etc/ansible/ansible.cfg) #ansible主配置文件. (/etc/ansible/hosts) #主机清单,保存管理的主机信息. (/etc/ansible/roles) #公共角色,主要在自动化部署多台主机时应用. ansible命令集 ansible 定义并运行简单任务. ansible-config #查看.编辑.管理ansible配置. ansible-doc #文档查看工具. ansible-galaxy #共享和下载roles的工