深入浅出Ansiable

news2025/1/20 5:49:09

目录

Ansible的起源

Ansible的发展史

Ansible的功能

Ansible的特性

Ansible的架构

Ansible的注意事项

Ansible入门

Ansible的安装

Ansible配置文件

配置文件解析

inventory主机配置清单

Ansible相关工具

Ansible的常用模块

Command模块

shell模块

Script模块

Copy模块

Fetch模块

File模块

Yum和Apt模块

service模块

User模块

Group模块

Setup模块

Playbook

playbook介绍

三种常见的数据格式

playbook核心组件

Hosts组件

remote_user组件

task列表和action组件


Ansible的起源

Ansible的发展史

ansible的名称来源于科幻小说《安德的游戏》中跨越时空的即时通讯工具,可以在相距数光年的距离,远程实时控制前线舰队战斗。
于2012年3月9日发布0.0.1版,2015年10月17日,Red Hat宣布以1.5亿美元收购

Ansible的功能

批量执行远程命令,可以对远程的多台主机同时进行命令的执行
批量安装和配置软件服务,可以对远程多台主机进行自动化方式配置和管理各 种服务
编排高级的企业复杂的IT架构任务,Ansible的Playbook和role可以轻松实现大型 的IT复杂架构
提供自动化运维工具的开发API,有很多运维工具,如jumpserver就是基于 ansible实现自动化管理

Ansible的特性

基于Python语言实现
  
模块化:调用特定模块完成特定任务,支持自定义模块,可使用任意编程语言 编写模块
部署简单:基于python和ssh,agentless,无需代理不依赖PKI(无需ssl)
安全,基于OpenSSH
幂等性:一个任务执行一遍和执行n遍效果一样,不因重复执行带来意外情况, 此特性非绝对
支持playbook编排任务, YAML格式,编排任务,支持丰富的数据结构 较强大的多层解决方案role

Ansible的架构

组合INVENTORY、API、MODULES、PLUGINS,为ansible命令工具,其为核心执行工具
INVENTORY: Ansible管理主机的清单,一般默认路径为 /etc/ansible/hosts
MODULES: Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS: 模块功能的补充,如连接类型插件,循环插件,变量插件,过滤插 件等
API: 供第三方程序调用的应用程序编程接口

Ansible的注意事项

执行ansible的主机一般称为管理端,主控端,中控,master或堡垒机 
主控端Python版本需要2.6及以上
被控端Python版本小于2.4,需要安装python-simplejson
被控端如开启SELinux,需要安装libselinux-python
windows不能作为主控端

Ansible入门

Ansible的安装

官方文档
https: docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-specific-operating-systems
3.1.1下载
下载地址:https: releases.ansible.com/ansible/
pip下载: https: pypi.org/project/ansible/

包安装:要先安装epel源
yum install -y ansible
查看ansible版本
yum info ansible

pip安装
yum install -y python-pip
pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com # 可以忽略
pip install ansible --upgrade -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

确认安装
ansible --version

Ansible配置文件

/etc/ansible/ansible.cfg ansible主配置文件,配置ansible工作特性
/etc/ansible/hosts  主机清单文件,注意:不是/etc/hosts文件
/etc/ansible/roles 角色存放目录

配置文件解析

#host_key_checking = False 推荐取消注释,实现第一次连接自动信任目标主机

inventory主机配置清单

默认inventory_file为/etc/ansible/hosts
inventory_file 可以有多个,也可以通过Dynamic Inventory动态生成 
建议生产环境中,在每个项目的目录下创建独立的hosts文件

# Inventory参数说明
ansible_ssh_host # 将要连接的远程主机名,与想要设定的主机别名 不同时,可以通过此变量设置
ansible_ssh_port # 远程主机ssh端口,如果不是默认端口号,可以 通过此变量设置,如:ip:port(xxx.xxx.xxx.xxx:2222)
ansible_ssh_user
ansible_ssh_pass
行 ask-pass 参数或 ssh密钥形式) ansible_sudo_pass
sudo-pass 参数)
ansible_sudo_exe
ansible_connection
paramiko.
ansible_ssh_provate_key_file ansible_shell_type
为 csh 或 fish ansible_python_interpreter 个python环境,或路径不是/usr/bin/python情况
# 默认ssh用户名
# ssh密码(不推荐,此方法不安全,可以使用命令
# sudo密码(不推荐, 建议使用命令行 ask- # sudo命令路径(适用于1.8及以上版本)
# 与主机连接类型,如: local,ssh 或 # ssh使用的私钥,适用于多个密钥
# 目标系统shell类型,默认使用 sh ,可以设置 # 目标主机python路径,适用情况:系统中存在多

Ansible相关工具

/usr/bin/ansible  主程序,命令行执行工具
/usr/bin/ansible-doc  查看配置文档,模块功能查看工具,相当于man
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具,相当于脚本
/usr/bin/ansible-vault  文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具s

Ansible的常用模块

Command模块

功能:在远程主机执行命令,此为默认模块,可忽略 “-m” 选项 
此命令不支持 $VARNAME<>|;&等,可以用shell模块实现 
此命令不具有幂等性

shell模块

功能:和command类似 
支持各种符号,如 $VARNAME<>|;&等 
不具有幂等性
示例:
ansible websrvs -m shell -a 'echo $HOSTNAME'
ansible all -m shell -a 
注意事项:调用bash执行复杂命令,shell模块也可能会调用失败 
解决办法:将复杂命令写入脚本,copy至远程服务器,执行完成后,返回执行

Script模块

功能:再远程主机上运行ansible服务器上的脚本(无需执行权限) 
不具有幂等性
ansible websrvs -m script -a /tmp/test.sh

Copy模块

功能:从ansible服务器主控端复制文件到远程主机
注意:src=file 如果没有指明路径,则为当前目录或当前目录下的files目录下的 file文件
# 如果目标存在,默认为覆盖,可以指定为备份
$ ansible websrvs -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=admin mode=600 backup=yes"
# 指定内容,直接生成目标
$ ansible websrvs -m copy -a "content='test line1\ntest line2\n' dest=/tmp/test.txt"
# 复制/etc目录自身,注意/etc后面不带/
$ ansible websrvs -m copy -a "src=/etc dest=/backup"
# 复制/etc下文件,不包括/etc自身,注意/etc后面带/
$ ansible websrvs -m copy -a "src=/etc/ dest=/backup"

Fetch模块

功能:从远程主机提取文件至ansible主控端,与copy相反,暂不支持目录
$ ansible websrvs -m fetch -a "src=/root/test.sh dest=/data/scripts"
$ ansible websrvs -m fetch -a "src=/etc/redhat-release dest=/data/os"

File模块

功能:设置文件属性,创建软链接等

# 创建空文件
$ ansible all -m file -a 'path=/data/test.txt state=touch' 
$ ansible all -m file -a 'path=/data/test.txt state=absent' 
$ ansible all -m file -a 'path=/root/test.sh owner=admin mode=755'
# 创建目录
$ ansible all -m file -a 'path=/data/mysql state=directory'
# 创建软链接
$ ansible all -m file -a 'src=/data/testfile dest=/data/testfile-link state=link'
# 递归修改目录属性,但不递归至子目录
$ ansible all -m file -a 'path=/data/mysql state=directory owner=mysql group=mysql'= chown
# 递归修改目录及子目录属性
$ ansible all -m file -a 'path=/data/mysql state=directory owner=mysql group=mysql recurse=yes' = chown -R

Yum和Apt模块

功能:yum管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其他版本;
apt模块管理Debian相关版本的软件包
# 安装软件包
$ ansible websrvs -m yum -a 'name=httpd state=present'
# 启用epel源安装软件包
$ ansible websrvs -m yum -a 'name=nginx state=present enablerepo=epel'
# 升级除kernel和foo开头外的所有包
$ ansible websrvs -m yum -a 'name=* state=lastest exclude=kernel*,foo*'
# 删除(卸载)
$ ansible websrvs -m yum -a 'name=httpd state=absent'
# 查看包
$ ansible websrvs -m yum -a 'list=tree'

service模块

功能:管理服务
# 启动服务,并设置开机启动
$ ansible all -m service -a 'name=httpd state=started enabled=yes'
# 停止服务
$ ansible all -m service -a 'name=httpd state=stopped'
# 重载服务
$ ansible all -m service -a 'name=httpd state=reloaded'
# 重启服务
$ ansible all -m service -a 'name=httpd state=restarted'

User模块

# 创建用户
$ ansible all -m user -a 'name=user1 comment="test user" uid=2000 home=/app/user1 group=root'
$ ansible all -m user -a 'name=nginx comment=nginx uid=1000
group=nginx groups="root,daemon" shell=/sbin/nologin system=yes
create_home=no home=/data/nginx non_unique=yes'
# 删除用户及其家目录
$ ansible all -m user -a 'name=nginx state=absent remove=yes'

Group模块

功能:管理用户组
# 创建组
$ ansible websrvs -m group -a 'name=nginx gid=1000 system=yes'
# 删除组
$ ansible websrvs -m group -a 'name=nginx state=absent'

Setup模块

功能:setup模块用来收集主机系统信息,这些facts信息可以直接以变量形式使用,但如果主机较多,会影响执行速度,可以使用gather_facts: no禁止ansible收集信息
$ 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"
# 获取所有IP地址
$ ansible all -m setup -a "filter=ansible_all_ipv4_addtrsses"
$ 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"

Playbook

playbook介绍

playbook剧本是由一个或多个“play”组成的列表 play的主要功能在于将预定义的一组主机,装扮成事先过ansible中的task定义好的角色

task是调用ansible的一个模块,将多个play组织再一个playbook中,即可以联合 起来,按事先编排好的机制执行预定义的动作

playbook文件采用YAML语言编写

三种常见的数据格式

XML:Extensible Markup Language,可扩展标记语言,可用于数据交换和配置 
JSON:JavaScript Object Notation,JavaScript对象标记法,主要用来数据交换或配置,不支持注释
YAML:YAML Ain't Markup Language,YAML不是一种标记语言,主要用来配置,大小写敏感,不支持tab

可以用工具相互转换,参考网站:
https: www.json2yaml.com/
https: www.bejson.com/json/json2yaml/

playbook核心组件

一个playbook中由多个组件组成,其中所用到的常见组件类型如下: Hosts:执行的远程主机列表
Tasks:任务集,由多个task远程组成的列表,每个task都是一个字典,一个完整 的代码块功能需最少元素包括name和task,一个name只能有一个task
Variables:内置变量或自定义变量在playbook中调用 Templates:模板,可替换模板文件中的变量并实现一些简单逻辑文件 Hnadlers和notify结合使用,由特定条件触发的操作,满足条件方可执行
Tags:标签,指定某条任务执行,用于选择运行playbook中的部分代码。ansible 具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试器 确实没有发生变化的时候,依然会非常的长,此时,如果确信其没有变化,就 可以通过tags跳过这些代码片段

Hosts组件

playbook中的每个play的目的都是为了让特定主机以某个指定用户身份执行任务
hosts主要用于指定要执行的任务主机,须事先定义在主机清单中
示例:
- hosts: websrvs
- hosts: 192.168.0.21
- hosts: websrvs:appsrvs # 两个组的并集
- hosts: websrvs:&appsrvs # 两个组的交集
- hosts: websrvs:!appsrvs # 在websrvs组中,但不在appsrvs中

remote_user组件

可用于Host和Task中,也可以通过指定其通过sudo方式在远程主机上执行任
务,其可用于play全局或某个任务中 可以在sudo时使用sudo_user指定sudo时切换的用户,默认为root 
示例:
- hosts: websrvs
  remote_user: root
  tasks:
    - name: test connection
      ping:
      remote_user: admin
      sudo: yes
      sudo_user: yuan
      # become: yes
      # become_user: yuan

task列表和action组件

play主体部分是task list,task list有一个或多个task,每个task按次序逐个在hosts 中指定的所有主机上执行,即在所有主机上执行完一个task后,再执行下一个 task
task的目的是使用指定的参数执行模块,再模块参数中可以使用变量。模块执行 为幂等的,意味着多次执行是安全的,其结果一致
每个task都应该有其name,用于playbook执行结果输出,建议其内容能够清晰描 述任务执行步骤,如果没有提供name,则action的结果将用于输出
task两种格式:
 action: module arguments #示例: ac
示例1:

- hosts: websrvs
remote_user: root
gather_facts: no # 不收集系统信息,提高执行效率
  tasks:
    - name: test network connection
      ping:
    - name: excute command
      command: wall "hello world!"

Playbook命令

ansible-playbook <filename.yaml> [options] 常见选项:
--syntax-check -C, --check
作,dry run
--list-hosts
--list-tags
--list-tasks
--limit 主机列表
-i INVENTORY
语法检查,可缩写为--syntax,相当于bash -n 模拟执行,只检测可能会发生的变化,但不真正执行操
列出运行任务的主机 列出tag
列出task 只针对主机列表中的特定主机执行
 指定主机清单文件,通常一个项对应一个主机清单文件
--start-at-task START_AT_TASK 从指定的task开始执行任务,而不是从开
头开始,START_AT_TASK 为任务名称
-v, -vv, -vvv 显示具体执行过程,详细程度根据-v数量变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows 电脑查看 WiFi 密码的方法都有哪些?

从设置面板中查看 当你使用的是笔记本电脑并且连接 WiFi 之后可以在设置面板中查看 WiFi 密码&#xff0c;首先打开设置界面&#xff0c;然后点击网络和 Internet&#xff0c;找到 WiFi 之后点击进入&#xff0c;然后点击管理已知网络。 然后点击已经连接好的无线网络。 进入之…

快速导入mysql百万用户数据

1. 前言 随着互联网的发展,大数据已经是很普遍的一个现象,已不再是零几年时的神话。数据资源意为着就是信息资源,很好的使用起来说是财富资源一点也不夸张.所以无论当下是小的还是大的互联网公司都会遇到大数的情况。只不过不同的业务逻辑需求与使用情况不一样罢了。 大数据我…

git为文件添加可执行权限

查看文件权限 git ls-files --stage .\SecretFinder.py100644 表示文件的所有者有读取和写入权限 添加可执行权限 git update-index --chmod x .\SecretFinder.py再次查看文件权限 git ls-files --stage .\SecretFinder.py100755 表示文件的所有者有读取、写入和执行权限

安卓逆向经典案例——XX优品(uniapp)

uni-app逆向 uniapp的目录结构 有一个io文件夹&#xff0c;下面有dcloud uniapp UniApp 可以用于开发 H5 应用&#xff0c;但它不仅仅局限于 H5 应用。UniApp 的特点包括&#xff1a; 1. 跨平台&#xff1a;可以一套代码同时生成适用于多个平台&#xff08;如 iOS、Android、…

STM32杂交版(HAL库、音乐盒、闹钟、点阵屏、温湿度)

一、设计描述 本设计精心构建了一个以STM32MP157A高性能单片机为核心控制单元的综合性嵌入式系统。该系统巧妙融合了蜂鸣器、数码管显示器、点阵屏、温湿度传感器、LED指示灯以及按键等多种外设模块&#xff0c;形成了一个功能丰富、操作便捷的杂交版智能设备。通过串口…

Linux C语言基础 day9

目录 思维导图 学习目标&#xff1a; 学习内容&#xff1a; 1. 值传递与地址传递&#xff08;非常重要&#xff09; 1.1 值传递 1.2 地址传递 2. 递归函数 2.1 递归的概念 2.2 递归条件 2.3 递归思想 3. 指针 3.1 指针相关概念 3.2 指针变量的定义 3.2.1. 定义格…

初识MVVM分层思想——05

1.MVVM是什么&#xff1f; M &#xff1a;model&#xff08;模型/数据&#xff09; V : view&#xff08;试图&#xff09; VM &#xff1a;ViewModel &#xff08;试图模型&#xff09; &#xff1a; VM 是MVVM 中的核心部分。&#xff08;它起到一个核心的非常重要的作用&…

mac下mysql无法登陆的问题

用如下命令登录出现错误。 sudo mysql.server start解决方案 使用如下命令登录 sudo /usr/local/MySQL/support-files/mysql.server start

【C++基础】初识C++(1)

目录 一、认识C 1.1 C 相关概念 1.2 C的发展 1.3 C的关键字 1.4 第一个程序 二、命名空间 2.1 namespace的定义 2.2 命名空间的使用 三、C输入和输出 四、缺省函数 五、函数重载 一、认识C 1.1 C 相关概念 1983年&#xff0c;Bjarne Stroustrup在C语⾔的基础上…

Python 视频的色彩转换

这篇教学会介绍使用OpenCV 的cvtcolor() 方法&#xff0c;将视频的色彩模型从RGB 转换为灰阶、HLS、HSV...等。 因为程式中的OpenCV 会需要使用镜头或GPU&#xff0c;所以请使用本机环境( 参考&#xff1a;使用Python 虚拟环境) 或使用Anaconda Jupyter 进行实作( 参考&#x…

BMS电池管理系统 — 1 什么是BMS

目录 1 储能系统组成 1.1 储能电池结构 1.2 储能集装箱组成 2 BMS系统组成 3 BMS功能 3.1 SOC荷电状态估计 3.2 SOH估计 3.3 主动均衡与被动均衡 3.4 电池热管理 4 BMS架构 4.1 集中式BMS 4.2 分布式BMS 参考论文 1 储能系统组成 1.1 储能电池结构 电芯&#xf…

docker(六)--创建镜像

六、创建镜像 1.创建镜像两种方式 方式1&#xff1a; 更新镜像 docker commit 方式2&#xff1a;构建镜像 docker build 2.更新镜像 1&#xff09;用法 docker commit -m“描述信息” -a作者 容器id或者容器名 镜像名:tag 2&#xff09;步骤 ①根据镜像运行容器 ②进入容…

PHP将两张图片合成一张图片代码实例(源代码)

使用PHP将两张图片合成一张图片可以通过GD库来实现。下面是一个示例代码&#xff0c;展示如何将两张图片合成一张图片&#xff1a; 加载两张图片。获取每张图片的宽度和高度。创建一个新的空白图片&#xff0c;其宽度是两张图片宽度的和&#xff0c;高度是两张图片中较大的高度…

酒店民宿小程序:酒店民宿便利预订,提高收益!

在旅游业发展旺盛时期&#xff0c;酒店民宿也得到了快速发展。随着移动互联网的发展&#xff0c;人们逐渐在手机上预订酒店民宿&#xff0c;这给酒店民宿小程序的发展提供了用户基础&#xff0c;为大众出行带来了更多的便利。 酒店民宿小程序是一个基于微信平台的应用程序&…

PHP计件工资系统小程序源码

解锁高效管理新姿势&#xff01;全面了解计件工资系统 &#x1f525; 开篇&#xff1a;为什么计件工资系统成为企业新宠&#xff1f; 在这个效率至上的时代&#xff0c;企业如何精准激励员工&#xff0c;提升生产力成为了一大挑战。计件工资系统应运而生&#xff0c;它以其公…

Python大数据分析——K近邻模型(KNN)

Python大数据分析——K近邻模型 数学部分模型思想模型步骤距离度量指标欧氏距离曼哈顿距离余弦相似度 K值选择 代码部分函数示例1——知识掌握程度示例2——预测发电量 数学部分 模型思想 如图所示&#xff0c;模型的本质就是寻找k个最近样本&#xff0c;然后基于最近样本做“…

qml 实现一个带动画的switch 按钮

一.效果图 》 二.qml 代码 import QtQuick 2.12 import QtQuick.Controls 2.12Switch {id: controlimplicitWidth: 42implicitHeight: 20indicator: Rectangle {id: bkRectangleanchors.fill: parentx: control.leftPaddingy: parent.height / 2 - height / 2radius: height …

C语言有哪些特点?

C语言是一种结构化语言&#xff0c;它有着清晰的层次&#xff0c;可按照模块的方式对程序进行编写&#xff0c;十分有利于程序的调试&#xff0c;且c语言的处理和表现能力都非常的强大&#xff0c;依靠非常全面的运算符和多样的数据类型&#xff0c;可以轻易完成各种数据结构的…

Linux系统日志管理服务和配置

文章目录 Linux系统日志服务rsyslog日志分类rsyslog相关文件/var/log/message重启失败分析 /var/log/secure自定义日志输出路径1.修改sshd_config配置文件2.修改rsyslog.conf3.重启服务 常见日志文件日志管理工具journalctl选项说明journalctl用法示例 日志分析实战host无法解析…

qt creator中右边的的类和对象如何显示出来

qt creator中右边的的类和对象如何显示出来&#xff1f; 解决方法&#xff1a; 鼠标右键&#xff0c;重置为默认布局。