Command#
在远程主机执行命令,默认模块,可忽略-m选项
1
2
3
4
5
|
[root@ansible ~]# ansible redis -m command -a 'cat /etc/centos-release'
redis-s1 | CHANGED | rc=0 >>
CentOS Linux release 7.9.2009 (Core)
[root@ansible ~]# ansible redis -m command -a 'chdir=/etc cat centos-release' # 等价
|
chdir: 进入到被管理主机目录
creates: 如果文件本身存在,就不执行command 了。如果文件存在就执行 command。
Shell#
Command 有局限性,很多命令不支持
这些复杂命令,即使使用shell也可能会失败
解决办法:写到脚本时,copy到远程执行,再把需要的结果拉回执行命令的机器
Script#
在远程主机上运行 ansible 服务器的脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@ansible ~]# ansible-doc -s script
- name: Runs a local script on a remote node after transferring it
script:
chdir: # Change into this directory on the remote node before running the
script.
cmd: # Path to the local script to run followed by optional arguments.
creates: # A filename on the remote node, when it already exists, this step
will *not* be run.
decrypt: # This option controls the autodecryption of source files using
vault.
executable: # Name or path of a executable to invoke the script with.
free_form: # Path to the local script file followed by optional arguments.
removes: # A filename on the remote node, when it does not exist, this step
will *not* be run.
|
在主控机上写个脚本,然后执行:
Copy#
功能:从 ansible 服务器主控端复制文件到远程机器
1
2
3
4
5
|
src : 源文件 指定拷贝文件的本地路径 (如果有/ 则拷贝目录内容,比拷贝目录本身)
dest: 指定目标路径
mode: 设置权限
backup: 备份源文件
content: 代替src 指定本机文件内容,生成目标主机文件
|
1
2
3
4
5
6
|
# 如目标存在,默认覆盖,此处指定先备份
ansible redis -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=zhou mode=600 backup=yes"
# 指定内容,直接生成目标文件
ansble redis -m copy -a "content='test content\n' dest=/tmp/test.txt"
# 复制/etc/下的文件,不包括/etc/目录本身
ansible srv -m copy -a "src=/etc/ dest=/backup"
|
Fetch#
从远程主机提取文件至主控端,copy相反,目前不支持目录,可以先打包,再提取文件
File#
功能:设置文件属性
1
2
3
4
5
6
7
|
path: 要管理的文件路径 (强制添加)
recurse: 递归,文件夹要用递归
src: 创建硬链接,软链接时,指定源目标,配合'state=link' 'state=hard' 设置软链接,硬链接
state: 状态
absent 缺席,删除
touhc 创建文件
...
|
1
2
3
4
5
|
> ansible websrvs -m file -a 'path=/app/test.txt state=touch' 创建文件
> ansible websrvs -m file -a 'path=/app/test.txt state=absent' 创建文件
> ansible websrvs -m file -a "path=/data/testdir state=directory" 创建目录, 递归方式
> ansible websrvs -m file -a "path=/root/test.sh owner=wang mode=755" 设置权限755和所有者
> ansible websrvs -m file -a 'src=/data/testfile dest=/data/testfile-link state=link' 创建软链接
|
Unarchive#
功能:解包,解压缩
1
2
3
4
5
6
7
8
9
10
|
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,
如果设置为copy=no,会在远程主机上寻找src源文件
src: 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,
如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
|
示例:
1
2
3
4
5
|
#默认copy为yes ,将本机目录文件解压到目标主机对应目录下
ansible websrvs -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'
# 解压被管理主机的foo.zip到data目录下, 并设置权限777
ansible websrvs -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
ansible websrvs -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'
|
Archive#
功能:打包压缩
1
2
3
4
5
6
|
将远程主机目录打包
path: 指定路径
dest: 指定目标文件
format: 指定打包格式
owner: 指定所属者
mode: 设置权限
|
1
|
ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
|
Hostname#
功能:管理主机名
1
2
|
ansible appsrvs -m hostname -a "name=app.adong.com" 更改一组的主机名
ansible 192.168.38.103 -m hostname -a "name=app2.adong.com" 更改单个主机名
|
Cron#
功能:计划任务
1
|
支持时间:minute,hour,day,month,weekday
|
1
2
3
4
5
6
|
# 创建任务
> ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime"
# 删除任务
> ansible websrvs -m cron -a 'state=absent name=Synctime'
# 注释任务,不在生效
> ansible websrvs -m cron -a 'minute=*/10 job='/usr/sbin/ntpdate 172.30.0.100" name=synctime disabled=yes'
|
Yum#
功能:管理包
1
2
3
4
|
ansible websrvs -m yum -a 'list=httpd' 查看程序列表
ansible websrvs -m yum -a 'name=httpd state=present' 安装
ansible websrvs -m yum -a 'name=httpd state=absent' 删除
可以同时安装多个程序包
|
Service#
功能:管理服务
1
2
3
4
|
ansible srv -m service -a 'name=httpd state=stopped' 停止服务
ansible srv -m service -a 'name=httpd state=started enabled=yes' 启动服务,并设为开机自启
ansible srv -m service -a 'name=httpd state=reloaded' 重新加载
ansible srv -m service -a 'name=httpd state=restarted' 重启服务
|
User#
功能:管理用户
1
2
3
4
5
6
7
8
9
10
11
|
home 指定家目录路径
system 指定系统账号
group 指定组
remove 清除账户
shell 指定shell类型
ansible websrvs -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible websrvs -m user -a 'name=sysuser1 system=yes home=/app/sysuser1'
ansible websrvs -m user -a 'name=user1 state=absent remove=yes' 清空用户所有数据
ansible websrvs -m user -a 'name=app uid=88 system=yes home=/app groups=root shell=/sbin/nologin password="$1$zfVojmPy$ZILcvxnXljvTI2PhP2Iqv1"' 创建用户
ansible websrvs -m user -a 'name=app state=absent' 不会删除家目录
|
Group#
功能:管理组
1
2
|
ansible srv -m group -a "name=testgroup system=yes" 创建组
ansible srv -m group -a "name=testgroup state=absent" 删除组
|
Setup#
功能:采集远程主机的信息
收集可用的facts,收集每个节点的相关信息, 如: 架构信息,IP,时间,域名,网卡,MAC,主机名,CPU等信息。
常用选项:
filter: 仅列出匹配到的facts, 默认值为*
1
2
3
4
5
6
7
8
9
10
|
常见facts:
- 物理内存容量 ansible_memtotal_mb
- CPU型号 ansible_processor
- CPU核心数 ansible_processor_cores
- 操作系统类型 ansible_os_family
- 操作系统内核 ansible_kernel
- 硬盘挂载名及容量 ansible_mounts
- 服务器主机名 ansible_nodename
- 服务器ipv4地址 ansible_all_ipv4_addresses
- 默认ipvs地址 ansible_default_ipv4['address']
|