ansible [host] -m 命令模块 -a "命令参数"
playbooks 提供两种方式进行参数的表达
---
...
...
tasks:
- name: copy_module
copy:
src:
dest:
...
---
tasks:
- name: copy_module
copy: src=/home/ansible/ dest=/home/ansible....
拷贝文件到远程主机
参数 | 解释 | 选项 |
---|---|---|
src | 文件的源地址 | |
dest | 文件的目标地址 | |
content | 指定文件内的内容,用于copy文件当中的内容而不是整个文件 | |
force | 远程主机已经存在文件是否强制覆盖 | yes|no |
backup | 有同名文件存在,并且文件内容不一致时是否备份 | yes|no |
owner | 用户(远程主机必须有该用户存在) | |
group | 用户组(远程主机必须有该用户组存在) | |
mode | 文件权限 |
复制一个test.sh到远程主机的/home/ansible 目录下,修改其用户与用户组为ansible,修改其文件权限为:0664
---
- hosts: host
remote_user: root
vars:
USER_GROUP_NAME: ansible
tasks:
- name: copy test.sh
copy: src=test.sh dest=/home/ansible_test/ backup=yes owner={{USER_GROUP_NAME}} group={{USER_GROUP_NAME}} mode=0664
对文件的基本操作,如:创建文件,删除文件
参数 | 含义 | 选项 |
---|---|---|
path | 指定操作的文件的目录或文件 | |
state | 对文件的操作描述 | touch(创建文件)absent(删除文件)link(描述文件是软连接)hard(描述文件是硬链接)directory(描述文件是一个目录) |
src | 当state为link 或hard时,创建软连接 | |
force | 强制执行 | |
owner | 用户(远程主机必须有该用户存在) | |
group | 用户组(远程主机必须有该用户组存在) | |
mode | 文件权限 |
---
- hosts: host
remote_user: root
vars:
USER_GROUP_NAME: ansible
tasks:
- name: copy test.sh
# create a file
file: path=/home/ansible/test1.sh state=touch
在文件当中添加或删除一段文本,默认是在文件的最后进行操作。
参数 | 含义 | 选项 |
---|---|---|
path | 操作的文件 | |
block | 插入的内容 | |
marker | ansible在插入一段文件时,会对文本添加开始与结束的标记,marker自定义标记 | |
state | 操作描述 | present|absent |
insertafter | 在某行后插入,可用pyhton正则表示行 | |
insertbefore | 在某行前插入,可用pyhton正则表示行 | |
backup | 备份 | yes|no |
create | 文件不存在时,是否创建 | yes|no |
hosts: host
remote_user: root
tasks:
- name: blockinfile test.sh
blockinfile:
path: /home/ansible_test/test.sh
block: "echo 'set tabstop=2' >> /etc/vimrc"
marker: "#{mark}bif_test"
backup: yes
create: yes
确保文本存在于文件当中,或检查文本不在文件当中,当文本存在时,不做任何操作,反之,添加指定文本。
参数 | 含义 | 选项 |
---|---|---|
path | 操作的文件 | |
line | 文本内容 | |
state | 操作 | present|absent |
regexp | python正则表达式 | |
insertafter | 在某行后插入,可用pyhton正则表示行 | |
inserbefore | 在某行前插入,可用pyhton正则表示行 | |
backup | 备份 | yes|no |
create | 创建文件 | yes|no |
backrefs | 当正则表达式进行匹配行时,当没有匹配到文本时,会将文本插入最后一行,当backrefs=yes,没有匹配不会添加文本信息,保持文件不变。 | yes |
---
- hosts: host
remote_user: root
vars:
USER_GROUP_NAME: ansible
tasks:
- name: lineinfile test.sh
lineinfile:
path: /home/ansible/test.sh
line: "set noh>>/etc/vimrc"
create: yes
~
远程主机查找符合条件的文件,与find命令一样
参数介绍:
参数 | 含义 | 选项 |
---|---|---|
paths | 指定查找的文件目录,多个用逗号隔开 | |
recurse | 是否递归查找,默认为no | yes |
hidden | 是否忽略查找隐藏文件,默认为no | yes |
file_type | 文件类型 | any,directory,file,link |
patterns | 查找的文件名,可正则表示,使用正则时与use_regexp配合使用 | |
use_regex | 是否启用正则表达式,默认是no | yes |
contains | 可根据文本内容进行查找,可用正则。 | |
age | 时间范围,默认是以文件的mtime为基准 | 单位:s,m,h,d,w(星期) |
age_stamp | 时间类型 | atime,mtime,ctime |
size | 文件大小,默认是大于 | 单位:t,g,m,k,b |
get_checksum | 找到文件之后返回问津的sha1校验码 |
---
- hosts: host
remote_user: root
tasks:
- name: find test.sh
find:
paths: /home/ansible/
recurse: yes
hidden: yes
file_type: any
patterns: "^te"
use_regex: yes
contains: "^echo"
age: 3d
age_stamp: ctime
size: 1b
get_checksum: yes
在远程主机上执行命令,需要注意:command不会经过远程主机的shell处理,会存在重定向,管道等操作失效。
参数 | 含义 | 选项 |
---|---|---|
free_from | 执行的命令,一般不会使用,直接写命令。 | |
chdir | 指定命令作用的目录 | |
creates | 当文件存在时就不执行命令 | |
removes | 当文件不存在就不执行命令 |
建议使用命令行使用command模块:
ansible host -m command -a "chdir=/home/ansible/ ls -al "
在远程主机上面执行shell命令,使用远程主机shell执行命令,可以匹配管道,从定向等,建议摒弃command使用shell模块,
参数 | 含义 | 选项 |
---|---|---|
free_from | 执行的命令,一般不会使用,直接写命令。 | |
chdir | 指定命令作用的目录 | |
executable | 指定shell | |
creates | 当文件存在时就不执行命令 | |
removes | 当文件不存在就不执行命令 |
---
- hosts: host
remote_user: root
vars:
USER_GROUP_NAME: ansible
tasks:
- name: shelltest
shell: touch /home/ansible/test1.sh
在远程主机上执行本机的shell脚本,但是不会讲shell脚本复制到远程主机上。
参数 | 含义 | 选项 |
---|---|---|
free_from | 执行的命令,一般不会使用,直接写命令。 | |
chdir | 指定命令作用的目录 | |
creates | 当文件存在时就不执行命令 | |
removes | 当文件不存在就不执行命令 |
---
- hosts: host
remote_user: root
tasks:
- name: shelltest
shell: touch /home/ansible/test1.sh
test.sh
#!/bin/bash
if [ !-e /home/ansible_test/test1.sh ];then
touch /home/ansible_test/test1.sh
fi
定时任务,定时任务的形式
* * * * * /bin/sh /PATH/ :一个*表示一个时间度量,从左到右为:分,时,天,周,月
参数 | 含义 | 选项 |
---|---|---|
minute | 分 | */3:每三分钟 |
hour | 时 | |
day | 天 | |
month | 月 | |
jobs | 执行的任务 | |
user | 执行任务的用户 | |
state | 对任务的操作描述,默认:present创建 | absent删除任务 |
name | 任务注释,同样可以标记一个任务, | |
不指定时刻就会默认的*
ansible host -m cron -a "minute=*/1 jobs='/bin/bash /home/ansible_testd/test.sh'"
管理远程主机的服务
参数 | 含义 | 选项 |
---|---|---|
name | 服务名称 | |
state | 操作描述 | started,stoped,restarted,reloaded |
enabled | 是否开机自启动 | yes|no |
ansible host -m service -a "name=tomcat state=started enabled=yes"
用户管理
参数 | 含义 | 选型 |
---|---|---|
name | 用户名 | |
expires | 指定用户的的过期时间,数值时间戳,可以使用“date -d 2020-1-1 + %s ” 获取指定时间的时间戳 | |
group | 指定用户的基本组 | |
groups | 指定用户的附加组 | |
append | 追加用户的附加组 | |
shell | 指定用户的shell,常见的是/sbin/bash,/sbin/nologin | |
uid | 用户的uid | |
state | 操作描述,默认是present | absent |
remove | 删除同时删除其家目录 | yes|no |
password | 用户密码,用户不能是明文,是通过crypt()函数加密的密文 | crypt.crypt(“123456”) |
generate_ssh_key | 是否为用户生成ssh密钥对,如果默认文件夹下已经有同名的文件,不会被覆盖。 | yes|no |
ssh_key_file | 定义密钥对的文件夹 | |
ssh_key_comment |
生成密码加密文件
[root@zhang ~]# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt('123456')
'$6$OIldu/jAm4iPnSXH$NOGCLMbIR/y00Bv29r8qOeS9BF.k08q2DktG1eSZWzBhYF/1jMT2u/VvzfL3oh60G394X6g8uu85Jt39FBGgq1'
>>>
---
- hosts: host
remote_user: root
tasks:
- name: useradd_test
user: nginx
group: nginx
shell: /sbin/nologin
expires: 1589731200
yum 包管理器
参数 | 含义 | 选项 |
---|---|---|
name | 包名称 | |
state | 操作描述,默认是present,表示包已经安装 | installed,latest.absent.removed |
disable_gpg_check | gpg验证,默认是no | yes |
enablerepo | 指定对临时的yum源 | |
disablerepo | 禁用yum源 |
示例:
---
hosts: host
remote_user: root
tasks:
- name: install nginx
yum: name=nginx disable_gpg_check=yes state=insatll
yum 仓库的管路,对应/ect/yum.repo.d/*的文件
参数介绍:
参数 | 含义 | 选项 |
---|---|---|
name | 仓库id | 对应*.repo的ID |
baseurl | yum仓库的url | 对应*.repo的baseurl |
descriotion | 注释信息 | 对应*.repo的name |
file | 设置仓库的文件名 | |
enable | 此仓库是否可用,默认是yes | no |
gpgcheck | gpg校验,默认是no | yes |
state | 操作描述 | present|absent |