我正在使我们的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)
答案 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
,以便在尝试注册虚拟机之前给它时间。