如何覆盖ansible_playbook中的hosts变量

时间:2017-03-17 23:53:20

标签: ansible ansible-inventory

我不熟悉...

我想确保mongo在标记为tag_role_mongo且节点在tag_role_node上运行的所有主机上运行

是否可以覆盖主机变量

hosts: {{ item.tag_name }} 
  tasks:
   command: // check ps output {{ item.process_name }} 
with_items:
  - tag_name: tag_role_mongo
    process_name: "mongo"
  - tag_name: tag_role_node
    process_name: "node"

我很确定,我的语法不正确,我的问题是甚至可以使用剧本来做这样的事情。 在所有的playbook示例中,主机是固定的,或者可以使用extra-args选项从命令行覆盖。

任何例子都会非常有用

1 个答案:

答案 0 :(得分:1)

我不完全确定我是否正确理解了您的问题,但标签不是在主机级别添加,而是在任务级别添加 - 请参阅documentation。您可能意味着对两个不同的组(mongo和节点)执行相同的命令。 为此,您可以将您的剧本分为两部分:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Main.master" CodeBehind="PayPeriodSub.aspx.vb" Inherits="TTS.PayPeriodSub" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<dx:ASPxComboBox ID="BoxPayPeriods" runat="server" DataSourceID="SqlPayPeriods" EnableClientSideAPI="True" TextField="PayRange" ValueField="PayPeriodKey">
    <ClientSideEvents 
        SelectedIndexChanged="function(s, e) { TimesheetGrid.PerformCallback(s.GetValue()); }">
    </ClientSideEvents>
</dx:ASPxComboBox>

<dx:ASPxGridView ID="TimesheetGrid" runat="server" AutoGenerateColumns="False" DataSourceID="SqlTimesheet" KeyFieldName="RecordID">
    <Columns>
        <dx:GridViewDataTextColumn FieldName="RecordID" ReadOnly="True" VisibleIndex="0">
            <EditFormSettings Visible="False" />
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn FieldName="ShipCountry" VisibleIndex="1">
        </dx:GridViewDataTextColumn>
        <dx:GridViewDataTextColumn FieldName="PayPeriodID" VisibleIndex="2">
        </dx:GridViewDataTextColumn>
    </Columns>
</dx:ASPxGridView>
<br />
<asp:SqlDataSource ID="SqlTimesheet" runat="server" ConnectionString="<%$ ConnectionStrings:prd_ttsConnectionString %>" SelectCommand="SELECT RecordID, ShipCountry, PayPeriodID FROM TIMESHEET WHERE (PayPeriodID = @Param1)">
    <SelectParameters>
        <asp:SessionParameter DefaultValue="6" Name="Param1" SessionField="PayPeriod" />
    </SelectParameters>
</asp:SqlDataSource>
<br />
    <asp:SqlDataSource ID="SqlPayPeriods" runat="server" ConnectionString="<%$  ConnectionStrings:prd_ttsConnectionString %>" SelectCommand="SELECT * FROM [vw_PayPeriods]"></asp:SqlDataSource>
</asp:Content>

不是很好,但应该解决问题。您还可以创建一个角色,并将您要检查的进程名称传递给此角色,以便更轻松地进行维护。