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。

image-20240606193809981

Shell

Command 有局限性,很多命令不支持

image-20240606194852288

这些复杂命令,即使使用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.

在主控机上写个脚本,然后执行:

image-20240606200134843

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相反,目前不支持目录,可以先打包,再提取文件

image-20240606202010931

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']