【Ansible学习】- 常用系统模块之service/systemd/ping模块

service模块

简介

service模块用于控制远程主机的服务,说白了,就是Linux下的service命令。支持的init系统包括BSD init,OpenRC,SysV,Solaris SMF,systemd,upstart。

模块参数

名称 必选 默认值 可选值 备注
arguments no 如果打开这个标记,backrefs会改变模块的一些操作:insertbefore和insertafter参数会被忽略。当regexp不匹配文件中的任何行时,文件不会做任何修改,否则 使用扩展的line参数 替换 最后一个匹配正则表达式的行
enabled no yes/no 服务是否开机自动启动。enabledstate至少要有一个被定义
name yes 服务名称
pattern no 如果服务没有响应,则ps查看是否具有指定参数的进程,有则认为服务已经启动
sleep no EOF EOF/*regex* 如果服务被重新启动,则睡眠多少秒再执行停止和启动命令
state no started,stopped,restarted,reloaded service最终操作后的状态

示例

启动/停止/重启/重载服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@centos7 ~]# ansible test -m service -a "name=httpd state=started"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
}

[root@centos7 ~]# ansible test -m service -a "name=httpd state=stopped"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "stopped",
}

[root@centos7 ~]# ansible test -m service -a "name=httpd state=restarted"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
}

[root@centos7 ~]# ansible test -m service -a "name=httpd state=reloaded"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
}

设置服务开机自启动

1
2
3
4
5
6
7
[root@centos7 ~]# ansible test -m service -a "name=httpd enabled=yes"
192.168.31.66 | SUCCESS => {
"changed": false,
"enabled": true,
"name": "httpd",
。。。
}

systemd模块

简介

systemd模块用于控制远程主机的systemd服务,说白了,就是Linux下的systemd命令。需要远程主机支持systemd

用法和service模块基本相同。

模块参数

名称 必选 默认值 可选值 备注
daemon_reload no yes/no 在执行任何其他操作之前运行守护进程重新加载,以确保systemd已经读取其他更改
enabled no yes/no 服务是否开机自动启动。enabledstate至少要有一个被定义
masked no yes/no 是否将服务设置为masked状态,被mask的服务是无法启动的
name yes 服务名称
no_block no yes/no 不要同步等待操作请求完成
state no started,stopped,restarted,reloaded service最终操作后的状态
user no yes/no 使用服务的调用者运行systemctl,而不是系统的服务管理者

示例

启动/停止/重启/重载服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=started"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
"status": {
。。。

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=stopped"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "stopped",
"status": {
。。。

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=restarted"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
"status": {
。。。

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=reloaded"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",

设置服务masked状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 先将服务停止
[root@centos7 python_code]# ansible test -m systemd -a "name=httpd state=stopped"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "stopped",
。。。
}

[root@centos7 python_code]# ansible test -m systemd -a "name=httpd masked=yes"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
。。。
}

# 服务已无法启动
[root@centos7 python_code]# ansible test -m systemd -a "name=httpd state=started"
192.168.31.66 | FAILED! => {
"changed": false,
"msg": "Unable to start service httpd: Failed to start httpd.service: Unit is masked.\n"
}

# 撤销mask
[root@centos7 python_code]# ansible test -m systemd -a "name=httpd masked=no"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
。。。
}

# 可以成功启动
[root@centos7 python_code]# ansible test -m systemd -a "name=httpd state=started"
192.168.31.66 | SUCCESS => {
"changed": true,
"name": "httpd",
"state": "started",
。。。
}

ping模块

简介

用于确认和对象机器之间是否能够ping通,正常情况会返回pong。它在剧本中没有任何意义,但从/usr/bin/ansible可以验证主机是否可以登录。

参数

名称 必选 默认值 可选值 备注
data no pong 数据返回的ping返回值。如果此参数设置为crash ,模块将导致异常。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 默认返回是pong
[root@centos7 python_code]# ansible test -m ping
192.168.31.66 | SUCCESS => {
"changed": false,
"ping": "pong"
}

# 设置返回值是haha
[root@centos7 python_code]# ansible test -m ping -a "data=haha"
192.168.31.66 | SUCCESS => {
"changed": false,
"ping": "haha"
}

[root@centos7 python_code]# ansible test -m ping -a "data=crash"
192.168.31.66 | FAILED! => {
"changed": false,
"module_stderr": "Shared connection to 192.168.31.66 closed.\r\n",
"module_stdout": "Traceback (most recent call last):\r\n File \"/tmp/ansible_P3uPly/ansible_module_ping.py\", line 82, in <module>\r\n main()\r\n File \"/tmp/ansible_P3uPly/ansible_module_ping.py\", line 72, in main\r\n raise Exception(\"boom\")\r\nException: boom\r\n",
"msg": "MODULE FAILURE",
"rc": 0
}

selinux模块

简介

selinux模块用于配置SELinux状态,需要客户端安装libselinux-python

参数

名称 必选 默认值 可选值 备注
conf no /etc/selinux/config SELinux配置文件的路径
policy no SELinux所使用的的策略,如targeted。若state不是disabled,该配置是必需的
state yes enforcing,permissive,disabled SELinux的最终状态

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@centos7 sensu]# ansible test -m selinux -a "state=enforcing policy=targeted"
[WARNING]: Reboot is required to set SELinux state to enforcing

192.168.2.196 | SUCCESS => {
"changed": true,
"configfile": "/etc/selinux/config",
"msg": "Config SELinux state changed from 'disabled' to 'enforcing'",
"policy": "targeted",
"reboot_required": true,
"state": "enforcing"
}

[root@centos7 sensu]# ansible test -m selinux -a "state=permissive policy=targeted"
[WARNING]: Reboot is required to set SELinux state to permissive

192.168.2.196 | SUCCESS => {
"changed": true,
"configfile": "/etc/selinux/config",
"msg": "Config SELinux state changed from 'enforcing' to 'permissive'",
"policy": "targeted",
"reboot_required": true,
"state": "permissive"
}

[root@centos7 sensu]# ansible test -m selinux -a "state=disabled"
192.168.2.196 | SUCCESS => {
"changed": true,
"configfile": "/etc/selinux/config",
"msg": "Config SELinux state changed from 'permissive' to 'disabled'",
"policy": "targeted",
"reboot_required": false,
"state": "disabled"
}
hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
0%