首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何根据提供的变量在不同的主机或一组主机上运行ansible playbook?

在Ansible中,可以使用动态主机文件和组变量来根据提供的变量在不同的主机或一组主机上运行playbook。

  1. 动态主机文件:动态主机文件是一个脚本或程序,它可以根据提供的变量动态生成主机清单。Ansible在运行playbook之前会执行该脚本或程序来获取最新的主机清单。可以根据不同的需求使用不同的动态主机文件,例如使用脚本从云平台获取主机列表,或者使用脚本从配置管理系统获取主机列表。
  2. 组变量:组变量是一组与主机组相关的变量,可以在主机清单中定义。可以根据提供的变量来选择不同的主机组,并在playbook中使用组变量来配置不同的主机组。例如,可以定义一个名为"web_servers"的主机组,并在该组中定义与Web服务器相关的变量。然后,根据提供的变量选择要运行playbook的主机组。

下面是一个示例:

动态主机文件(dynamic_inventory.py):

代码语言:txt
复制
#!/usr/bin/env python

import json

# 根据提供的变量生成主机清单
def generate_inventory(variable):
    if variable == "dev":
        inventory = {
            "web_servers": {
                "hosts": ["web1.example.com", "web2.example.com"],
                "vars": {
                    "http_port": 80,
                    "max_connections": 100
                }
            },
            "db_servers": {
                "hosts": ["db1.example.com", "db2.example.com"],
                "vars": {
                    "db_port": 3306,
                    "max_connections": 200
                }
            }
        }
    elif variable == "prod":
        inventory = {
            "web_servers": {
                "hosts": ["web3.example.com", "web4.example.com"],
                "vars": {
                    "http_port": 8080,
                    "max_connections": 200
                }
            },
            "db_servers": {
                "hosts": ["db3.example.com", "db4.example.com"],
                "vars": {
                    "db_port": 5432,
                    "max_connections": 500
                }
            }
        }
    else:
        inventory = {}

    return json.dumps(inventory)

# 打印生成的主机清单
print(generate_inventory("dev"))

运行playbook(site.yml):

代码语言:txt
复制
---
- name: Example playbook
  hosts: all
  gather_facts: false
  tasks:
    - name: Print variable
      debug:
        var: inventory_hostname

运行命令:

代码语言:txt
复制
ansible-playbook -i dynamic_inventory.py site.yml --extra-vars "variable=dev"

在上述示例中,动态主机文件根据提供的变量生成不同的主机清单。然后,使用ansible-playbook命令运行playbook,并通过--extra-vars参数传递变量。根据提供的变量,Ansible会选择相应的主机组,并在每个主机上运行playbook中的任务。

请注意,上述示例仅用于演示目的,实际使用时需要根据实际情况进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

深入了解 Ansible:全面掌握自动化 IT 环境的利器

可以使用不同级别的变量,包括全局变量、主机组变量和主机变量,以覆盖或补充默认值。使用 vars 关键字定义变量,或者在主机组或主机的 Inventory 中定义。...5.2.3 使用条件判断和循环 利用 Ansible 的条件判断和循环功能,根据不同的条件执行不同的任务,或者对一组主机重复执行相同的任务。...5.2.5 使用模板和文件复制 合理使用模板和文件复制模块,将配置文件和其他静态文件复制到目标主机上,并根据不同的环境或需求自动生成配置文件。...这样可以提高执行效率,并根据需要灵活地选择性执行任务。 5.2.8 使用注册变量 利用 Ansible 的注册变量功能,可以在一个任务中执行命令,并将输出保存到变量中,然后在后续的任务中使用这些变量。...变量(Variables): 角色可以定义一组变量,用于控制任务的行为和配置参数。这些变量可以在角色内部使用,并可以在角色被调用时传递给角色。

90911

Ansible进阶学习之Playbooks(剧本)的理解使用

将多个play组织在一个playbook中,运行时就会根据自上而下的顺序依次执行。...此言差矣,根据官网上的介绍,Playbooks 与 adhoc 相比,是一种完全不同的运用 ansible 的方式,是非常之强大的。究竟有多强大呢?接下来我们就先来看看playbook基本组件。...playbook基础组件 Playbooks结构: Hosts:运行执行任务(task)的目标主机 remote_user:在远程主机上执行任务的用户 tasks:任务列表 handles:任务,与tasks...hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分隔主机组;remote_user则用于指定远程主机上的执行任务的用户。...也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户。

1.2K30
  • 大神带你 20 分钟学会 Ansible !

    # ansible webserver -m service -a 'enabled=true name=httpd state=started' shell 在远程主机上运行命令 尤其是用到管道变量等功能的复杂命令...可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来表明。...=808 www2.magedu.com http_port=8080 maxRequestsPerChild=909 5.2.3 组变量 组变量是指赋予给指定组内所有主机上的在playbook中可用的变量...task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。...tags:在playbook可以为某个或某些任务定义一个"标签",在执行此playbook时,通过为ansible-playbook命令使用--tags选项能耐实现仅运行指定的tasks而非所有的; #

    3.6K20

    IT运维面试问题总结-运维工具、开源应用(Ansible、Ceph、Docker、Apache、Nginx等)

    8、简述Ansible ad-hoc和playbook的区别? Ad-Hoc 命令可以作为一次性命令对一组目标主机运行单个、简单的任务。...playbook可以实现以一种简易重复的方式对一组目标主机运行多个复杂的任务。 Playbook 是描述要在受管主机上实施的必要配置或程序性步骤的文件。...play 是一组有序的任务,应该对从目录中选择的主机运行。 9、简述Ansible变量?...、facts 或 register 的变量,在主机组和个别主机上设置的变量。...通过在所有主机上并行运行任务,Ansible可以对剧本的执行进行更多的控制。默认情况下,Ansible默认最多并行5个,因此它将同时在5台不同的机器上运行一个特定的任务。

    3.7K10

    Ansible 极简教程

    # ansible webserver -m service -a 'enabled=true name=httpd state=started' shell 在远程主机上运行命令 尤其是用到管道变量等功能的复杂命令...=808 www2.magedu.com http_port=8080 maxRequestsPerChild=909 5.2.3 组变量 组变量是指赋予给指定组内所有主机上的在playbook中可用的变量...ansible_python_interpreter 5.3 条件测试 如果需要根据变量、facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试。...task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。...tags:在playbook可以为某个或某些任务定义一个"标签",在执行此playbook时,通过为ansible-playbook命令使用--tags选项能耐实现仅运行指定的tasks而非所有的; #

    3.1K20

    Ansible极简教程

    可以将同一个主机同时归并到多个不同的组中;此外,当如若目标主机使用非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来表明。...808www2.kangvcar.com http_port=8080 maxRequestsPerChild=909 5.2.3 组变量 组变量是指赋予给指定组内所有主机上的在playbook中可用的变量...5.3 条件测试 如果需要根据变量、facts或此前任务的执行结果来做为某task执行与否的前提时要用到条件测试。...task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。...tags:在playbook可以为某个或某些任务定义一个”标签”,在执行此playbook时,通过为ansible-playbook命令使用–tags选项能耐实现仅运行指定的tasks而非所有的; 1234567891011121314151617181920212223

    4.1K30

    云原生之 Ansible 篇(一)

    在大规模的配置管理工作中,特别是云服务提供商或者IDC厂家,需要管理不同业务的不同机器,这些机器的信息都存放在Ansible的inventory组件里面。...比如我们在分发配置文件时,每个配置文件需要根据远程主机的一些属性不同而配置不同的值,对于需要替换的部分,我们就可以使用template模块来进行替换。...{{http_port}} 其中{{ansible_default_ipv4.address}}就是需要根据不同的主机,动态变化的。...Ansible提供了一个单独的命令:ansible-playbook命令,我们可以通过这个命令来执行yaml脚本。...4.范围 全局范围:从命令行或ansible配置设置的变量 play范围:在play和相关结构中设置的变量 主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量 如果多个级别上定义了相同名称的变量

    2.3K10

    Ansible 多机房自动部署发布

    而当服务器数量增加,甚至服务器可能存在于跨地域的不同机房情况下,如何减少部署发布的人力和时间成本,实现自动化部署发布和无缝发布,而且在部署发布期间仍然能够正常提供服务,就成为一个至关重要的问题。...管理远程主机和组之间的关系清单,记录主机ssh端口、账号密码等 在管理主机上,ansible模块通过标准ssh协议(ZeroMQ、Kerberos)执行inventory文件中的主机对应的playbook...同时,再分配变量时,可以指定主机分配变量,也可以指定组分配变量。变量可以在多个地方定义,有优先级的差别。例如以下代码显示。...yaml,远程主机被定义成不同角色,每个角色需要根据playbook中不同的task执行不同的指令,比如一组主机在inventory文件中被定义成webservers,则可能会执行web服务器重启等操作...如下playbook,执行一组定义为webservers的主机,使用root账号登录,并且定义了http_port、max_clients变量,会执行三个task,分别为安装最新hhtpd服务、拷贝/srv

    1.7K30

    如何Ansible编写一个Playbook

    简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。...2、playbook基础组件 1.Hosts:运行执行任务(task)的目标主机 2.remote_user:在远程主机上执行任务的用户 3.tasks:任务列表 4.handlers:任务,与tasks...不同的是只有在接受到通知时才会被触发 5.templates:使用模板语言的文本文件 6.variables:变量,变量替换 3、playbook和临时命令的比较 1.临时命令不适合复杂配置管理或编配场景...2.临时命令一次只能调用一个模块或一组参数。当需要多个操作时,必须使用多个临时命令来执行。 3.playbook是描述要在受管理主机上实施的必要配置或程序性步骤的文件。...这会使Ansible报告在执行该playbook时将会发生什么更改,但不会对受管主机进行任何实际的更改。 下面演示了一个playbook的空运行,它在受管主机上安装了最新版本的httpd软件包。

    3K20

    Ansible 常用

    四.ansible的playbook 虽然ansible可以同时操作很多个主机,但是如果有些命令可以批量执行,而不用一条一条的打的话其实会更加理想,而ansible的playbook就提供了这样的功能,...定义好playbook后,使用ansible-playbook 123.yml 来启动 ansible会先获取主机上的FACTS变量。然后开始一项一项的执行定义好的任务。...如何在playbook中定义并使用变量?...,然后可以让不同的hosts灵活的调用这些被分拆的元素代码,重新组合成一个新的临时playbook来运行。...可以给task加上不同的标签,用来标识不同的task,然后我们在运行playbook的时候,可以用-t 选项指定标签,来运行我们指定的任务,而不是所有role中的任务全都跑一遍。

    1.6K20

    Ansible Playbook介绍和使用

    Ansible Playbook 在一组、组或分类的主机上执行,它们共同构成一个 Ansible 清单。...playbook 是由一个或多个play组成的列表 play的主要功能在于将直线归并为一组的主机装扮实现通过ansible中的task定义好的角色。...将多个play组织在一个playbook内,即可以让它们联动起来按实现编排的机制唱一台大戏 playbook采用YAML语言编写 二、ansible playbook 如何工作?...扩展性好 五、ansible-playbook的核心组成部分 Hosts:执行的远程主机列表; Tasks:任务集; Variables:内置变量或自定义变量在playbook中调用; Templates...各个task按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个task后,再开始第二个task。但是也可以使用异步模式。

    82920

    Linux自动化运维工具之ansible(二)

    例如: 组变量 组变量是指赋予给指定组内所有主机上的在playbook中可用的变量。例如: 组嵌套 inventory中,组还可以包含其它的组,并且也可以向组中的主机指定变量。...playbooks playbook是由一个或多个“play”组成的列表。 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。...也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务。 此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户。...在运行自下而下某playbook时,如果中途发生错误,所有已执行任务都将回滚,因此,在更正playbook后重新执行一次即可。 task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。...tags tags用于让用户选择运行或路过playbook中的部分代码。ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。

    2K60

    Ansible 自动化运维笔记(总结)

    :vars] ansible_ssh_pass='123123' 使用主机变量 这里介绍 Ansible Invento 的内置的一些参数,这些参数我们在实际工作中也会经常使用到....Shell shell 模块可以帮助我们在远程主机上执行命令,它与 command 模块不同之处是 shell 模块在远程主机中执行命令时,会运行远程主机上的 /bin/sh 程序处理,也就是说它不是直接执行命令...,或直接修改远程主机上的文件或目录的属主与属组. ansible all -m shell -a "rm -fr /tmp/*" -o #清空演示目录 ansible all -m shell...,设置属主,远程主机上必须有对应的用户 group 在拷贝到远程主机以后,设置属组,远程主机上必须有对应的用户 mode 在拷贝到远程主机以后,设置文件的权限信息 others 所有的file模块里的选项都可以在这里使用...解压后文件或目录的属主 将ansible控制主机上的/root/lyshark.tar.gz解压缩到远程主机的/tmp/目录下,并设置权限777.

    2.2K20

    243张图片为你解析Linux轻量级自动运维化工具Ansible

    ,但是当我们验证的时候,就会发现密码错误了,这是因为ansible的command模块并不支持管道等输出,所以下面介绍另外一个ansible的模块shell shell模块 :在远程主机上调用shell...向不同的主机传递不同的变量 ; IP/HOSTNAME variable_name=value (b) 向组内的所有主机传递相同的变量 ; [groupname:vars] variable_name=...的CentOS7的主机 然后我们利用setup模块的命令 在7的上面可以找到该行 在6的上面可以找到该行 根据以上的信息,我们就可以创建一个基于条件判断的playbook文件test.yml...,实验到此结束 示例 2: 根据以上内容,修改端口号 当我们写好模板以后,需要修改端口号,也是非常容易的,而且我们也可以通过在nginx.yml上面通过roles传递变量 例如像以下这样子操作 测试运行一下看看有没有错误...多,符合除以4的预期效果 示例 : 根据不同的系统安装 mysql 包 首先定义一个tasks的模板 定义一个yaml调用角色脚本 设置hosts文件添加dbsrvs组 测试语法 测试运行调用角色脚本

    1.4K30

    243张图片为你解析Linux轻量级自动运维化工具Ansible

    ,这是因为ansible的command模块并不支持管道等输出,所以下面介绍另外一个ansible的模块shell shell模块 :在远程主机上调用shell解释器运行命令,支持shell的各种功能,...变量 类型: 内建: (1) facts 自定义: (1) 命令行传递; -e VAR=VALUE (2) 在hosts Inventory中为每个主机定义专用变量值; (a) 向不同的主机传递不同的变量...的主机 然后我们利用setup模块的命令 在7的上面可以找到该行 在6的上面可以找到该行 根据以上的信息,我们就可以创建一个基于条件判断的playbook文件test.yml 为了演示效果,实验前把CentOS6...,实验到此结束 示例 2: 根据以上内容,修改端口号 当我们写好模板以后,需要修改端口号,也是非常容易的,而且我们也可以通过在nginx.yml上面通过roles传递变量 例如像以下这样子操作 测试运行一下看看有没有错误...: 根据不同的系统安装 mysql 包 首先定义一个tasks的模板 定义一个yaml调用角色脚本 设置hosts文件添加dbsrvs组 测试语法 测试运行调用角色脚本db.yml,应该没有大问题 正式运行

    1.6K60

    一文详解 Ansible 自动化运维!

    逐步拆解为Play,再将 Play 组织成 Ansible 可以识别的任务,随后调用任务涉及的所有模块和插件,根据 Inventory 中定义的主机列表通过 SSH 将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果...--[2:5]表示2~5之间的所有数字,即表示yj2.kgc.cn、yj3.kgc.cn……的所有主机--> 可以将一个主机同时归置在不同的组中。...常用的参数如下: chdir:在远程主机上运行命令前要提前进入的目录; creates:在命令运行时创建一个文件,如果文件已存在,则不会执行创建任务; removes:在命令运行时移除一个文件,如果文件不存在...--/将本机的hosts文件复制到web组中的所有主机上存放在家目录下的a1.hosts目录, 权限是777,属主是root,属组是root--> 4)hostname模块 hostname模块用于管理远程主机上的主机名...playbook的核心元素包含: hosts:任务的目标主机,多个主机用冒号分隔,一般调用/etc/ansible/hosts中的分组信息; remote_user:远程主机上,运行此任务的默认身份为root

    3.1K30

    243 张图片为你解析 Linux 轻量级自动运维化工具 Ansible

    把公钥传送到其他主机 ? 在68的主机上面可以看见公钥已经传送过来了,并且确认文件的权限是否正确 ? 重复以上操作把公钥发送给69的主机 ?...示例3:在主机上面都创建一个用户 ? 查看两台主机是否已经创建该用户 ? ? ? 查看用户信息: ?...shell模块 :在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value...Variables:变量 类型: 内建: (1) facts 自定义: (1) 命令行传递; -e VAR=VALUE (2) 在hosts Inventory中为每个主机定义专用变量值; (a) 向不同的主机传递不同的变量...然后我们利用setup模块的命令 ? 在7的上面可以找到该行 ? 在6的上面可以找到该行 ? 根据以上的信息,我们就可以创建一个基于条件判断的playbook文件test.yml ? ?

    1.2K20

    学习如何安装Ansible和运行Playbooks

    Ansible是一个有用的工具,允许您创建计算机组,描述应如何配置这些计算机或应对其执行哪些操作,并从中心位置发出所有这些命令。它使用SSH,因此无需在您要定位的计算机上安装任何内容。...如果是这样,请ansible在本指南中使用前缀命令sudo。 安装Ansible 只需要在控制机器或运行命令的机器上安装Ansible 。...一个playbook也可以在一组机器上运行一些命令,切换到另一组运行不同的命令,然后切换回原始或不同的一组机器。它是程序性的,任务按顺序从上到下运行。...shell - 在节点中执行命令 mysql_db - 从远程主机添加或删除MySQL数据库 mysql_user - 在MySQL数据库中添加或删除用户 postgresql_db - 从远程主机添加或删除...处理程序:在变更时运行操作 角色 变量 Playbook最佳实践 更多信息 有关此主题的其他信息,您可能需要参考以下资源。

    5.1K10

    Ansible运维自动化平台初识

    ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。...;提供主机管理列表,定义管理谁 各种模块核心模块、command模块、自定义模块;提供了日常模块 借助于插件完成记录日志邮件等功能; 根据需求后续添加模块,邮件、日志模块 playbook:剧本执行多个任务时...一次发布多条指令给客户端 特性 no agents:不需要在被管控主机上安装任何客户端; no server:无服务器端,使用时直接运行命令即可; modules in any languages:基于模块工作...· playbook是ansible的配置、部署和编排语言,可以描述一个你想要的远程系统执行策略,或一组步骤的一般过程。如果ansible模块作为你的工作室工具,playbook就是设计方案。...三、ansible运行原理 ansible是如何工作的呢?

    1.6K10

    243张图片为你解析Linux轻量级自动运维化工具Ansible

    把公钥传送到其他主机 ? 在68的主机上面可以看见公钥已经传送过来了,并且确认文件的权限是否正确 ? 重复以上操作把公钥发送给69的主机 ?...示例3:在主机上面都创建一个用户 ? 查看两台主机是否已经创建该用户 ? ? ? 查看用户信息: ?...shell模块 :在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常为“key=value...Variables:变量 类型: 内建: (1) facts 自定义: (1) 命令行传递; -e VAR=VALUE (2) 在hosts Inventory中为每个主机定义专用变量值; (a) 向不同的主机传递不同的变量...然后我们利用setup模块的命令 ? 在7的上面可以找到该行 ? 在6的上面可以找到该行 ? 根据以上的信息,我们就可以创建一个基于条件判断的playbook文件test.yml ? ?

    1.2K20
    领券