`

Ansible主机与组的定义Inventory

 
阅读更多

Inventory

Ansible的Inventory文件,可以理解为saltstack中的salt-key中的所有minion的列表以及用户自定义的nodegroup的概念,默认情况下这个文件是/etc/ansible/hosts,到目前为止,以上仅仅是Inventory文件的小小一部分作用,其实他的作用远远不止这些:)

Hosts and Groups

对于/etc/ansible/hosts最简单的定义格式像下面:

mail . lightclooud . com

[ webservers ]

web1 . lightcloud . com

web2 . lightcloud . com

[ cloudservers ]

cloud1 . lightcloud . com

cloud2 . lightcloud . com

  • 想当然,标准的FQDN自然表示的是主机的主机名或者域名
  • 中括号中的名字代表组名,你可以根据你自己的需求将庞大的主机分成具有标识的组。

如果某些主机的SSH运行在自定义的端口上,ansible使用Paramiko进行ssh连接时,不会使用你SSH配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用:

badwolf . lightcloud . com : 5309

假如你想要为某些静态IP设置一些别名,类似于SaltStack中minion配置文件中id的参数配置。你可以这样做:

jumper ansible_ssh_port = 5555 ansible_ssh_host = 192.168.1.50

假如你有很多主机遵循某一种模式,你还可以这样来表示他们:

[ webservers ]

web [ 1 : 50 ] . lightcloud . com

  • 表示从web1到web50,共计50台主机

当然你还可以通过字母来定义可变的范围,例如:

[ database ]

db - [ a : f ] . lightcloud . com

对于每台主机的连接类型,连接用户等这些你都可以完全自定义,例如:

[ targets ]

localhost ansible_connection = local

cloud1 . lightcloud . com ansible_connection = ssh ansible_ssh_user = light

cloud2 . lightcloud . com ansible_connection = ssh ansible_ssh_user = cloud

而对于上面的定义方式,只能算是我们针对每台主机的一个快速定义,随后将会讲述如何在host_vars目录下,以单个文件存储它们。

Host Variables

如上面提到,我们目前可以轻易的给某台或多台主机赋予变量,提供给后面的playbooks使用:

[ lightcloud ]

web1 http_port = 202 maxRequestsPerChild = 404

web2 http_port = 303 maxRequestsPerChild = 606

Groups Variables

变量也可以通过组名,应用到组内的所有成员:

[ lightcloud ]

host1

host2

[ lightcloud : vars ]

ntp_server = ntp . lightcloud . com

proxy = proxy . lightcloud . com

Groups of Groups, and Group Variables

主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量。定义主机组之间的继承关系我们使用”:children”来表示:

[ atlanta ]

host1

host2

[ raleigh ]

host2

host3

[ southeas : children ]

atlanta

raleigh

[ southeas : vars ]

some_server = foo . southeast . example . com

halon_system_timeout = 30

self_destruct_countdown = 60

escape_pods = 2

[ usa : children ]

southeast

northeast

southwest

northwest

Splitting Out Host and Group Specific Data

Ansible并不建议将主机的变量都存储在Inventory文件中,这些变量也可以存储在单个文件中,而这些变量文件必须遵循YAML语法,假设Inventory文件没有被修改,路径如下:

/ etc / ansible / hosts

如果主机的名字“foosball”,两个组的名字分别是“raleigh”,“raleigh”,以下路径的yaml文件中的变量将会应用到对应的主机上:

/ etc / ansible / group_vars / raleigh

/ etc / ansible / group_vars / webservers

/ etc / ansible / host_vars / foosball

Tip:在Ansible 1.2或更高版本中,group vars和host vars目录可以存在于playbook目录或者Inventory目录,如果两个目录都存在同一主机的相同定义,那么playbook目录将会第二次被加载,也就是说playbook中定义的将会覆盖Inventory中对应的定义

List of Behavioral Inventory Parameters

Ansible内置了一些关于连接主机的变量,设置以下变量控制ansible与远程主机:

ansible_ssh_host

   ansible 通过 ssh 连接的 IP 或者 FQDN

ansible_ssh_port

   SSH 连接端口

ansible_ssh _ user

   默认 SSH 连接用户

ansible_ssh_pass

   SSH 连接的密码(这是不安全的, ansible 极力推荐使用 -- ask - pass 选项或使用SSH keys )

ansible_sudo_pass

   sudo 用户的密码

ansible_connection

   SSH 连接的类型: local , ssh , paramiko ,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提)

ansible_ssh_private_key_file

   SSH 连接的公钥文件

ansible_shell _ type

   指定主机所使用的 shell 解释器,默认是 sh ,你可以设置成 csh , fish 等 shell 解释器

ansible_python _ interpreter

   用来指定 python 解释器的路径

ansible \ _ \ * \ _interpreter

   用来指定主机上其他语法解释器的路径,例如 ruby , perl 等

例如:

some_host         ansible_ssh_port = 2222      ansible_ssh_user = manager

aws_host           ansible_ssh_private_key_file = / home / example / . ssh / aws . pem

freebsd_host       ansible_python_interpreter = / usr / local / bin / python

ruby_module_host   ansible_ruby_interpreter = / usr / bin / ruby . 1.9.3

分享到:
评论

相关推荐

    Python自动化运维之Ansible定义主机与组规则操作详解

    Ansible通过定义好的主机与组规则(Inventory)对匹配的目标主机进行远程操作,配置规则文件默认是/etc/ansible/hosts。 二 定义主机与组 所有定义的主机与组规则都在/etc/Ansible/hosts文件中,为ini文件格式,主机...

    Ansible-simple-ansible-inventory.zip

    2. **变量和主机定义**:变量在库存文件中定义,可以应用于主机或整个组。例如,`ansible_user`定义了连接到主机的用户名,`ansible_python_interpreter`指定主机上的Python解释器路径。 3. **分组变量**:对于一组...

    ansible-yaml_inventory:Ansible动态库存,从YAML文件读取库存

    yaml_inventory Ansible动态清单脚本,从特殊格式的YAML文件读取清单。... 属于多个组的主机必须在多个位置定义。 在多个组之间共享相同的group_vars是一个具有挑战性的问题。 这个Ansible动态清单脚本正在尝试通

    14周 Ansible 应用实训—简答题.doc

    受控节点是 Ansible 管理的主机, Inventory 则是 Ansible 用来存储主机信息的数据库。 二、 Ansible 的环境配置 Ansible 的环境配置主要包括 Ansible 的安装、配置文件的编辑和 Inventory 的配置。Ansible 可以在...

    PyPI 官网下载 | ansible-dynamic-inventory-0.1.2.tar.gz

    通常,动态库存脚本应遵循Ansible的库存插件规范,返回JSON格式的数据,包含主机信息、组信息以及变量。在实际应用中,这些脚本可以是Python、Shell或者其他任何能生成JSON的程序。 使用这个插件的过程如下: 1. ...

    PyPI 官网下载 | ansible-dynamic-inventory-0.2.0.tar.gz

    在Ansible中,Inventory(库存)扮演着至关重要的角色,它是定义和管理目标主机集合的地方。本篇文章将深入探讨Ansible动态库存(Dynamic Inventory)及其相关的Python库,以帮助读者更好地理解和应用这一功能。 ...

    PyPI 官网下载 | ansible-dynamic-inventory-0.1.9.tar.gz

    这个库通常是一个Python脚本,它接受Ansible的库存请求,并返回一组JSON格式的主机信息,这些信息可以来源于各种数据源,如AWS、Azure、GCP或其他自定义的API。 当我们下载并解压`ansible-dynamic-inventory-0.1.9....

    Ansible-Ansible-roles.zip

    Inventory 是 Ansible 中用于定义目标主机列表的文件,可以是静态的文本文件,也可以是动态的,从其他数据源(如数据库或 EC2 API)获取。它可以指定主机的分组,以及附加的变量,这些变量可以在 playbook 中引用。 ...

    Ansible日常维护和使用手册.docx

    动态Inventory允许从外部系统(如CMDB)拉取主机信息,只需在`ansible.cfg`中将`inventory`参数设置为可执行脚本,脚本需支持列出所有主机和组的`--list`选项,以及获取特定主机信息的`--host`选项。 **3. 动态...

    RHCE9认证之ansible6.3自动化运维实战学习

    1. Inventory(主机清单):用于存储主机信息,Ansible 通过 Inventory 来确定要管理的主机。 2. Modules(模块):Ansible 的模块是 Ansible 的核心组件之一,提供了各种功能,如文件传输、软件安装、命令执行等。 ...

    Ansible-Ansible-WSL.zip

    2. **配置Ansible Inventory**:Ansible使用inventory文件来定义需要管理的目标主机。在WSL中,可能需要配置inventory文件,将Windows主机(通过其IP地址或主机名)包括进来,以便在WSL环境中管理它们。 3. **使用...

    ansible 简明教程

    例如,以下命令会列出所有在 inventory 文件中定义的目标主机(这里为 `ip_all` 组)的 `/etc/redhat-release` 文件内容: ```bash ansible -i /root/iplist_all ip_all -m shell -a 'cat /etc/redhat-release' ...

    PyPI 官网下载 | ansible-inventory-0.3.1.tar.gz

    Ansible-Inventory 0.3.1是Ansible框架中的一个组件,它的主要功能是解析和管理inventory文件,这些文件定义了要操作的主机列表及其属性。Inventory可以是静态的文本文件,也可以是动态脚本,能根据特定条件返回主机...

    Ansible-ansible-grafana.zip

    6. **Inventory管理**:Ansible的Inventory是定义目标主机及其分组的地方,它可以是一个文本文件或动态生成。在部署Grafana时,我们需要指定哪些服务器将作为Grafana的实例,以及它们的IP地址或域名。 7. **角色与...

    Ansible-ansible-deployment-facts.zip

    4. **Inventory**: Ansible 的 Inventory 文件定义了哪些主机属于哪个组,并可以包含额外的变量,包括部署事实。这些变量可以在 playbook 中引用,为动态和条件性的部署提供灵活性。 5. **Roles**: Ansible Roles ...

    ansible-oracle-master

    Ansible是一款基于Python的自动化工具,它通过SSH协议与目标主机进行通信,无需在被管理节点上安装任何代理,大大简化了远程系统的管理。在“ansible-oracle-master”项目中,我们看到的是一个专门为Oracle数据库...

    Ansible-jumpserver-ansible.zip

    JumpServer,作为一款开源的堡垒机系统,其与Ansible的结合使用,可以极大地提升运维效率和安全性。本文将深入探讨Ansible如何在JumpServer环境中发挥作用,以及相关的配置与实践。 一、Ansible简介 Ansible是一款...

    Ansible-cp-ansible.zip

    1. **主机Inventory**:Ansible通过inventory管理你的目标设备列表,这可以是文本文件、YAML文件或动态生成。Inventory定义了哪些服务器属于哪个组,以及它们的属性,如IP地址、用户名、密码等。 2. **Playbook**:...

Global site tag (gtag.js) - Google Analytics