Ansible命令
ansible命令语法
语法:ansible <host-pattern> [options]选项参数:使用ansible --help可以查看到命令参数这里只写一些常用的参数:--version #显示版本-m module #指定使用的模块,默认为command-v #查看执行的详细过程(-vv、-vvv更详细)--list-hosts #显示主机列表(可以简写为--list)-k,--ask-pass #提示输入ssh连接密码,默认使用key验证-K,--ask-become-pass #提示执行输入sudo的密码-C,--check #检查,并不执行-T,--timeout=TIMEOUT #执行命令的超时时间,默认10s-u,--user=REMOTE_USER #指定远程执行的执行用户-b,--become #代替旧版本的sudo切换-h,--help #显示使用帮助
ansible-doc
ansible-doc显示模块帮助,针对每个模块都有详细的用法说明,功能和Linux的man命令类似。
语法:ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
参数:
-a, --all #显示文档所有的模块(这个选项有个bug)
-h, --help #显示使用帮助
-j, --json #将所有的模块转储为JSON格式
-l, --list #查看模块列表
-F, --list_files #显示模块的名称和模块原路径
-M MODULE_PATH, --module-path=MODULE_PATH #
-s, --snippet #简介的显示模块的帮助信息
-t TYPE, --type=TYPE #指定模块类型(默认为module)
-v, --verbose #查看执行的详细过程(-vv、-vvvv更详细)
--version #查看版本
常用模块
常用模块使用的inventory列表如下
$ vim ./host/ocip
#前置
[qianzhi1]
10.21.17.195
#联机
[online1]
10.21.17.203
#管理
[houguan1]
10.21.17.206
[ocip:children]
qianzhi1
online1
houguan1
[all:vars]
ansible_ssh_user='app'
ansible_ssh_pass='12345'
ansible_su_pass='uiop7890'
ping模块
ping模块用来测试远程主机连通性
[root@VM_16_182_centos dep_test]# ansible all -m ping
10.21.17.203 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.21.17.206 | SUCCESS => {
"changed": false,
"ping": "pong"
}
10.21.17.195 | SUCCESS => {
"changed": false,
"ping": "pong"
}
command模块
command模块用来在远程主机上执行命令,并将结果返回本主机。为默认模块,可忽略-m选项
$ ansible qianzhi1 -m command -a 'ls /data'
10.21.17.195 | SUCCESS | rc=0 >>
agent
app
lost+found
$ ansible qianzhiq -m command -a 'echo P@ssw0rd | passwd --stdin app'
注意:
ansible对单引号和双引号敏感,推荐使用单引号
command模块不支持$VARNAME < > | ; &等。
shell模块
和command相似,调用shell模块执行命令
$ ansible qianzhiq -m shell -a 'echo P@ssw0rd | passwd --stdin app'
调用bash执行命令,但类似cat /tmp/stanley.md | awk -F ‘|’ ‘{print $1,$2}’ &> /dev/null这些复杂命令,即使使用shell也可能失败,解决办法是写到脚本中,调用script模块执行脚本
同时也支持一下参数:
- name: Execute commands in nodes.
action: shell
chdir # 切换目录相当于cd命令
creates # 如果creates后的文件已经存在,则后面的命令则忽略
executable # 更改用于执行命令的shell。应该是可执行文件的绝对路径。
free_form= # 要执行的linux指令
removes # 如果removes后的文件不存在,则后面的命令则忽略
# 示例
$ ansible qianzhi1 -m shell -a "chdir=/data ls"
10.21.17.195 | SUCCESS | rc=0 >>
agent
app
lost+found
script模块
在目标服务器上运行本地存在的脚本。
$ ansible qianzhi1 -m script -a f1.sh
copy模块
主要用于将管理主机上的数据信息传送给多台主机
# ansible-doc -s copy
- name: Copies files to remote locations.
action: copy
backup # 默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份)
content # 在文件中添加信息
dest # 将数据复制到远程节点的路径信息
group # 文件数据复制到远程主机,设置文件属组用户信息
mode # 文件数据复制到远程主机,设置数据的权限 eg 0644 0755
owner # 文件数据复制到远程主机,设置文件属主用户信息
remote_src # 如果设置为yes,表示将远程主机上的数据进行移动操作如果设置为no, 表示将管理主机上的数据进行分发操作
src # 指定将本地管理主机的什么数据信息进行远程复制
- 示例:
$ ansible qianzhi1 -m copy -a "src=./anaconda-ks.cfg dest=/data owner=www group=www mode=0644 backup=yes"
fetch模块
从目标机器获取文件至服务端,与copy相反
$ ansible-doc -s fetch
- name: Fetches a file from remote nodes
action: fetch
dest # 这里的dest为服务端目录,会在指定目录下生成目标主机的目录结构
flat
src # 指定目标主机需要copy的文件,注意只能为文件,不可为目录
validate_checksum # md5检查
- 示例:
$ ansible all -m fetch -a "src=/data/app/app/test.txt dest=/root/deploy_sprod/dep_test/logs/"
tree logs/
logs/
├── 10.21.17.195
│ ├── data
│ │ └── app
│ │ └── app
│ │ └── test.txt
│ └── var
│ └── log
├── 10.21.17.203
│ ├── data
│ │ └── app
│ │ └── app
│ │ └── test.txt
│ └── var
│ └── log
└── 10.21.17.206
├── data
│ └── app
│ └── app
│ └── test.txt
└── var
└── log
file模块
实现创建/删除文件信息 对数据权限进行修改
$ ansible-doc -s file
- name: Sets attributes of files
action: file
group # 文件数据复制到远程主机,设置文件属组用户信息
mode # 文件数据复制到远程主机,设置数据的权限 eg 0644 0755
owner # 文件数据复制到远程主机,设置文件属主用户信息
path # 将数据复制到远程节点的路径信息
src # 指定将本地管理主机的什么数据信息进行远程复制
state # 执行的动作
state包含以下动作:
- absent:将数据进行删除
- directory:创建一个空目录信息
- file:查看指定目录信息是否存在
- touch:创建一个空文件信息
- hard/link:创建链接文件
cron模块
定时任务模块
$ ansible-doc -s cron
- name: Manage cron.d and crontab entries.
action: cron
minute/hour/day/month/weekday # 和设置时间信息相关参数
job # 和设置定时任务相关参数
name # 设置定时任务名称
disabled #将指定定时任务进行注释
- 示例
$ ansible all -m cron -a 'minute=*/2 job="/usr/bin/wall test ansible cron" name=ansiblecron'
10.21.17.195 | SUCCESS => {
"changed": true,
"envs": [],
"jobs": [
"ansiblecron"
]
}
# 目标主机上会生成一条crontab
$ crontab -e
#Ansible: ansiblecron
*/2 * * * * /usr/bin/wall test ansible cron
# 禁用crontab
$ ansible all -m cron -a 'disabled=true job="/usr/bin/wall test ansible cron" name=ansiblecron'
yum模块
使用yum包管理器来安装管理目标主机软件包
ansible-doc -s yum
- name: Manages packages with the `yum' package manager
config_file # 指定yum的配置文件
disable_gpg_check # 关闭gpg检测
disablerepo # 禁用某个yum源
enablerepo # 启用某个yum源
list # 相当于yum list
state # 指定动作(present,latest、absent)
- 示例:使用yum安装httpd
$ ansible all -m yum -a "name=httpd state=installed"
$ ansible all -m yum -a "name=httpd state=absent"
service模块
用来管理目标主机的服务
$ ansible-doc -s service
- name: Manage services.
enabled # 设置开机启动,enabled和state至少有一个要定义
name # service名称
pattern # 如果服务没有响应,则ps查看是否具有指定参数的进程,有则认为服务已经启动
state # started,stopped,restarted,reloaded。service最终操作后的状态
- 示例:启动服务,并设置为开机启动
$ ansible all -m service -a "name=httpd state=started enabled=yes"
user模块
用于管理目标主机的用户
$ ansible-doc -s user
- name: Manage user accounts
name # 指定用户名称
shell # 指定用户默认shell
system # 当创建的用户state=present时,会设置为系统用户,现有用户无法更改词设置
home # 指定用户家目录
groups # 指定用户的属组
uid # 指定用户uid
remove # 删除用户
profile # 指定用户配置文件
passwd # 设置用户密码,此密码必须为加密字符串
force # 如果state=absent,设置此值相当于使用userdel --force
comment # 设置描述信息
- 示例:创建用户
$ ansible all -m user -a "name=app password=uiop7890 shell=/bin/bash home=/data/app/"
192.168.10.10 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 1000,
"home": "/data/app/",
"name": "app",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1000
}
group模块
用于管理目标主机组
ansible-doc -s group
- name: Add or remove groups
group:
gid: # 设置gid
name: # 必选,设置组名
state: # present or absent,设置动作
system: # 如果设置为yes,则创建为系统组
- 示例:创建组
ansible all -m group -a "name=app system=yes state=present"
192.168.10.10 | SUCCESS => {
"changed": false,
"gid": 1000,
"name": "app",
"state": "present",
"system": true
}
