一 ansible参数

#### 参数详细信息

#### 1、ansible输出结果颜色含义:

1. 绿色: 命令执行成功 没有对远程主机做任何修改

2. 黄色: 命令执行成功 大部分情况表示对远程主机做了改动

3. 红色: 命令执行失败

4. 粉色: 建议进行操作的方法

5. 蓝色: 显示命令或剧本执行的过程

|参数|全称|翻译|

|:---- |:------- |:--- |

|-u |username |指定ssh连接的用户名,即执行后面命令的用户 |

| -i| inventory_file|指定所使用的inventory文件的位置,默认为/etc/ansible/hosts|

|-m|module |指定使用的模块,默认为command,常见模块有command、shell、script、yum、copy等等|

|-f|10 |指定并发数,并发量大的时候,提高该值|

|--sudo [-k] | |当需要root权限执行的化,-k参数用来输入root密码。|

|-a||指定模块的参数,可以是命令等等。|

#### 备注:无

二 命令模块

[TOC]

- command

- shell

### 1 command

命令模块 适合使用简单的命令 无法支持"<",">","|",";","&"等符号

| 参数 | 翻译 |

| ------------ | ------------ |

| chdir | 在执行命令前,进入到指定目录中 |

| creates |判断指定文件是否存在,如果存在,不执行后面的操作 |

| removes | 判断指定文件是否存在,如果存在,执行后面的操作|

|free_form|必须要输入一个合理命令|

#### 1.1 查看hostname例子

```yaml

[root@192 ~]# ansible test -m command -a "hostname"

192.168.0.181 | CHANGED | rc=0 >>

node2

```

#### 1.2 chdir 例子

```yaml

[root@192 ~]# ansible test -m command -a "chdir=/tmp ls -l"

192.168.0.181 | CHANGED | rc=0 >>

总用量 4

-rw-r--r--. 1 root root 10 5月 22 15:13 1

drwx------. 2 root root 41 5月 25 09:28

```

#### 1.3 creates 例子

```yaml

ansible test -m command -a "touch /tmp/lol.txt creates=/tmp/lol1.txt"

```

![](/uploads/ansible/images/m_fa0c173dc297f8f464ef56cf12aebe6e_r.png)

#### 1.4 removes 例子

```yaml

ansible test -m command -a "rm -f /tmp/lol.txt removes=/tmp/lol.txt"

```

![](/uploads/ansible/images/m_135d277c4dfc4ac4c497747e853779a9_r.png)

### 2 shell

shell备注:可以使用"<",">","|",";","&"等符号特殊符号

其他命令基本跟command一致 核心点:脚本就是命令集合

#### 2.1 shell远程执行命令

```yaml

ansible test -m shell -a "ps -ef |grep /[s]sh"

```

![](/uploads/ansible/images/m_bd99f0a46d2dfe29ba60fd37f8079e75_r.png)

#### 2.2 批量执行该shell脚本

```yaml

ansible test -m shell -a "/tmp/df.sh"|more

```

##### 执行效果如下:

```yaml

[root@weifengansible]# ansible compass -m shell -a "/tmp/df.sh"|more

192.168.0.185 | SUCCESS | rc=0 >>

64%

192.168.0.191 | SUCCESS | rc=0 >>

59%

192.168.0.188 | SUCCESS | rc=0 >>

38%

192.168.0.190 | SUCCESS | rc=0 >>

54%

三 文件模块

[TOC]

copy

fetch

file

### 1 copy

| 参数 | 翻译 |

| ------------ | ------------ |

|src |指定将本地管理主机的什么数据信息进行远程复制|

|backup |no* yes 默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份)|

|content |在文件中添加信息|

|dest(required) |将数据复制到远程节点的路径信息|

|group |文件数据复制到远程主机,设置文件属组用户信息|

|mode| 文件数据复制到远程主机,设置数据的权限 eg 0644 0755|

|owner | 文件数据复制到远程主机,设置文件属主用户信息|

|remote_src no* yes |如果设置为yes,表示将远程主机上的数据进行移动操作如果设置为no, 表示将管理主机上的数据进行分发操作|

备注 (required)为必须使用的参数

- *为默认参数

- copy模块在复制数据时,如果数据为软链接文件,会将链接指定源文件进行复制

- 修改权限时候 需要加0 例如:chmod 0644 0755备注 (required)为必须使用的参数

- *为默认参数

- copy模块在复制数据时,如果数据为软链接文件,会将链接指定源文件进行复制

- 修改权限时候 需要加0 例如:chmod 0644 0755

### 1.2 copy 拷贝本地到对方目录

```yaml

ansible test -m copy -a "src=./anaconda-ks.cfg dest=/data"

```

![](/uploads/ansible/images/m_1992c994640fdac358684c0fed2e4df2_r.png)

![](/uploads/ansible/images/m_845090d674be598ac26822e7af21ce3f_r.png)

### 1.3 backup

```yaml

ansible test -m copy -a "src=./anaconda-ks.cfg dest=/data owner=test group=test mode=600"

```

#### 1.4 owner group mode

用户 组 文件权限

```yaml

ansible test -m copy -a "src=./anaconda-ks.cfg backup=yes dest=/data owner=test group=test mode=600"

```

![](/uploads/ansible/images/m_2b3a2aacaf6679f197bdad6711e22464_r.png)

#### 1.5 content

给anaconda-ks.cfg 文件插入覆盖内容为test

```yaml

ansible test -m copy -a "content=test dest=/data/anaconda-ks.cfg "

```

![](/uploads/ansible/images/m_b5f992c38b477eea8ba06c28f65efac9_r.png)

### 2 fetch

抓取文件到管理机上

|参数 选项/默认值 |释义|

| ------------ | ------------ |

|src(required)| 要获取的远程系统上的文件,必须是文件,而不是目录|

|dest |用于保存文件的目录|

```yaml

ansible test -m fetch -a "src=/root/lol.txt dest=/data"

```

![](/uploads/ansible/images/m_cfc40b2eae3194e4414e6cd900adae4d_r.png)

### 3 file

实现创建/删除文件信息 对数据权限进行修改

感觉不如用command “chmod chown”

|参数 |选项/默认值 |释义|

| ------------ | ------------ |------------ |

|dest/path/name(required)| | 将数据复制到远程节点的路径信息|

|group | |文件数据复制到远程主机,设置文件属组用户信息|

|mode | |文件数据复制到远程主机,设置数据的权限 eg 0644 0755|

|owner | |文件数据复制到远程主机,设置文件属主用户信息|

|src | |指定将本地管理主机的什么数据信息进行远程复制|

|state |absent |将数据进行删除|

|= |directory |创建一个空目录信息|

|= |file |查看指定目录信息是否存在|

|= |touch |创建一个空文件信息|

|= |hard/link |创建链接文件|

#### 3.1 删除文件

```yaml

ansible test -m file -a "path=/data/anaconda-ks.cfg state=absent"

```

![](/uploads/ansible/images/m_eada95b541d0d28b7e8a1010e07f3073_r.png)

#### 3.2 创建 修改文件权限

ansible test -m file -a "path=/data/anaconda-ks.cfg state=touch mode=0644"

四 安装模块

[TOC]

### 1 yum

使用yum软件包管理器安装,升级,降级,删除和列出软件包和组。

| 参数 | 翻译 |

| 参数 | 选项/默认值| 释义|

| ------------ | ------------ | ------------ |

| name(required) | | 指定软件名称信息|

| state| absent/removed| 将软件进行卸载(慎用)|

| = | present/installed | 将软件进行安装|

| latest | 安装最新的软件 yum update|

#### 例子

```yaml

ansible test -m yum -a "name=httpd-tools state=installed"

五 服务模块

[TOC]

用于管理服务运行状态

| 参数| 选项/默认值 |释义|

| ------------ | ------------ | ------------ |

| enabled | no yes |设置服务是否开机自启动 如果参数不指定,原有服务开机自启动状态进行保留|

| name (required)| |设置要启动/停止服务名称|

| state= | reloaded| 平滑重启|

| =| restarted| 重启|

| = | started| 启动|

| = | stopped| 停止|

### 1 实例

启动定时任务服务

```yaml

ansible test -m service -a "name=crond state=started enabled=yes"

```

![](/uploads/ansible/images/m_4922090cabb521a9c9000681a5d89cd0_r.png)

六 挂载模块

[TOC]

mount

### 概要

用于批量管理主机进行挂载卸载操作

|参数|选项/默认值|释义|

| ------------ | ------------ | ------------ |

|fstype | |指定挂载的文件系统类型|

|opts| |指定挂载的参数信息|

|path| |定义一个挂载点信息|

|src | |定义设备文件信息|

|state| absent| 会进行卸载,也会修改fstab文件信息|

|= |unmounted| 会进行卸载,不会修改fstab文件|

|= |present |不会挂载,只会修改fstab文件|

|= |mounted |会进行挂载,会修改fstab文件|

```yaml

在进行挂载的时候,使用state=mounted

在进行卸载的时候,使用state=absent

```

### 实例1

```yaml

ansible test -m mount -a "src=192.168.0.39:/data/ path=/mnt fstype=nfs state=present"

```

以上信息只是在/etc/fstab文件中添加了配置信息,不会真正进行挂载(mount -a)

### 实例2

```yaml

ansible test -m mount -a "src=192.168.0.39:/data/ path=/mnt fstype=nfs state=mounted"

```

以上信息是在/etc/fstab文件中添加了配置信息,并且也会真正进行挂载

七 定时任务

[TOC]

cron

### 概要

定时任务模块

|参数|选项/默认值|释义|

| ------------ | ------------ | ------------ |

|minute/hour/day/month/weekday| |和设置时间信息相关参数|

|job| |和设置定时任务相关参数|

|name(required)| |设置定时任务注释信息|

|state |absent| 删除指定定时任务|

|disabled| yes| 将指定定时任务进行注释|

|= |no |取消注释|

备注:时间参数不写时,默认为 *

### 示例1:每五分钟同步一次时间

```yaml

ansible test -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' "

```

![](/uploads/ansible/images/m_ced01034223db1be25b7b26286124cb8_r.png)

```yaml

ansible test -m command -a "crontab -l"

```

![](/uploads/ansible/images/m_98630121c9c91b145a7eca80b7d4797d_r.png)

### 示例2:删除定时任务

```yaml

ansible test -m cron -a "name='ntpdate time' state=absent"

```

![](/uploads/ansible/images/m_97f48054684509bbbf82f409695757b1_r.png)

### 示例3:注释定时任务

注意:注释和取消注释时必须填写 job和时间 参数

```yaml

ansible test -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"

```

![](/uploads/ansible/images/m_cb60ac6c55ffdf07734b3c986e04ef95_r.png)![](/uploads/ansible/images/m_c9b1044e54437dc6c2630e079b250204_r.png)

### 示例4:取消注释定时任务

```yaml

ansible test -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"

```

![](/uploads/ansible/images/m_6719c606dee398b796a32769cff6b573_r.png)

八 用户模块

[TOC]

group

user

### 概要

### 1 group

远程批量创建用户组信息

|参数|选项/默认值|释义|

| ------------ | ------------ | ------------ |

| gid | | 指创建的组ID信息|

| name | 指创建组名称信息|

| state| absent | 删除指定的用户组|

| =| present | 创建指定的用户组|

#### 示例1: 创建一个指定的用户组test1 gid=1055

```yaml

ansible test -m group -a "name=test1 gid=1055"

```

![](/uploads/ansible/images/m_4522db316de94cdc348dfa228eaad007_r.png)

#### 示例2: 删除一个指定的用户组dkaiyun gid=1055

```yaml

ansible test -m group -a "name=test1 gid=1055 state=absent"

```

![](/uploads/ansible/images/m_b35c72dbadd1873a52cd40e3d93926a3_r.png)

### 2 user

远程批量创建用户信息

|参数|选项/默认值|释义|

| ------------ | ------------ | ------------ |

| password| | 请输入密码信息|

| name| | 指定用户名信息|

| uid| | 指定用户uid信息|

| group| | 指定用户主要属于哪个组|

| groups| | 指定用户属于哪个附加组信息|

| shell| | /bin/bash或/sbin/nologin 指定是否能够登录|

| create_home | yes/no| 是否创建家目录信息|

| home| | 指定家目录创建在什么路径 默认/home|

#### 示例1: 创建名为 ding 的用户,如果用户已经存在,则不进行任何操作

```yaml

ansible test -m user -a 'name=ding'

```

#### 示例2: 删除名为 ding 的用户,但是不会删除 ding 用户的家目录。

```yaml

ansible test -m user -a 'name=ding state=absent'

```

#### 示例3: 删除名为 ding 的用户,同时会删除 家目录等信息。如果已经不存在不做任何操作。

```yaml

ansible test -m user -a 'name=ding state=absent remove=yes'

九 收集模块

[TOC]

setup

### 概要

setup收集模块

ansible all -m setup 查询出所有的信息

### 1 setup过滤:

```yaml

ansible test -m setup -a "filter=参数"

```

|参数|释义|

| ------------ | ------------ |

|ansible_all_ipv4_addresses| # ipv4的所有地址|

|ansible_all_ipv6_addresses| # ipv6的所有地址|

|ansible_date_time| # 获取到控制节点时间|

|ansible_default_ipv4| # 默认的ipv4地址|

|ansible_distribution| # 系统

|ansible_distribution_major_version |# 系统的大版本

|ansible_distribution_version |# 系统的版本号

|ansible_domain |#系统所在的域|

|ansible_env |#系统的环境变量|

|ansible_hostname |#系统的主机名|

|ansible_fqdn| #系统的全名|

|ansible_machine |#系统的架构|

|ansible_memory_mb |#系统的内存信息|

|ansible_os_family |# 系统的家族|

|ansible_pkg_mgr |# 系统的包管理工具|

|ansible_processor_cores| #系统的cpu的核数(每颗)|

|ansible_processor_count| #系统cpu的颗数|

|ansible_processor_vcpus |#系统cpu的总个数=cpu的颗数*CPU的核数|

|ansible_python |# 系统上的python|

|ansible cache -m setup -a 'filter=*processor*' |# 用来搜索|

### 2 条件判断

```yaml

- hosts: db

remote_user: root

tasks:

- name: createfile

copy: content="test" dest=/tmp/a.txt

when: a=="3"

- name: cratefile

copy: content="test2222" dest=/tmp/a.txt

when: a=="4"

```