ansible自动化运维
一、简介
Ansible 是一个 IT 自动化工具。它可以配置系统、部署软件并协调更高级的 IT 任务,例如持续部署或零停机时间滚动更新。
Ansible 的主要目标是简单和易用。它还非常关注安全性和可靠性,具有最少的移动部件,使用 OpenSSH 进行传输(以及其他传输和拉取模式作为替代),以及一种围绕人类可审计性设计的语言——即使是那些不熟悉的人该程序。
Ansible 以无代理的方式管理机器。永远不会有如何升级远程守护程序的问题,也不会因为守护程序被卸载而无法管理系统的问题。由于 OpenSSH 是最受同行评审的开源组件之一,因此大大降低了安全风险。
Ansible 是分散的——它依赖于您现有的操作系统凭据来控制对远程机器的访问。如果需要,Ansible 可以轻松连接 Kerberos、LDAP 和其他集中式身份验证管理系统。
二、安装
可以使用pip
安装,也可以在不用的操作系统用yum
、apt
等安装
其它安装文档:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
On Fedora:
sudo dnf install ansible
On RHEL:
由于 Ansible 2.10 for RHEL 目前不可用,请继续使用 Ansible 2.9
sudo yum install ansible
On CentOS:
sudo yum install epel-release
sudo yum install ansible
On Ubuntu:
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
三、工作原理
- 从inventory中选择要执行的机器
- 连接到那些机器(或网络设备,或其他受管节点),通常通过 SSH
- 将一个或多个模块复制到远程机器并在那里开始执行
四、基本使用
1、创建inventory
修改/etc/ansible/hosts
即可,原host文件已提供部分示例
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
# - Comments begin with the '#' character
# - Blank lines are ignored
# - Groups of hosts are delimited by [header] elements
# - You can enter hostnames or ip addresses
# - A hostname/ip can be a member of multiple groups
# Ex 1: Ungrouped hosts, specify before any group headers.
## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10
# Ex 2: A collection of hosts belonging to the 'webservers' group
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
# If you have multiple hosts following a pattern you can specify
# them like this:
## www[001:006].example.com
# Ex 3: A collection of database servers in the 'dbservers' group
## [dbservers]
##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57
# Here's another example of host ranges, this time there are no
# leading 0s:
## db-[99:101]-node.example.com
2、连接到远程主机
Ansible 通过SSH 协议远程机器通信。默认情况下,Ansible 使用本机 (master)OpenSSH 并使用您当前的用户名连接到被管理机器(slave),就像 SSH 一样
可以将本机ssh的公钥贴到被管理机器的authorized_keys
中
# 方式一
# 人工复制粘贴到slave机器的authorized_keys
# 方式二
# 通过ssh-copy-id 将master的公钥发送并写入slave的authorized_keys
ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.136.180
3、测试连接管控slave机器
ansible all -m ping
# 返回以下内容,说明成功连接管控slave机器
192.168.136.189 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
4、测试playbook
vim first.yaml
,使用如下内容
- name: My playbook
hosts: all
tasks:
- name: Leaving a mark
command: "touch /tmp/ansible_was_here"
执行playbook:
ansible first.yaml
返回结果:
PLAY [my first playbook] ******************************************************************************************************************************************************************************************
TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [192.168.136.180]
ok: [192.168.136.189]
TASK [make a mark] ************************************************************************************************************************************************************************************************
[WARNING]: Consider using the file module with state=touch rather than running 'touch'. If you need to use command because file is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.
changed: [192.168.136.180]
changed: [192.168.136.189]
PLAY RECAP ********************************************************************************************************************************************************************************************************
192.168.136.180 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.136.189 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
五、配置文件
ansible默认配置文件在/etc/ansible/ansible.cfg
[defaults]
hostfile = /etc/ansible/hosts #指定主机分组文件位置
library = /usr/share/ansible #Ansible默认搜寻模块的位置
remote_tmp = $HOME/.ansible/tmp #ansible module推送到客户端,然后ssh执行客户端上的ansible module,执行完删除,这里就是临时目录
pattern = * #如果没有提供“hosts”节点,这是playbook要通信的默认主机组.默认值是对所有主机通信
forks = 5 #这个选项设置在与主机通信时的默认并行进程数。从Ansible 1.3开始,fork数量默认自动设置为主机数量或者潜在的主机数量, 这将直接控制有多少网络资源活着cpu可以被使用.很多用户把这个设置为50,有些设置为500或者更多.如果你有很多的主机, 高数值将会使得跨主机行为变快.默认值比较保守.
poll_interval = 15 #对于Ansible中的异步任务, 这个是设置定义,当具体的poll interval 没有定义时,多少时间回查一下这些任务的状态, 默认值是一个折中选择15秒钟.这个时间是个回查频率和任务完成叫回频率和当任务完成时的回转频率的时钟。
sudo_user = root #这个是sudo使用的默认用户,如果在ansible执行语句的时候``–sudo-user`` 没有特指或者’sudo_user’ 在Ansible playbooks中没有特指,在大多数的逻辑中 默认为: ‘root’。
#ask_sudo_pass = True #每次执行ansible命令时是否询问sudo密码
#ask_pass = True #每次执行ansible命令是否询问ssh密码
transport = smart #如果”-c <transport_name>” 选项没有在使用/usr/bin/ansible 或者 /usr/bin/ansible-playbook 特指的话,这个参数提供了默认通信机制.默认 值为’smart’, 如果本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,如果不支持则使用‘paramiko’.其他传输选项包括‘local’, ‘chroot’,’jail’等等.用户通常可以这个设置为‘smart’,让playbook在需要的条件自己选择‘connectin:’参数.
remote_port = 22 #这个设置是你系统默认的远程SSH端口,如果不指定,默认为22号端口
module_lang = C #这是默认模块和系统之间通信的计算机语言,默认为’C’语言
gathering = implicit #1.6版本中的新特性,这个设置控制默认facts收集(远程系统变量). 默认值为’implicit’, 每一次play,facts都会被收集,除非设置’gather_facts: False’. 选项‘explicit’正好相反,facts不会被收集,直到play中需要. ‘smart’选项意思是,没有facts的新hosts将不会被扫描, 但是如果同样一个主机,在不同的plays里面被记录地址,在playbook运行中将不会通信.这个选项当有需求节省fact收集时比较有用.
#roles_path = /etc/ansible/roles #roles 路径指的是’roles/’下的额外目录,用于playbook搜索Ansible roles.比如, 如果我们有个用于common roles源代码控制仓库和一个不同的 playbooks仓库,你也许会建立一个惯例去在 /opt/mysite/roles 里面查找roles.多余的路径可以用冒号分隔,Roles将会在playbook目录中开始搜索.如果role没有找到,这个参数指定了其它可能的搜索路径.
#host_key_checking = False #不进行host_key检查,省去目标key发生变化时输入(yes/no)的步骤
sudo_exe = sudo #如果在其他远程主机上使用另一种方式执行sudo操作, sudo程序的路径可以用这个参数更换,使用命令行标签来拟合标准sudo。
#sudo_flags = -H #当使用sudo支持的时候,传递给sudo而外的标签. 默认值为”-H”, 意思是保留原用户的环境.在有些场景下也许需要添加或者删除 标签,大多数用户不需要修改这个选项。
timeout = 10 #默认ssh尝试连接超时时间
#remote_user = root #这是个ansible使用/usr/bin/ansible-playbook链接的默认用户名. 注意如果不指定,/usr/bin/ansible默认使用当前用户名称
#log_path = /var/log/ansible.log #登陆执行信息的记录文件位置,不指定默认是记录到系统日志文件中。ansible用户时需要:chown -R ansible:ansible ansible.log。
#module_name = command #这个是/usr/bin/ansible的默认模块名(-m). 默认是’command’模块
#executable = /bin/sh #这个选项可以在sudo环境下产生一个shell交互接口. 用户只在/bin/bash的或者sudo限制的一些场景中需要修改.大部分情况下不需要修改。
#hash_behaviour = replace #Ansible 默认将会以一种特定的优先级覆盖变量,合法的值为’replace’(默认值)或者‘merge’.
#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n #这是一个开发者中心特性,允许开启Jinja2拓展模块
#private_key_file = /path/to/file #如果你是用pem密钥文件而不是SSH 客户端或密码认证的话,你可以设置这里的默认值,来避免每一次提醒设置密钥文件位置``–ansible-private-keyfile``。
ansible_managed = Ansible managed: {file} #Ansible-managed 是一个字符串.可以插入到Ansible配置模版系统生成的文件中。
#display_skipped_hosts = True #如果设置为`False`,ansible 将不会显示任何跳过任务的状态.默认选项是现实跳过任务的态::display_skipped_hosts=True注意Ansible 总是会显示任何任务的头文件, 不管这个任务被跳过与否。
#error_on_undefined_vars = False #从Ansible 1.3开始,这个选项将为默认,如果所引用的变量名称错误的话, 将会导致ansible在执行步骤上失败。
#system_warnings = True #允许禁用系统运行ansible相关的潜在问题警告(不包括操作主机):这个包括第三方库或者一些需要解决问题的警告
#deprecation_warnings = True #允许在ansible-playbook输出结果中禁用“不建议使用”警告。
action_plugins = /usr/share/ansible_plugins/action_plugins #用来激活一些事件,例如执行一个模块,一个模版,等等这是一个以开发者为中心的特性,使得一些底层模块可以从外部不同地方加载.
callback_plugins = /usr/share/ansible_plugins/callback_plugins #Callbacks 在ansible中是一段代码,在特殊事件时将被调用.并且允许出发通知. 这是一个以开发者为中心的特性,可以实现对Ansible的底层拓展,并且拓展模块可以位于任何位置.
connection_plugins = /usr/share/ansible_plugins/connection_plugins #连接插件允许拓展ansible拓展通讯信道,用来传输命令或者文件. 这是一个开发者中心特性,拓展插件可以从任何不同地方加载.
lookup_plugins = /usr/share/ansible_plugins/lookup_plugins #允许模块插件在不同区域被加载
vars_plugins = /usr/share/ansible_plugins/vars_plugins #允许底层拓展模块从任何地方加载,例:vars_plugins = ~/.ansible/plugins/vars_plugins/:/usr/share/ansible_plugins/vars_plugins
filter_plugins = /usr/share/ansible_plugins/filter_plugins #过滤器是一种特殊的函数,用来拓展模版系统
#nocows = 1 #默认ansible可以调用一些cowsay的特性,使得/usr/bin/ansible-playbook运行起来更加愉快,1为禁用,0为启用。
#nocolor = 1 #默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.
#ca_file_path =
#http_user_agent = ansible-agent
[paramiko_connection]
#record_host_keys=False #默认设置会记录并验证通过在用户hostfile中新发现的的主机(如果host key checking 被激活的话). 这个选项在有很多主机的时候将会性能很差.在 这种情况下,建议使用SSH传输代替. 当设置为False时, 性能将会提升,在hostkey checking 被禁用时候,建议使用.
#pty=False
[ssh_connection]
#ssh_args = -o ControlMaster=auto -o #这个选项将会传递一组选项给Ansible 然不是使用以前的默认值:用户可以提高ControlPersist值来提高性能.30 分钟通常比较合适.
# control_path = %(directory)s/%%h-%%r #这个是保存ControlPath套接字的位置,Ansible 1.4 以后的版本会引导用户在这种情况下使用”-vvvv”参数,这样很容易分辨 Control Path 文件名是否过长
#control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r #这是默认值
#pipelining = False #在不通过实际文件传输的情况下执行ansible模块来使用管道特性,从而减少执行远程模块SSH操作次数.如果开启这个设置,将显著提高性能. 然而当使用”sudo:”操作的时候, 你必须在所有管理的主机的/etc/sudoers中禁用’requiretty’.默认这个选项为了保证与sudoers requiretty的设置(在很多发行版中时默认的设置)的兼容性是禁用的,但是为了提高性能这里是开启的。
#scp_if_ssh = True #如果用户操控一个一个没有开启SFTP协议的远程系统.如果这个设置为True,scp将代替用来为远程主机传输文件,默认不修改。
[accelerate]
accelerate_port = 5099 #在急速模式下使用的端口
accelerate_timeout = 30 #这个设置时用来控制从客户机获取数据的超时时间.如果在这段时间内没有数据传输,套接字连接会被关闭. 一个保持连接(keepalive)数据包通常每15秒回发回给控制台,所以这个超时时间不应该低于15秒(默认值为30秒)。
accelerate_connect_timeout = 5.0 #这个设置空着套接字调用的超时时间.这个应该设置相对比较短.这个和`accelerate_port`连接在回滚到ssh或者paramiko(受限于你默认的连接设置)连接方式之前会尝试三次开始远程加速daemon守护进程.默认设置为5.0秒。
accelerate_daemon_timeout = 30 #这个控制加速daemon守护进程的超时时间,用分钟来衡量.默认为30分钟
#accelerate_multi_key = yes #如果这个选项开启,这个设置将允许多个私钥被加载到daemon. 任何客户端要想连接daemon都需要开启这个选项,通过本地套接字文件连接的通过SSH上传密钥文件到目标节点的新客户端,必须在登陆daemon时使用原始的登陆密钥登陆。
六、inventory使用
Ansible默认调用/etc/ansible/hosts
配置的主机组或者主机,同时也可以通过 -i
参数指定自定义的hosts文件。
Ansible Inventory实际上是包含静态Inventory和动态Inventory两部分。静态inventory即类似于/etc/ansible/hosts
写死在文件中,动态inventory可以使用脚本来控制
1、inventory参数
ansible_ssh_host: SSH目标主机名或IP(默认值是主机的名字)
ansible_ssh_port: SSH目的端口(默认是22)
ansible_ssh_user: SSH登录使用的用户名(root)
ansible_ssh_pass: SSH认证所使用的密码(默认是none,这是不安全的,ansible极力推荐使用--ask-pass选项或使用SSH keys)
ansible_sudo_pass: SSH认证的sudo用户的密码
ansible_connection: ansible支持多种transport机制,ansible使用何种连接模式连接到主机,连接类型有local,ssh,docker,paramiko(默认是smart,也就是智能选择)
ansible_ssh_private_key_file: SSH认证所使用的私钥(默认是none)
ansible_shell_type: 命令所使用的shell(默认是sh)目标系统的shell类型,你不应该设置这个参数,除非你设置的ansible_shell_executable与默认的sh不兼容。默认情况下,命令是在sh shell 环境风格下运行的。此处可以设置为csh或fish shell。
ansible_python_interpreter: 主机上的python解释器(默认是/usr/bin/python)
ansible_*_interpreter:如果不是用python编写的自定义模块,可以使用这个参数来指定解释器的路径(如/usr/bin/ruby),(默认是none)
2、inventory文件语法
可以使用上述的inventory参数来指定不同主机的参数
- 格式一
中括号中表示这一组主机的group namelocalhost
表示slave服务器的域名ansible_ssh_host
指定slave服务器的IPansible_ssh_port
指定slave服务器ssh端口ansible_ssh_user
指定slave服务器ssh用户ansible_ssh_pass
指定slave服务器ssh用户密码
[test1]
localhost ansible_ssh_host=192.168.136.180 ansible_ssh_port=22 ansible_ssh_user=fhu ansible_ssh_pass=12345678
[test2]
192.168.136.189 ansible_ssh_port=22 ansbile_ssh_user=root ansible_ssh_pass=12345678
- 格式二
支持正则格式的语法
[test3]
192.168.136.18[4:8]
# 这里会在192.168.136.184和192.168.136.188两台服务器上执行
3、多group管理
- 方式一
使用逗号“,”作为间隔,将多个group隔开
$ ansible -i /etc/ansible/hosts test1,test2 -a 'systemctl status firewalld'
192.168.136.180 | FAILED | rc=3 >>
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)non-zero return code
192.168.136.189 | FAILED | rc=3 >>
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)non-zero return code
- 方式二
新建一个group,用来指定需要执行的多个group,需要在新group后加上:children
。
此时,只需要指定新group即可将包含的多个group均指定
[test1]
localhost ansible_ssh_host=192.168.136.180 ansible_ssh_port=22 ansible_ssh_user=fhu ansible_ssh_pass=12345678
[test2]
192.168.136.189 ansible_ssh_port=22 ansbile_ssh_user=root ansible_ssh_pass=12345678
[test:children]
test1
test2
$ ansible -i /etc/ansible/hosts test -a 'systemctl status firewalld'
192.168.136.180 | FAILED | rc=3 >>
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)non-zero return code
192.168.136.189 | FAILED | rc=3 >>
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)non-zero return code
七、ansible使用
标准格式:
ansible <pattern_goes_here> -m <module_name> -a <arguments>
# pattern_goes_here: 可以是主机ip或hosts中的组名
# module_name: 用于执行的模块名
# arguments:要执行的命令语句
# 其它常用参数
-M, --module-path MODULE_PATH # 将冒号分隔的路径添加到模块库,默认为~/.ansible/plugins/modules:/usr/share/ansible/plugins/modules
--become-user <BECOME_USER> # 以该用户身份运行操作(默认=root)
-u username # 指定ssh连接的用户名,即执行后面命令的用户
-k # 如果是普通用户运行ansible,当需要root权限执行的话,-k参数用来输入密码
-i inventory_file # 指定所使用的用户组所在的文件,默认是/etc/ansible/hosts
-f number # 指定并发数,并发量大的时候,提高该数字值,如 -f 10,默认是5个。
-t # 输出结果保存路径
-K # sudo密码(如果执行命令需要使用sudo用户的话,需要-u执行用户,用-K执行输入sudo密码)
--private-key=key_name # 如果是用非默认的id_rsa来当私钥的话,可以指定一个私钥文件。
八、常见模块
1、命令模块——command模块
要求受管主机上安装Python,不支持环境变量和操作符(例如 '|', '<', '>', '&')
在指定slave节点上运行命令
参数 | 选项/默认值 | 释义 |
chdir | 在执行命令前,进入到指定目录中 | |
creates | 判断指定文件是否存在,如果存在,不执行后面的操作 | |
removes | 判断指定文件是否存在,如果存在,执行后面的操作 | |
free_form | 必须要输入一个合理的命令 |
ansible test -m command -a 'touch a.txt'
2、命令模块——shell模块
要求受管主机上安装Python,支持使用"<",">","|",";","&"等符号特殊符号, shell模块调用的/bin/sh
指令执行
在指定slave主机上执行命令
参数 | 选项/默认值 | 释义 |
chdir | 在执行命令前,进入到指定目录中 | |
creates | 判断指定文件是否存在,如果存在,不执行后面的操作 | |
removes | 判断指定文件是否存在,如果存在,执行后面的操作 | |
free_form | 必须要输入一个合理的命令 |
ansible test -m shell -a 'hostname|tee'
3、命令模块——raw模块
不需要受管主机上安装Python,直接使用远程shell运行命令,通常用于无法安装Python的系统(例如网络设备等)
在指定slave主机上执行命令
ansible test -m raw -a 'hostname|tee'
4、文件模块——copy模块
把主控master端文件拷贝到到指定slave节点上
参数 | 选项/默认值 | 释义 |
dest(required) | 将数据复制到远程节点的路径信息 | |
src | 指定将本地管理主机的什么数据信息进行远程复制 | |
backup | no/ yes | 默认数据复制到远程主机,会覆盖原有文件(yes 将源文件进行备份) |
content | 在文件中添加信息 | |
group | 文件数据复制到远程主机,设置文件属组用户信息 | |
mode | 文件数据复制到远程主机,设置数据的权限 eg 0644 0755 | |
owner | 文件数据复制到远程主机,设置文件属主用户信息 | |
remote_src | no/ yes | 如果设置为yes,表示将远程主机上的数据进行移动操作如果设置为no, 表示将管理主机上的数据进行分发操作 |
ansible test -m copy -a 'src=/root/a.txt dest=/opt/'
5、文件模块——fetch模块
拉取指定slave设备上的文件到master
参数 | 选项/默认值 | 释义 |
src(required) | 要获取的远程系统上的文件,必须是文件,而不是目录 | |
dest | 用于保存文件的目录 |
ansible web01 -m fetch -a "src=/root/lol.txt dest=/root"
6、文件模块——file模块
更改指定slave节点上文件的权限、归属用户和归属组
参数 | 选项/默认值 | 释义 |
dest/path/name(required) | 将数据复制到远程节点的路径信息 | |
group | 文件数据复制到远程主机,设置文件属组用户信息 | |
mode | 文件数据复制到远程主机,设置数据的权限 eg 0644 0755 | |
owner | 文件数据复制到远程主机,设置文件属主用户信息 | |
src | 指定将本地管理主机的什么数据信息进行远程复制 | |
state= | absent | 将数据进行删除 |
state= | directory | 创建一个空目录信息 |
state= | file | 查看指定目录信息是否存在 |
state= | touch | 创建一个空文件信息 |
state= | hard/link | 创建链接文件 |
ansible test -m file -a "dest=/opt/monitor.py mode=755 owner=root group=root"
7、定时任务模块——cron模块
在指定slave节点上定义一个计划任务
参数 | 选项/默认值 | 释义 |
minute/hour/day/month/weekday | 和设置时间信息相关参数 | |
job | 和设置定时任务相关参数 | |
name(required) | 设置定时任务注释信息 | |
state | absent | 删除指定定时任务 |
disabled= | yes | 将指定定时任务进行注释 |
disabled= | no | 取消注释 |
ansible test -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/bin/python3 test.py"'
8、用户模块——group模块
在指定slave节点上创建一个用户组
参数 | 选项/默认值 | 释义 |
gid | 指创建的组ID信息 | |
name | 指创建组名称信息 | |
state= | absent | 删除指定的用户组 |
state= | present | 创建指定的用户组 |
ansible test -m group -a 'gid=2014 name=nolinux'
9、用户模块——user模块
在指定slave节点上创建一个用户名
参数 | 选项/默认值 | 释义 |
password | 请输入密码信息 | |
name | 指定用户名信息 | |
uid | 指定用户uid信息 | |
group | 指定用户主要属于哪个组 | |
groups | 指定用户属于哪个附加组信息 | |
shell | /bin/bash或/sbin/nologin | 指定是否能够登录 |
create_home | yes/no | 是否创建家目录信息 |
home | 指定家目录创建在什么路径 默认/home |
ansible test -m user -a 'name=nolinux groups=nolinux state=present'
10、安装模块——yum模块
在指定slave节点上使用yum安装软件
参数 | 选项/默认值 | 释义 |
name(required) | 指定软件名称信息 | |
state= | absent/removed | 将软件进行卸载(慎用) |
state= | present/installed | 将软件进行安装 |
latest | 安装最新的软件 yum update |
ansible test -m yum -a "state=present name=httpd"
11、服务模块——service模块
管理指定slave节点上的service
enabled | no yes | 设置服务是否开机自启动 如果参数不指定,原有服务开机自启动状态进行保留 |
name (required) | 设置要启动/停止服务名称 | |
state= | reloaded | 重载 |
state= | restarted | 重启 |
state= | started | 启动 |
state= | stopped | 停止 |
ansible test -m service -a 'name=httpd state=restarted enabled=yes'
12、脚本模块——script模块
在指定slave节点上执行脚本(该脚本是在ansible控制节点上的)
ansible test -m script -a '/root/a.sh'
13、ping模块
检查指定节点机器是否还能连通
ansible test -m ping
14、挂载模块——mount模块
用于批量管理主机进行挂载卸载操作
参数 | 选项/默认值 | 释义 |
fstype | 指定挂载的文件系统类型 | |
opts | 指定挂载的参数信息 | |
path | 定义一个挂载点信息 | |
src | 定义设备文件信息 | |
state= | absent | 会进行卸载,也会修改fstab文件信息 |
state= | unmounted | 会进行卸载,不会修改fstab文件 |
state= | present | 不会挂载,只会修改fstab文件 |
state= | mounted | 会进行挂载,会修改fstab文件 |
ansible test -m mount -a "src=/dev/sda path=/mnt fstype=nfs state=present"