在localhost上运行一个Ansible Playbook任务,然后在远程服务器上运行另一个任务

时间:2019-05-16 16:42:28

标签: ansible

我正在使我们的VMware部署和配置自动化,并且遇到了一个我在google上找不到答案的问题。

首先,我在localhost上运行一个playbook任务,该任务可以连接到vSphere以配置我的服务器。之后,在同一本剧本中,我想联系配置的服务器并进行一些配置更改以完成操作。我怎样才能做到这一点?现在我的剧本看起来像:

- hosts:
    - localhost
  tasks:
  - name:  Clone a virtual machine from Linux template and customize
    vmware_guest:
      hostname: "VSphere"
      username: "Username"
      password: "Password"
      validate_certs: no
      datacenter: "DC"
      state: present
      folder: /Servers
      template: "MyTemplate"
      name: "{{ServerName}}"
      cluster: "Prod Cluster"
      networks:
        - name: VM Network
          ip: "{{IP}}"
          netmask: 255.255.255.0
          gateway: "{{Gateway}}"
      wait_for_ip_address: True
      customization:
        domain: "mydomain.com"
        dns_servers:
          - 192.168.1.1
          - 192.168.1.2
        dns_suffix:
          - mydomain.com
    delegate_to: localhost

  - name:  Register VM to Satellite
     #here is where I need to know how to specify running commands on my specific IP(which I pass in on command line as var)

2 个答案:

答案 0 :(得分:2)

使用add_host模块将新主机添加到清单中,然后在另一场戏中将该主机作为目标(您不需要在任务中使用Option Strict On Option Explicit On Imports System.Dynamic Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load Dim av = New anyValue av.value = 4 Dim obj As Object = av 'box av Dim dAv = CDbl(av) 'works 'Dim dObj = CDbl(obj) 'fails (invalid cast) 'Dim fAv = getDouble(av) 'fails 'Dim fObj = getDouble(obj) 'fails Dim kAv = getDoubleKludge(av) 'works Dim fObj = getDoubleKludge(obj) 'works Stop End Sub Private Function getDouble(obj As Object) As Double Return CDbl(obj) End Function Private Function getDoubleKludge(obj As Object) As Double Return CDbl(CTypeDynamic(obj, GetType(Double))) End Function End Class Public Class anyValue Private _value As Object Public Property value As Object Get Return _value End Get Set(obj As Object) _value = obj End Set End Property Public Shared Widening Operator CType(obj As anyValue) As Double Return CDbl(obj.value) End Operator End Class Public Structure nonNegativeInteger Private _value As Integer Public Property value As Integer Get Return _value End Get Set(val As Integer) If val >= 0 Then _value = val Else _value = 0 Throw New ArgumentOutOfRangeException End If End Set End Property Public Sub New(i As Integer) If i >= 0 Then _value = i Else _value = 0 Throw New ArgumentOutOfRangeException End If End Sub Public Sub New(s As String) If Not Integer.TryParse(s, _value) OrElse _value < 0 Then _value = 0 Throw New ArgumentOutOfRangeException End If End Sub Public Shared Widening Operator CType(ByVal o As nonNegativeInteger) As String Return o.ToString End Operator Public Shared Narrowing Operator CType(ByVal s As String) As nonNegativeInteger Return New nonNegativeInteger(s) End Operator Public Shared Widening Operator CType(ByVal o As nonNegativeInteger) As Double Return CDbl(o.value) End Operator Public Shared Narrowing Operator CType(ByVal d As Double) As nonNegativeInteger If d > Integer.MaxValue OrElse d < 0 Then Throw New ArgumentOutOfRangeException Return Nothing Else Return New nonNegativeInteger(CInt(d)) End If End Operator Public Overrides Function ToString() As String Return _value.ToString() End Function Public Function toDouble() As Double Return CDbl(_value) End Function End Structure ,因为您已经将delegate_to: localhost定位为在播放中):

localhost

您也可以通过使用dynamic inventory plugin来做到这一点;有一种适用于vmware的软件。

答案 1 :(得分:0)

由于您已经知道IP地址是什么,因此只需将其放入清单即可。实际上,您可以拥有任意数量的东西。您将拥有hosts: all(不是本地主机)。如果VM已经存在,则vmware_guest调用中将不会发生任何事情。 (并且您已经将vCenter调用委派给了localhost。)

您将希望放入wait_for,以便在尝试注册虚拟机之前给它时间。

相关问题