ansible参数详解
一 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"
```

#### 1.4 removes 例子
```yaml
ansible test -m command -a "rm -f /tmp/lol.txt removes=/tmp/lol.txt"
```

### 2 shell
shell备注:可以使用"<",">","|",";","&"等符号特殊符号
其他命令基本跟command一致 核心点:脚本就是命令集合
#### 2.1 shell远程执行命令
```yaml
ansible test -m shell -a "ps -ef |grep /[s]sh"
```

#### 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"
```


### 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"
```

#### 1.5 content
给anaconda-ks.cfg 文件插入覆盖内容为test
```yaml
ansible test -m copy -a "content=test dest=/data/anaconda-ks.cfg "
```

### 2 fetch
抓取文件到管理机上
|参数 选项/默认值 |释义|
| ------------ | ------------ |
|src(required)| 要获取的远程系统上的文件,必须是文件,而不是目录|
|dest |用于保存文件的目录|
```yaml
ansible test -m fetch -a "src=/root/lol.txt dest=/data"
```

### 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"
```

#### 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"
```

六 挂载模块
[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' "
```

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

### 示例2:删除定时任务
```yaml
ansible test -m cron -a "name='ntpdate time' state=absent"
```

### 示例3:注释定时任务
注意:注释和取消注释时必须填写 job和时间 参数
```yaml
ansible test -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
```

### 示例4:取消注释定时任务
```yaml
ansible test -m cron -a "name='ntpdate time' minute=*/5 job='/usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"
```

八 用户模块
[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"
```

#### 示例2: 删除一个指定的用户组dkaiyun gid=1055
```yaml
ansible test -m group -a "name=test1 gid=1055 state=absent"
```

### 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"
```
- 感谢你赐予我前进的力量