admin 管理员组文章数量: 887016
目录
一、Ansible 发展史及功能
1.1 Ansible 功能
1.2 Ansible 特性
1.3 Ansible 架构
1.3.1 Ansible组成
1.3.2 Ansible 命令执行来源
1.3.3Ansible工作原理及流程
二、Ansible
2.1安装
2.2查看基本信息
2.3相关文件
2.4 ansible 主配置文件
2.5 inventory 主机清单文件
①ansible管理,不需要输入yes
②开启免密登录
③使用脚本免密登录
2.6Ansible相关工具
2.6.1 ansible
执行临时任务一次性任务
2.6.2 ansible-doc
2.6.3 ansible-console
2.6.4 playbook
2.7 模块
2.7.1 Command 模块
2.7.2shell模块
shell模块的常用参数
2.7.3 Script模块
2.7.4 copy模块
backup
加 / 和不加 /
content
2.7.5 Get_url 模块
md5sum 可以检测文件是否有问题
2.7.6 Fetch 模块
2.7.7 File模块
2.7.8 state模块
2.7.9 unarchive 模块
copy=yes
copy=no
2.7.10 Archive模块
2.7.11 Hostname模块
2.7.12 Cron 模块
创建任务
删除任务
disabled=yes 不启用
2.7.13 Yum和 Apt 模块
yum 安装 httpd
yum 删除或卸载 httpd
2.7.14 yum_repository 模块
安装nginx
2.7.15 Service 模块
2.7.16 mount 挂载和卸载
2.7.17 User 模块
2.7.18 Group 模块
2.7.19 reboot模块
2.7.20 Lineinfile 模块
2.7.21 replace 模块
2.7.22 setup模块
主机相关信息
仅显示ipv4的信息
当前系统版本
一、Ansible 发展史及功能
作者:Michael DeHaan( Cobbler pxe kikstar 与 Func 作者)ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2012-03-09,发布0.0.1版,2015-10-17,Red Hat宣布1.5亿美元收购。
Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。
Ansible能批量配置、部署、管理上千台主机、比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。
官网:https://www.ansible/ 官方文档:https://docs.ansible/
1.1 Ansible 功能
-
批量执行远程命令,可以对远程的多台主机同时进行命令的执行
-
批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务
-
编排高级的企业级复杂的IT架构任务, Ansible的Playbook和role可以轻松实现大型的IT复杂架构
-
提供自动化运维工具的开发API, 有很多运维工具,如jumpserver(堡垒机)就是基于 ansible 实现自动化管理功能
Ansible是基于模块工作的,只是提供了一种运行框架,本身没有完成任务的能力,真正操作的是Anisble的模块。每个模块都是独立的、实现了批量系统配置、批量程序部署、批量运行命令等功能。
1.2 Ansible 特性
-
模块化:调用特定的模块完成特定任务,支持自定义模块,可使用任何编程语言写模块(账号,软件等)
-
Paramiko(python对ssh的实现),PyYAML,Jinja2(模板语言)三个关键模块
-
基于Python语言实现
-
部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖PKI(无需ssl)
-
安全,基于OpenSSH
-
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况,此特性非绝对
-
支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构 剧本演员要按照 系统按照你规定的方式去执行命令
-
较强大的多层解决方案 role
(1) Ansible是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是Ansible的模块
(2)ansible通常基于ssh连接来控制远程主机,远程主机上不需要安装Ansible或其它额外的服务
(3)Ansible的另一个比较鲜明的特性是它的绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是无论执行多少次同样的运算,结果都是相同的,即一条命令,任意多次执行所产生的影响均与一次执行的影响相同。比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做, 所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的。
Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让Ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。
1.3 Ansible 架构
1.3.1 Ansible组成
-
INVENTORY:Ansible管理主机的清单 /etc/ansible/hosts 需要管理的服务清单,(将你需要管理的主机 、地址 或者名字 写入此文件)
-
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
-
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
-
API:供第三方程序调用的应用程序编程接口
1.3.2 Ansible 命令执行来源
-
USER 普通用户,即SYSTEM ADMINISTRATOR
-
PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
-
CMDB(配置管理数据库) API 调用
-
PUBLIC/PRIVATE CLOUD API调用
1.3.3Ansible工作原理及流程
①加载自己的配置文件,默认/etc/ansible/ansible.cfg
②查找对应的主机的配置文件,找到要执行的主机或组/etc/ansible/hosts文件
③加载自己对应的模块文件,如command、yum、ping
④通过ansible将模块命令生成对应的临时py文件(类似python脚本),并将该文件传输至被管理端
⑤传输到在被控制端的对应用户的家目录下.ansible/tmp/xxx/xxx.py
⑥被控制端给传输过来的py文件加执行权限
⑦执行并返回结果,执行完成后删除py文件并sleep 0退出
二、Ansible
2.1安装
yum源安装
[root@zzzcentos1 ~]#systemctl stop firewalld
[root@zzzcentos1 ~]#setenforce 0
[root@zzzcentos1 ~]#yum install epel-release.noarch -y
[root@zzzcentos1 ~]#yum install ansible -y
编译安装
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
wget https://releases.ansible/ansible/ansible-1.5.4.tar.gz
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
Git方式
yum install git
git clone git://github/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
2.2查看基本信息
[root@zzzcentos1 ~]#ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
[root@zzzcentos1 ~]#
2.3相关文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,也可以在项目的目录中创建此文件,当前目录下如果也有ansible.cfg,则此文件优先生效,建议每个项目目录下,创建独有的ansible.cfg文 件
/etc/ansible/hosts 主机清单 (放了被管理的主机 修改的)
/etc/ansible/roles/ 存放角色的目录 (需要自己建)
树状图:
/etc/ansible/
├── ansible.cfg #ansible的配置文件,一般无需修改
├── hosts #ansible的主机清单,用于存储需要管理的远程主机的相关信息
└── roles/ #公共角色目录
2.4 ansible 主配置文件
Ansible 的配置文件可以放在多个不同地方,优先级从高到低顺序如下
ANSIBLE_CONFIG #环境变量,注意此项用 ansible --version 看不到,但可以生效
./ansible.cfg #当前目录下的ansible.cfg
~/.ansible.cfg #当前用户家目录下的.ansible.cfg
/etc/ansible/ansible.cfg #系统默认配置文件
[root@node1 yum.repos.d]#ansible --version 可以使用 来查看
Ansible 的默认配置文件 /etc/ansible/ansible.cfg ,其中大部分的配置内容无需进行修改
[defaults]
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp #本机的临时命令执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False #检查对应服务器的host_key,建议取消此行注释,实现第一次连接自动信任目标主机
#log_path=/var/log/ansible.log #日志文件,建议启用
#module_name = command 、mod #默认模块,可以修改为shell模块
[privilege_escalation] #普通用户提权配置
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
2.5 inventory 主机清单文件
ansible的主要功用在于批量主机操作,为了便捷地使用其中的部分主机,可以在inventory 主机清单文件中将其分组组织
默认的inventory file 位置在: /etc/ansible/hosts
官方文档: https://docs.ansible/ansible/latest/user_guide/intro_inventory.html
ansible_ssh_host
#将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.
ansible_ssh_port
#ssh端口号.如果不是默认的端口号,通过此变量设置.这种可以使用 ip:端口
192.168.1.100:2222
ansible_ssh_user
#默认的 ssh 用户名
ansible_ssh_pass
#ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)
ansible_sudo_pass
#sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)
ansible_sudo_exe (new in version 1.8)
#sudo 命令路径(适用于1.8及以上版本)
ansible_connection
#与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.
ansible_ssh_private_key_file
#ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.
ansible_shell_type
#目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为'csh' 或 'fish'.
ansible_python_interpreter
#目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python 不是 2.X 版本的Python.之所以不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).与ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....
示例:
[web]
192.168.91.101:666 #可以指定ssh端口非默认的端口
192.168.91.102
[server]
192.168.91.[100:105] #指定连续的主机
ansible不用启动,用的时候自动启动
组名可以自定义例如[web]
①ansible管理,不需要输入yes
修改使用ansible管理时,不需要输入yes的两种方式:
方法一:
[root@zzzcentos1 ~]#vim /etc/ssh/ssh_config 35 StrictHostKeyChecking no #ask改为no,不询问了
方法二:
[root@zzzcentos1 ~]#vim /etc/ansible/ansible.cfg 71 host_key_checking = False #取消此行注释
[root@zzzcentos1 ~]#ansible web -m ping -k
执行返回结果
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
②开启免密登录
ansible 默认使用 ssh 连接,所以管理前要免密登录
[root@zzzcentos1 ~]#ssh-keygen
[root@zzzcentos1 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.246.8
[root@zzzcentos1 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.246.9
③使用脚本免密登录
2.6Ansible相关工具
-
/usr/bin/ansible 主程序,临时命令执行工具
-
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具,相当于man ansible-doc -l |grep 关键字 具体模块名字
-
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
-
/usr/bin/ansible-pull 远程执行命令的工具
-
/usr/bin/ansible-vault 文件加密工具
-
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具
-
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
2.6.1 ansible
执行临时任务一次性任务
用法
ansible <host-pattern> [-m module_name] [-a args]
命令 主机或者清单中的组 -m 指定模块 -a 执行的任务
选项
--version #显示版本
-m module #指定模块,默认为command
-v #详细过程 -vv -vvv更详细
--list-hosts #显示主机列表,可简写 --list
-C, --check #检查,并不执行 (检查的是脚本,不是配置文件)
-T, --timeout=TIMEOUT #执行命令的超时时间,默认10s
-k, --ask-pass #提示输入ssh连接密码,默认Key验证
-u, --user=REMOTE_USER #执行远程执行的用户,默认root
-b, --become #代替旧版的sudo 切换
--become-user=USERNAME #指定sudo的runas用户,默认为root vim /etc/sudoers 用户权限
-K, --ask-become-pass #提示输入sudo时的口令
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
-v #详细过程 -vv -vvv更详细
去被管理的那两台主机看看
--list-hosts #显示主机列表,可简写 --list
[root@zzzcentos1 ~]#ansible web --list #看当前被管理的主机
[root@zzzcentos1 ~]#ansible all --list #看所有主机
[root@zzzcentos1 ~]#ansible 'web:nginx' --list-hosts
hosts (4):
192.168.246.8
192.168.246.9
192.168.246.10
192.168.246.11
[root@zzzcentos1 ~]#ansible "web:&nginx" --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):
[root@zzzcentos1 ~]#ansible 'web:!nginx' --list-hosts
hosts (2):
192.168.246.8
192.168.246.9
[root@zzzcentos1 ~]#
ansible 'kube*:etcd:!10.0.0.101' -a reboot && reboot
除了本机不重启,其他都要重启
-C, --check #检查脚本不是配置文件哦,并不执行
-k, --ask-pass #提示输入ssh连接密码,默认Key验证
(不推荐使用密码,用密钥更安全)
-f FORKS, --forks FORKS #指定并发同时执行ansible任务的主机数
如果你有一百台机器,就可以并行十台十台去执行
2.6.2 ansible-doc
ansible-doc 模块 #可以看模块的详细信息
[root@zzzcentos1 ~]#ansible-doc -l
[root@zzzcentos1 ~]#ansible-doc ping #该模块的详细信息
[root@zzzcentos1 ~]#ansible-doc -l |wc -l
3387
[root@zzzcentos1 ~]#ansible-doc -s ping
[root@zzzcentos1 ~]#ansible-doc file
#幂等性,安全性,自己写脚本 按q退出
2.6.3 ansible-console
#此工具可交互执行命令,支持tab,ansible 2.0+新增
提示符格式
执行用户@当前操作的主机组 (当前组的主机数量)[f:并发数]$
常用子命令:
设置并发数: forks n 例如: forks 10
切换组: cd 主机组 例如: cd web
列出当前组主机列表: list
列出所有的内置命令: ?或help
root@all (4)[f:5]$ cd web
root@web (2)[f:5]$
root@web (2)[f:5]$ forks 1
root@web (2)[f:1]$
[root@node1 ~]#ansible-console
Welcome to the ansible console.
Type help or ? to list commands.
root@all (4)[f:5]$ ping
#直接使用模块
2.6.4 playbook
此工具用于执行编写好的 playbook 任务
范例
ansible-playbook hello.yml
cat hello.yml
---
#hello world yml file
- hosts: websrvs
remote_user: root
gather_facts: no
tasks:
- name: hello world
command: /usr/bin/wall hello world
2.7 模块
常用模块帮助文档参考:
https://docs.ansible/ansible/2.9/modules/modules_by_category.html
https://docs.ansible/ansible/2.9/modules/list_of_all_modules.html
https://docs.ansible/ansible/latest/modules/list_of_all_modules.html
https://docs.ansible/ansible/latest/modules/modules_by_category.html
用法:
ansible <host-pattern> [-m module_name] [-a args]
命令 主机或者清单中的组 -m 指定模块 -a 执行的任务
2.7.1 Command 模块
command模块是ansible的默认模块
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现
< >(重定向) |(管道符) ;(并行执行) & (后台执行)
注意:此模块不具有幂等性
[root@zzzcentos1 ~]#ansible web -m command -a "cp /etc/passwd /data/"
验证:
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现
验证:
2.7.2shell模块
功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >
shell 可以用特殊符号,可以用的命令更多
注意:此模块不具有幂等性
在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)
ansible-doc -s shell
[root@zzzcentos1 ~]#ansible web -a "echo hahahaha > /data/test1"
192.168.246.9 | CHANGED | rc=0 >>
192.168.246.8 | CHANGED | rc=0 >>
[root@zzzcentos1 ~]#
验证:
[root@zzzcentos1 ~]#ansible web -m shell -a "ifconfig ens33|awk 'NR==2{print}'"
提取出ip地址行
shell模块的常用参数
chdir:在远程主机上运行命令的前提进入目录
creates: 判断指定文件是否存在 如果存在 不执行后面的操作
removes: 判断指定文件知否存在 如果存在 执行后面的操作
2.7.3 Script模块
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
[root@zzzcentos1 data]#ansible web -m script -a '/data/hello.sh'
验证:
2.7.4 copy模块
功能:从ansible服务器主控端复制文件到远程主机
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
关键字
src 代表源文件路径
dest 代表文件落地路径
owner 属主
group 属组
mode 代表权限
backup 如果复制时有同名文件会先备份再复制(源文件要有变动才会有备份)
[root@zzzcentos1 data]#ansible web -m copy -a "src=/etc/fstab dest=/mnt/ owner=lili mode=644"
检测:
常用参数:
mode:指出复制时,目标文件的权限
owner:指出复制时,目标文件的属主(对面无此组或此主会报错)
group:指出复制时,目标文件的属组
dest=‘路径’:目标文件路径
src=‘路径’:源文件路径
content=‘字符串内容’:将字符串内容复制到到目标文件中,等于重定向即覆盖,不能与src同用
[root@zzzcentos1 data]#ansible web -m copy -a "src=/data/hello.sh dest=/mnt/ owner=lili group=lili mode=644"
验证:
backup
如果复制时有同名文件会先备份再复制 (文件内容要发生改变才行)
[root@zzzcentos1 data]#ansible web -m copy -a "src=/data/hello.sh dest=/mnt/ owner=lili group=lili mode=644 backup=yes"
验证:
我们的hello.sh文件中的内容没有发生改变;所以复制到 7-2和7-3下,并没有备份
验证:
当我们修改了hello.sh文件中的内容后,复制时,会在7-2和7-3下备份的哦
加 / 和不加 /
ansible web -m copy -a "src=/etc dest=/backup"
ansible web -m copy -a "src=/etc/ dest=/backup"
不加 / etc会变成子目录,连etc一起复制,
加 / 只复制etc下的文件, 把etc文件夹改名成 backup
content
[root@zzzcentos1 data]#ansible web -m copy -a "content='test line1\ntest line2\n' dest=/opt/test.txt"
验证
2.7.5 Get_url 模块
功能: 用于将文件从http、https或ftp下载到被管理机节点上
常用参数如下
url: 下载文件的URL,支持HTTP,HTTPS或FTP协议
dest:下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner:指定属主
group:指定属组
mode:指定权限
force:如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
checksum:对目标文件在下载后计算摘要,以确保其完整性
url_username:用于HTTP基本认证的用户名。对于允许空密码的站点,此参数可以不使用`url_password'
url_password:用于HTTP基本认证的密码。如果未指定`url_username'参数,则不会使用`url_password'参数
validate_certs:如果“no”,SSL证书将不会被验证。适用于自签名证书在私有网站上使用
timeout: URL请求的超时时间,秒为单位
[root@zzzcentos1 data]#ansible web -m get_url -a "url=https://nginx/download/nginx-1.18.0.tar.gz dest=/data"
验证:
可以指定名称
验证:
md5sum 可以检测文件是否有问题
[root@zzzcentos2 data]#md5sum nginx-1.18.0.tar.gz (官网有md5sum值)
[root@zzzcentos2 data]#md5sum nginx-1.18.0.tar.gz b2d33d24d89b8b1f87ff5d251aa27eb8 nginx-1.18.0.tar.gz [root@zzzcentos2 data]#
2.7.6 Fetch 模块
功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
只能传文件;不支持文件夹;打包成压缩包就行,把客户端文件拷贝到ansible的主控端
不支持文件夹怎们办?打包成目录就可以了
[root@zzzcentos1 mnt]#ansible web -m fetch -a 'src=/etc/passwd dest=/mnt'
2.7.7 File模块
功能:设置文件属性,创建软链接等
path 指定文件路径
state 文件状态 有:新建(touch) 删除(absent) 文件夹(directory) 连接文件(link)等
src 源文件
mode 权限
owner 属主
group 属组
recurse 递归
[root@zzzcentos1 mnt]#ansible web -m file -a "path=/data/666 state=touch mode=644 owner=lili group=lili"
验证:
ansible web -m file -a 'path=/mnt/web.txt state=touch owner=zhangsan group=zhangsan mode=755'
#创建空文件
ansible web -m file -a 'path=/mnt/web state=directory'
#新建目录
ansible web -m file -a 'src=/mnt/web path=/opt/web-link state=link'
#新建软连接 path|dest|name 这三个选项都可以使用
ansible web -m file -a 'path=/opt/web-link state=absent'
#删除文件
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql recurse=yes"
#递归修改目录及子目录的属性
2.7.8 state模块
功能:检查文件或文件系统的状态
注意:对于Windows目标,请改用win_stat模块
选项
path:文件/对象的完整路径(必须)
常用的返回值判断:
exists: 判断是否存在
isuid: 调用用户的ID与所有者ID是否匹配
[root@zzzcentos1 mnt]#ansible web -m file -a "path=/mnt/aa state=directory"
验证:
删除
[root@zzzcentos1 mnt]#ansible web -m file -a "path=/mnt/aa/bb/cc state=absent"
验证:
给远程主机上创建一个软连接
[root@zzzcentos1 mnt]#ansible web -m file -a 'src=/opt/nihao path=/mnt/123.txt state=link'
验证:
#查看文件是否存在
验证
2.7.9 unarchive 模块
功能:解包解压缩
实现有两种用法:
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件
remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
src:源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
copy=yes
把本机压缩包解压到远程主机
加不加这个copy=yes;效果一样,默认是yes
[root@zzzcentos1 mnt]#ansible web -m unarchive -a "src=/mnt/all.tar.gz dest=/mnt"
验证:
copy=no
在ansible主机上配置:
[root@zzzcentos1 mnt]#ansible web -m unarchive -a "src=/data/nginx-1.18.0.tar.gz dest=/data copy=no"
验证:
2.7.10 Archive模块
功能:打包压缩保存在被管理节点,对远端主机进行压缩
常用的参数:
path: 必须参数,远程主机上需要被打包压缩的源文件/目录
dest: 打包压缩后的包文件路径(包文件的父目录必须存在);如果包文件已存在,则会被覆盖
format: 指定压缩类型,包括: bz2、gz(默认)、tar、xz、zip
remove=yes|no: 是否删除源文件
[root@zzzcentos1 mnt]#ansible web -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 owner=lili mode=0600'
验证:
解压后的这些文件是7-2自己的,因此是对远端主机进行压缩
2.7.11 Hostname模块
功能:管理主机名
修改被控制端的主机名
参数:name:指定被控端的主机名
ansible 192.168.91.102 -m hostname -a 'name=node3'
#一般不使用此模块,主机名会一致
2.7.12 Cron 模块
功能:计划任务
支持时间:minute,hour,day,month,weekday
#远程主机定义计划任务,2种状态present(添加)和absent(移除),默认为present。
常用参数:minute/hour/day/month/weekday:分/时/日/月/周
关键字:
job:任务计划要执行的命令
name:任务计划的名称
ansible-doc -s cron #查看模块常用的参数有哪些
创建任务
[root@zzzcentos1 mnt]#ansible 192.168.246.8 -m cron -a 'hour=*/2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
验证:
删除任务
[root@zzzcentos1 mnt]#ansible 192.168.246.8 -m cron -a 'name="backup mysql" state=absent'
验证:
disabled=yes 不启用
[root@zzzcentos1 ~]#ansible 192.168.246.8 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=yes'
验证:
disabled=no 启用
验证:
2.7.13 Yum和 Apt 模块
功能:yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本apt 模块管理 Debian 相关版本的软件包
在远程主机上安装与卸载软件包
ansible-doc -s yum
name参数: 必须参数,用于指定需要管理的软件包
state参数: 用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装,除了。present,其他可用值有 installed、 latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
disable_gpg_check参数: 用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在 对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo参数: 用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时 将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
disablerepo参数: 用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可 以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。
enablerepo 参数和 disablerepo 参数可以同时使用
name 所安装的包的名称
state present--->安装, latest--->安装最新的, absent---> 卸载软件。
update_cache 强制更新yum的缓存
conf_file 指定远程yum安装时所依赖的配置文件(安装本地已有的包)。
disable_pgp_check 是否禁止GPG checking,只用于presentor latest。
disablerepo 临时禁止使用yum库。 只用于安装或更新时。
enablerepo 临时使用的yum库。只用于安装或更新时
yum 安装 httpd
[root@zzzcentos1 ~]#ansible web -m yum -a 'name=httpd state=present'
验证:
yum 删除或卸载 httpd
[root@zzzcentos1 ~]#ansible web -m yum -a 'name=httpd state=absent'
验证
2.7.14 yum_repository 模块
功能:建立yum仓库模块
name参数: 必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
baseurl参数: 此参数用于设置 yum 仓库的 baseurl。
description参数: 此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
file参数: 此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作 为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。
enabled参数: 此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数: 此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能。
gpgcakey参数: 当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。
state参数: 默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
[root@zzzcentos1 ~]#ansible web -m yum_repository -a 'name=epel description=epel baseurl=https://download.fedoraproject/pub/epel/$releasever/$basearch/ gpgcheck=no file=epel'
[root@zzzcentos1 ~]#ansible web -m yum -a 'name=nginx state=present enablerepo=epel'
安装nginx
验证:
2.7.15 Service 模块
功能:管理远程被控制主机上的管理服务的运行状态
常用参数
name=“名称” :管理的服务名称
enable=true/false 设置服务开机自启或关闭
state=start/stop/restart 设置服务的状态 为开始/关闭/重启
enable=yes/no 设置是否开机自启;runlevel:若设置开机自启则要设置在那些系统等级使用
ansible web -m service -a 'name=httpd state=started enabled=yes'
#管理httpd服务 让其开机启动
ansible web -m service -a 'name=httpd state=stopped'
#管理httpd服务 让其停止服务
ansible web -m service -a 'name=httpd state=reloaded'
#管理httpd服务 让其重新加载配置
ansible web -m service -a 'name=httpd state=restarted'
#管理httpd服务 让其重启
[root@zzzcentos1 ~]#ansible web -m service -a 'name=nginx state=started enabled=yes'
验证:
2.7.16 mount 挂载和卸载
功能: 挂载和卸载文件系统
常用参数:
src:定义挂载设备的路径
path:定义挂载到哪个目录,必须指定
fstype:指定挂载文件的系统类型,必须指定,xfs、iso9660、nfs...
opts:定义挂载的参数,defaults、rw、ro...
state:定义挂载的状态,mounted(进行挂载,修改/etc/fstab信息)、absent(永久性卸载,并修改 /etc/fstab信息)、unmounted(临时卸载,不修改/etc/fstab信息)
[root@zzzcentos1 ~]#ansible web -a 'blkid'
例子:
#临时挂载
mount websrvs -m mount -a 'src="UUID=b3e48f45-f933-4c8e-a700-22a159ec9077" path=/home fstype=xfs opts=noatime state=present'
#临时取消挂载
mount websrvs -m mount -a 'path=/home fstype=xfs opts=noatime state=unmounted'
#永久挂载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads opts="_netdev" state=mounted'
#永久卸载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads state=absent'
2.7.17 User 模块
功能:管理用户,在远程主机设管理用户账户
comment 用户的描述信息
createhome 是否创建家目录
force 在使用state=absent时, 行为与userdel –force一致.
group 指定基本组
groups 指定附加组,如果指定为(groups=)表示删除所有组
home 指定用户家目录
move_home 如果设置为home=时, 试图将用户主目录移动到指定的目录
name 指定用户名
non_unique 该选项允许改变非唯一的用户ID值
password 指定用户密码,使用 SHA512 hash
remove 在使用state=absent时, 行为是与userdel –remove一致
shell 指定默认shell
state 设置帐号状态,不指定为创建,指定值为absent表示删除
system 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid 指定用户的uid
update_ password
always 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always
on_create 如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定
常用的参数有:
name: 表示用户名 必选的参数
state=present 或 absent 表示创建账号或者删除账号 present表示创建 absent表示删除
system=yes或no 表示是否为系统账号
uid:表示用户uid
group:用户基本组
groups:用户附加组
shell:默认的shell
create_home=yes或no 表示是否创建家目录
password 用户的密码 建议使用加密后的字符串
remove为yes或no 当state为absent的时候 是否删除用户的家目录
[root@zzzcentos1 ~]#ansible web -m user -a 'name=httpd create_home=no shell=/sbin/nologin'
#创建httpd系统用户 并不创建家目录 以及shell类型为不登陆
验证:
[root@zzzcentos1 ~]#ansible web -m user -a 'name=lisi groups=wheel uid=1008'
创建lisi用户 其uid为1008 加入wheel组中
验证:
2.7.18 Group 模块
功能:管理组
范例
#创建组
ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
#删除组
ansible websrvs -m group -a 'name=nginx state=absent'
创建组
[root@zzzcentos1 ~]#ansible web -m group -a 'name=nihao gid=88 system=yes'
验证:
- 使用命令"cat /etc/group"来查看所有用户组的信息。
- 使用命令"getent group"来查看所有用户组的信息。
2.7.19 reboot模块
[root@ansible ~]#ansible web -m reboot
2.7.20 Lineinfile 模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。
其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
如果想进行多行匹配进行替换需要使用replace模块
功能:相当于sed,可以修改文件内容
关键字:
path 指定要操作的文件
regexp 使用正则表达式匹配对应的行
line 修改为新的内容
insertafter 将文本插入到“指定的行”之后
insertbefore 将文本插入到“指定的行”之前
state 删除对应的文本时,需要state=absent
backrefs 1.支持后向引用、2.当未匹配到内容则不操作文件
backup 是否在修改文件之前对文件进行备份
create 当要操作的文件并不存在时,是否创建对应的文件
将远端主机/etc/fstab 中 所有#开头的行全部删除
[root@zzzcentos1 ~]#ansible web -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'
验证:
示例:
[root@zzzcentos1 ~]#ansible web -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'"
#将/etc/httpd/conf/httpd.conf 中以Listen开头的行 修改为Listen 80
[root@zzzcentos1 ~]#ansible web -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"
#将远端主机/etc/selinux/config配置文件中 以Selinux开头的行 更改为SELINUX=disabled
2.7.21 replace 模块
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
[root@zzzcentos1 ~]#ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"
验证:
2.7.22 setup模块
功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度
可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息
范例:会对你有用哦,查询信息
ansible all -m setup
ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_uptime_seconds"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter=ansible_env'
主机相关信息
仅显示ipv4的信息
当前系统版本
版权声明:本文标题:自动化运维工具 ---------------Ansible 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726333357h938952.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论