本节包括的模块:
(1)包管理模块yum
(2)配置yum源模块yum_repository
(3)服务管理模块service
(4)systemd模块
(5)用户管理模块user
(6)debug模块
(7)定时任务模块cron
yum--Ansible官方使用说明文档
ansible-doc -s yum
- name: Manages packages with the `yum' package manager
yum:
disable_gpg_check: # 安装包时禁止gpgcheck,仅在state=present或latest时生效。
disablerepo: # 禁用指定的repoid,多个repoid使用逗号分隔。
enablerepo: # 明确使用该repoid
exclude: # 排除哪些包不安装,仅在state=present或latest时生效。
list: # 类似于yum list。
name: # 指定安装的包名,可带上版本号。多个包可使用逗号分隔。
state: # 状态。('present'、'installed','latest')用于安装包,
# ('absent'、'removed')用于移除已安装包。
update_cache: # 强制更新yum的cache。
name需要配合state来使用,如果state指定为present/installed/latest将安装包,其中latest是安装最新包,默认为present。如果指定为absent/removed则用于卸载包。
在ansible中,很多地方都会出现present和absent的状态,它们一般都表示目标是否应该存在还是不存在,也就是要进行的动作是创建和删除。
被控制端列出和nginx相关的包,如下:
ansible test -m yum -a "list=nginx" -f 10
被控制端安装tree包,如下:
ansible test -m yum -a "name=tree state=installed" -o -f 8
被控制端安装本地的包,且排除某些包不安装,如下:
ansible centos -m yum -a "name=/tmp/*.rpm exclude=*unix* state=present"
被控制端卸载包:
ansible test -m yum -a "name=tree state=removed" -o -f 8
yum_repository--Ansible官方使用说明文档
用于配置yum源。可以实现非常完整的yum仓库配置。但是一般只需简单的添加yum源即可。所以,以下是简单版的用法和示例。
ansible-doc -s yum_repository
- name: Add or remove YUM repositories
yum_repository:
baseurl: #地址
mirrorlist: # 设置mirrorlist地址
description: # 描述信息
enabled: # 是否启用该仓库,默认为yes
file: # 保存此仓库的文件,不设置该项的话则默认以name选项中的名称命名,将自动以".repo"后缀结尾。
gpgcheck: # 是否要进行gpgcheck
name: # 仓库的名称,要保证名称的唯一性
reposdir: # 保存.repo文件的目录,默认/etc/yum.repos.d/
state: # repo文件的状态,present/absent,默认present。
示例如下:
ansible test -m yum_repository -a 'name=aliyun_epel description="epel repo" baseurl=http://mirrors.aliyun.com/epel/7/$basearch/ gpgcheck=no enabled=yes'
ansible test -m yum_repository -a 'name=rpmforge description="RPMforge YUM repo" file="external_repos" baseurl=http://apt.sw.be/redhat/el7/en/$basearch/rpmforge mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors-rpmforge gpgcheck=no enabled=yes'
关于 baseurl 和 mirrorlist 之间的区别,可参考 yum配置文件中baseurl和mirrorlist的区别
- name: Add multiple repositories into the same file (2/2)
yum_repository:
name: rpmforge
description: RPMforge YUM repo
file: external_repos
baseurl: http://apt.sw.be/redhat/el7/en/$basearch/rpmforge
mirrorlist: http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
enabled: no
service--Ansible官方使用说明文档
ansible-doc -s service
- name: Manage services
service:
enabled: # 设置服务为开机自启动,默认为no
name: # 服务名
state: # 'started'和'stoped'分别启动和停止服务,它们是幂等操作,多次启动或停止服务的结果是一样的,
# 也就是说对于运行中的服务不会再执行启动操作,同理停止也是一样。'restarted'总是重启服务,
# 'reloaded'总是重读配置文件,如果服务是未运行状态,则'reloaded会启动服务。
# (state和enabled两者至少要给一个)
设置nginx开机自启动:
ansible test -m service -a "name=nginx enabled=yes" -o -f 8
启动nginx服务:
ansible test -m service -a "name=nginx state=started" -o -f 8
管理systemd风格的服务。systemd--Ansible官方使用说明文档
ansible-doc -s systemd
- name: Manage services
systemd:
daemon_reload: # 在执行所有动作之前,先确定是否要reload一次。值为yes/no。
enabled: # 是否设置开机自启动。
masked: # 是否将此unit做mask(隐藏、掩盖)处理。mask后的unit将无法启动。
name: # 待操作服务名。可以是name,也可以是name.service。
state: # 'started'/'stopped'具有幂等性。但restarted和reloaded总是会执行
关于 masked 这点,我这里举个例子说明,我们使用 docker 时,有时候会遇到这样的错误:
Failed to start docker.service: Unit docker.service is masked.
那么这个时候,我们是无法使用 restart/start 来启动 docker 的,因为 docker 被 mask 了~,我们可以采用下面的命令来启动 docker :
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
同理还有组管理模块group,就不多做说明了。同样,创建用户时,默认会创建同名group。
user--Ansible官方使用说明文档
group--Ansible官方使用说明文档
ansible-doc -s user
- name: Manage user accounts
user:
name: # 要创建、修改、移除的用户名。
password: # 设置用户密码。此处只能使用加密密码作为值。
system: # state=present 设置为yes表示创建一个系统用户,只能用于创建,不能用于修改已有用户为系统用户。
state: # 创建用户(present)还是删除用户(absent)。默认为present。
create_home: # 创建家目录,或者已有的用户但家目录不存在也会创建。设置为no则不创建家目录。
home: # 指定要创建的家目录路径
move_home: # 如果设置为yes,则"home="则表示将家目录移动到此选项指定的路径下。
uid: # 设置用户的uid
group: # 设置用户的primary group
groups: # 将用户加入到辅助组列表中。如果设置"groups=",则会将此用户从所有辅助组中移除。
shell: # 设置用户的shell。
force: # 配合'state=absent'时,等价于'userdel --force',即强制删除用户、家目录和邮件列表。
remove: # 配合'state=absent'时,等价于'userdel --remove',即删除家目录和邮件列表。
update_password: # user是幂等模块,"always"将总是修改密码。"on_create"将只在创建用户时设置密码。
创建系统用户,并指定shell:
ansible test -m user -a "name=wtf system=yes shell=/bin/bash"
删除用户:
ansible test -m user -a "name=wtf state=absent"
指定update_password=always
将总是修改用户的密码,不管该用户是否已存在。而update_password=on_create
则只有新创建用户时才设置密码,如果用户已存在,则不会修改该用户的密码。默认值就是always 。
## 生成加密密码
openssl passwd -1 123456
$1$U0LHGwj5$bMocUtBQtkBwdplK.FIYe1
ansible test -m user -a 'name=wtf_test password="$1$U0LHGwj5$bMocUtBQtkBwdplK.FIYe1" update_password=always'
创建用户并指定密码,但如果用户已存在则不修改密码。
## 生成加密密码
openssl passwd -1 12345678
$1$IPjg/uyu$YmJzqBHkqYrDHgrQ9zdJs/
ansible test -m user -a 'name=wtf_td password="$1$IPjg/uyu$YmJzqBHkqYrDHgrQ9zdJs/" update_password=on_create'
用于输出自定义的信息,类似于echo、print等输出命令。ansible中的debug主要用于输出变量值、表达式值,以及用于when条件判断时。使用方式非常简单。
debug--Ansible官方使用说明文档
ansible-doc -s debug
- name: Print statements during execution
debug:
msg: # 输出自定义信息。如果省略,则输出普通字符。
var: # 指定待调试的变量。只能指定变量,不能指定自定义信息,且变量不能加{{}}包围,而是直接的变量名。
verbosity: # 控制debug运行的调试级别,有效值为一个数值N。
举例如下:
ansible test -m debug -a 'msg="this is a test"'
ansible test -m debug -a 'var=ansible_eth0.ipv4.address'
可以输出变量值,不过一般使用到变量的时候都会在playbook中使用debug模块,以下是一个示例:
tasks:
- name: print any messages
debug: msg="you name is {{ name }}"
cron模块用于设置定时任务,也用于管理定时任务中的环境变量。cron--Ansible官方使用说明文档
ansible-doc -s cron
- name: Manage cron.d and crontab entries
cron:
backup: # (yes/no)如果设置了,则会在修改远程cron_file前备份这些文件
cron_file: # 自定义cron_file的文件名,使用相对路径则表示在/etc/cron.d中。必须同时指定user选项
user: # 指定哪个用户的crontab将要被修改,默认为root
disabled: # 禁用crontab中的某个job,要求state=present
env: # (yes/no)设置一个环境变量,将添加在crontab的顶端。使用name和value定义变量名和值
job: # 需要执行的命令。如果设置了env,则表示环境变量的值,此时job="XXXX"等价于value="XXXX"。
# 要求state=present
minute: # 分(0-59, *, */N),不写时,默认为*
hour: # 时(0-23, *, */N),不写时,默认为*
day: # 日(1-31, *, */N),不写时,默认为*
month: # 月(1-12, *, */N),不写时,默认为*
weekday: # 周(0-6 for Sunday-Saturday, *),不写时,默认为*
name: # 描述crontab任务的字符串。但如果设置的是env,则name为环境变量的名称。要求state=absent
# 注意,若未设置name,且state=present,则总会创建一个新job条目,即使cron_file中已经存在
# 同样的条目
special_time: # 定时任务的别称,用于定义何时运行job条目。
# 有效值有reboot/hourly/daily/weekly/monthly/yearly/annually。
state: # job或者env的状态是present(默认)还是absent。present用于创建,absent用于移除
本博文是参考马龙帅大佬文章整理生成,属于博主读书笔记,如有侵权,请大佬与我联系,立删!
最后,感谢开源,拥抱开源~
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。