4.Ansible Inventory介绍及实战 - A list or group of lists nodes

news2024/11/30 9:28:41
  1. 什么是inventory
    官方解释:Ansible automates tasks on managed nodes or “hosts” in your infrastructure, using a list or group of lists known as inventory.
    在这里插入图片描述
    Ansible可以同时与您基础设施中的一个或多个系统协同工作。为了与多台服务器协同工作, Ansible需要与这些服务器建立连接。这是通过使用SSH(适用于Linux)和PowerShell远程处理(适用于Windows)来完成的。 这就是Ansible无代理的原因。无代理意味着您不需要在目标机器上安装任何额外的软件,就可以使用Ansible。一个简单的SSH连接就能满足Ansible的需求。
    大多数其他编排工具的主要缺点之一是,在调用任何类型的自动化之前, 都需要在目标系统上配置代理。现在, 有关这些目标系统的信息存储在inventory文件中。如果您不创建新的inventory文件,Ansible将使用位于etc/Ansible/hosts位置的默认库存文件。

    让我们看一个示例Inventory文件。它只是一个接一个地列出了许多服务器,是ini格式的。您还可以将不同的服务器分组在一起,方法是在方括号内的组名下定义服务器,并在下面的行中定义属于该组的服务器列表。可以在单个Inventory文件中定义多个组。
    在这里插入图片描述
    让我们仔细看看Inventory文件。例如, 我有一个服务器列表,名称从14。但是, 我想在Ansible中使用别名(如Web服务器或数据库服务器)来引用这些服务器。我可以通过在行首添加每个服务器的别名,并将该服务器的地址分配给Ansibleansible_host参数来实现这一点。ansible_host是一个inventory参数, 用于指定服务器的域名或IP地址。在这里插入图片描述
    还有其他参数。
    在这里插入图片描述
    其中包括ansible_connection, ansible_port, ansible_useransible_ssh_pass

    1. ansible_connection: 定义了Ansible连接到目标服务器的方式。这是到Linux服务器的ssh连接或者到Windows服务器的winrm。这就是我们定义要连接的目标主机是Linux主机还是Windows主机的方式。
      您也可以将其设置为localhost,以表示我们希望使用本地主机,而不连接到任何远程主机。如果您没有多个服务器可供使用, 则可以简单地从清单文件中的本地主机开始。
    2. ansible_port:定义要连接的端口。默认情况下, 它被设置为SSH的端口22,但如果您需要更改, 您可以使用这个参数进行不同设置。
    3. ansible_user: 定义用于进行远程连接的用户。默认情况下,对于Linux计算机, 设置为root。果需要更改此设置, 可以用这个参数。
    4. ansible_ssh_pass: 定义了Linuxssh密码。请注意, 以这种纯文本格式存储密码可能不是很理想。最佳实践是在服务器之间设置基于SSH密钥的无密码身份验证,并且您绝对应该在生产或公司环境中这样做。 如果是windows,使用ansible_password
      但现在, 我们想从Ansible的基本知识开始,而不想过多地讨论安全性或其他主题。因此, 首先, 我们将从用户名和密码的基本设置开始。
  2. inventory实战
    1)打开宿主机mac上的terminalssh进入到ansiblecontroller,然后通过vim命令创建一个inventory.txt文件,写入如下的配置。这里指定了target1作为别名,可以在Ansible中用别名来访问这台虚拟机;同时指定了ssh连接的密码(通常公司的系统上不推荐使用这种方式,应该用ssh key,实现无密码访问)
    在这里插入图片描述
    2)使用Ansible使用ping测试controllertarget1是否能连通,同时带上inventory配置文件

    ansible target1 -m ping -i inventory.txt
    

    幸运的是,你可能会遇到下面这个错误:

    target1 | FAILED! => {
    "msg": "Using a SSH password instead of a key is not possible
     because Host Key checking is enabled and sshpass does
     not support this.  Please add this host's fingerprint to your
     known_hosts file to manage this host."
    }
    

    在这里插入图片描述
    解决方式有两种:

    1. ansible-controller手动ssh连接到ansible-target1,然后手动接受fingerprint
      在这里插入图片描述
    2. ansible-controller的配置文件/etc/ansible/ansible.cfg,并且搜host key,将host_key_checking标记为False,默认是true。(不推荐这样干)
      # uncomment this to disable SSH key host checking
      #host_key_checking = False
      
  1. 接受fingerprint完成之后,继续使用ansible target1 -m ping -i inventory.txt测试连通性
    很幸运的是,又可能又会遇到下面这个错误:
    一般是因为指定的inventory文件路径不对,-i读取的是当前所在路径下的inventory.txt,也就是/etc/ansible/inventory.txt,实际上我们创建的inventory.txt是在用户目录。

    [osboxes@ansiblecontroller ansible]$ ansible target1 -m ping -i inventory.txt
    [WARNING]: Unable to parse /etc/ansible/inventory.txt as an inventory source
    [WARNING]: No inventory was parsed, only implicit localhost is available
    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    [WARNING]: Could not match supplied host pattern, ignoring: target1
    

    cd ~,然后再跑上面的ansible命令,看见下面类似的返回,就表示成功了

    [osboxes@ansiblecontroller ~]$ ansible target1 -m ping -i inventory.txt
    target1 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    
  1. 最后给一个完整的inventory例子,包含group的用法:

    # Sample Inventory File
    
    # Web Servers
    web_node1 ansible_host=web01.xyz.com ansible_connection=winrm ansible_user=administrator ansible_password=Win$Pass
    web_node2 ansible_host=web02.xyz.com ansible_connection=winrm ansible_user=administrator ansible_password=Win$Pass
    web_node3 ansible_host=web03.xyz.com ansible_connection=winrm ansible_user=administrator ansible_password=Win$Pass
    
    # DB Servers
    sql_db1 ansible_host=sql01.xyz.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Lin$Pass
    sql_db2 ansible_host=sql02.xyz.com ansible_connection=ssh ansible_user=root ansible_ssh_pass=Lin$Pass
    
    [db_nodes]
    sql_db1
    sql_db2
    
    [web_nodes]
    web_node1
    web_node2
    web_node3
    
    [boston_nodes]
    sql_db1
    web_node1
    
    [dallas_nodes]
    sql_db2
    web_node2
    web_node3
    

    更多关于Ansible的文章,请参考我的Ansible专栏:https://blog.csdn.net/u011069294/category_12331290.html

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

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

相关文章

音视频学习:同步原理及实现

1.音视频同步简单介绍 对于一个播放器,一般来说,其基本构成均可划分为以下几部分: 数据接收(网络/本地)->解复用->音视频解码->音视频同步->音视频输出。 基本框架如下图所示: 为什么需要音视…

Python学习之批量word文档转pdf并统计其页码

pypdf2是一个Python模块,可以用来读取、写入和操作PDF文件。要安装pypdf2模块,请按照以下步骤操作: 确保你已经安装了Python。你可以在终端或命令提示符中输入python --version来检查Python是否已安装。 pypdf2模块的安装: Modu…

【2023年电工杯数学建模竞赛B题人工智能对大学生学习影响的评价】完整思路分析+完整代码

1.问题背景与描述 这道题整体还是相对简单的,比较适合新手,选的人多对应获奖数量也会多,所以不要纠结于选题,就选你看上去能做的就好 2.问题分析 2.1 问题一的分析 对附件2中所给数据进行分析和数值化处理,并给出处…

GitHub标星11.9k兼职项目!基于SpringBoot + VUE电商-分销商城系统(附源码)

商城介绍 商城系统支持商家入驻,后端基于SpringBoot 研发,前端使用 Vue、uniapp开发, 系统全端全部代码开源 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者。 商城 …

【VR】手柄定位技术

1. 关于Quest Pro头显、控制器的规格分析(终篇)及Quest 3分辨率 (2022年07月29日)被认为是“Quest Pro”的高端一体机Project Cambria将于今年秋季正式发布。对于一直关注和分享所述设备情报的YouTuber布拉德利林奇(B…

python知识点总结(1)

声明:python不同于其他语言的最厉害之处就在于其他的第三方库可以实现不同的功能,但是在学习其他第三方库之前,我们还需要学习完python语言的基础。基础我们都学过,但是总有一些知识点平时很少使用,再碰到很陌生。这里…

云原生之深入解析Docker容器退出码的含义和产生原因

一、前言 为什么我的容器没有运行?回答这个问题之前,需要知道 Docker 容器为什么退出?退出码会提示容器停止运行的情况?本文列出最常见的退出码,来回答两个重要问题:这些退出码是什么意思?导致该退出码的动作是什么?exit code:代表一个进程的返回码,通过系统调用 exi…

URLConnection(三)

文章目录 1. 配置连接2. protected URL url3. protected boolean connected4. protected boolean allowUserInteraction5. protected boolean doInput5. protected boolean doOutput6. protected boolean isModifiedSince7. protected boolean useCaches8. 超时 1. 配置连接 U…

基于Springboot + vue的云盘系统

目录 一. 🦁 前言二. 🦁 主要技术栈三. 🦁 架构搭建1. 项目搭建效果2. 各部分作用 四. 🦁 主要功能1.功能图2. 主要功能2.1 分片上传文件2.2 存储分享记录 五. 🦁 效果显示 一. 🦁 前言 本项目是在B站学习的…

SSM 如何使用 RabbitMQ 实现消息队列

SSM 如何使用 RabbitMQ 实现消息队列 简介 在分布式系统中,消息队列是一种常见的通信方式,可以实现不同服务之间的异步通信和解耦。RabbitMQ 是一个开源的消息队列软件,本文将介绍如何在 SSM 框架中使用 RabbitMQ 实现消息队列。 本文将使…

python 自动化学习(三) 句柄获取、模拟按键、opencv安装

一、什么是句柄 句柄是在操作系统中的一种标识符,相当于我们每个人的身份证一样,句柄在电脑中也是有唯一性的,我们启动的每一个程序都有自己的句柄号,表示自己的身份 为什么要说句柄,我们如果想做自动化操作时&#xf…

【数据库复习】第六章 关系数据理论 2

若R∈BCNF 所有非主属性对每一个码都是完全函数依赖 所有的主属性对每一个不包含它的码,也是完全函数依赖 没有任何属性完全函数依赖于非码的任何一组属性 多值依赖 Teaching具有唯一候选码(C,T,B), 即全码, ∈3NF …

JAVA商城源码-B2B2C商城系统-独立部署,一套源码终身可用

在现在电商迅速占领市场的时代里,选择开发商城系统已经成为了一种趋势,现在开发搭建商城系统有很多编程语言可以选择,目前在电商里市面上受到很多商家企业的喜爱的便是Java商城系统,那为什么要选择Java电商系统呢? 1、…

linuxOPS基础_服务器构成

服务器的重要结构组成 家用电脑组成: CPU、主板、内存条、显卡、硬盘、电源、风扇、网卡、显示器、机箱、键盘鼠标等等。 CPU CPU是电脑的大脑, CPU发展史: 32 位CPU:最大的内存寻址地址2^32,大约4G的大小。 CP…

js 常用函数 push()、pop()、shift()、unshift()、slice()、splice() 等

文章目录 1. join() 函数2.push() 函数3. pop() 函数4.shift() 函数5.unshift() 函数6.sort() 函数7. reverse() 函数8. concat() 函数9.slice() 函数10. splice() 函数11. indexOf() & lastIndexOf() 函数 最近对前端一些函数的用法还不是很熟悉,有一些函数容易…

手持式网络性能测试仪应用于哪些领域及可以完成什么工作?

首先明辰智航国产网络一点通有千兆和万兆以手持式网络性能测试仪,两款仪器可以应用于以下领域: 电信运营商:用于测试网络质量、信号强度、带宽、时延、丢包率等参数,以便优化网络性能和提高用户满意度。 企业网络管理&#xff1a…

【什么是iMessage苹果推?】什么是苹果推信?什么是苹果推?

挑选得当的IM推送平台:选择合用于PC真个IM推送平台 开辟或集成API:依照所选平台的开发文档,利用响应的编程语言(如Python、Java等)开发或集成API,以便与平台举行交互和节制。API可用于建立、办理和发送消息…

STM32F103 USB实现虚拟串口

STM32F103 USB实现虚拟串口 最近买了一个STM32F103C8T6最小核心板,使用CubeIDE无法识别该芯片,发现该芯片的flash是128Kbytes,ST的标准库是64Kbytes,奇怪啊!也许是国产替代的,国产化太先进了,导…

CCIG:智能文档处理「新未来」

文章目录 ⭐️ CCIG大会简介⭐️ 领先世界的智能文档处理技术🌟 智能图像处理:为文字识别 "增质提效" 筑基✨ 切边增强 - 提升文档图像质量✨ 弯曲矫正 - 解决图像畸变问题✨ 去摩尔纹 - 保证图像信息完整 🌟 图像预处理整体效果展…

汇编基础知识

1.汇编工程流程: 汇编指令--->编译器--->机器码--->计算机 2.汇编语言组成: 1.汇编指令 2.伪指令 3.其他符号 3.存储器: 存放指令与数据的容器,也叫内存. 存储器被划分为多个单元,并且从0开始按钮顺序编号,这些编号视为存储器的存储单元的地址. 4.指令与…