如何通过Ansible win_reboot模块等待“应用计算机设置”?

时间:2018-10-16 13:48:24

标签: windows powershell ansible

我有一部与之作战的剧本(请参见下文摘录)。我正在将Windows Server 2016盒升级为域控制器,并且它具有冗长的重启过程。尽管我可以将post_reboot_delay设置得很高,但我还是非常希望有一个智能的test_command,它等待“应用计算机设置”完成,然后才能继续执行并在我的下一个任务中出错(运行添加一些广告对象的脚本) 。当我的计算机实际完成设置设置时,是否有人可以使用test_command?我也会接受一个有效的win_wait _。

---
- hosts: landlord_ad01
  vars:
    ad_domain: experimental.loc
    ad_safemode: 1qaz@WSX1qaz@WSX
    TreeADName: experimental
# Cut
  - name: Promote Domain Controller Primary (takes about six minutes)
    win_domain:
      dns_domain_name: "{{ ad_domain }}"
      safe_mode_password: "{{ ad_safemode }}"
    register: promote_dc
  - name: Reboot Server for Domain Controller Promotion (takes about six minutes)
    win_reboot:
      post_reboot_delay: 300
# Cut
  - name: Run AD_Objects Script
    win_shell:
      'C:\Temp\adobjects.ps1 -TreeADName {{ TreeADName }}'

我尝试过test_command: powershell.exe if($($env:userdomain) -like '{{ TreeADName }}'){exit 0} else{exit 1},但是出现错误powershell.exe : The command parameter was already specified.。这可能是由于else语句之前的空格所致。

我也尝试过test_command: powershell.exe if($env:userdomain -notlike '{{ TreeADName }}'){exit 1},但这得到了Missing '(' after 'if' in if statement。我不确定为什么看不到括号。

我尝试用字符串将powershell命令包装在test_command中的任何结果都会导致从替换的{{ TreeADName }}变量周围删除字符串,即使我在其上使用了jinja引号过滤器也是如此。这会使PowerShell抱怨已解析的TreeADName不是Commandlet。 Ansible似乎正在对该命令执行有趣的操作。我已经使用win_command模块测试了大约二十种变体,以查看哪种方法有效,并且在与win_reboot一起使用时,它们都会由于一种或多种原因而失败。

非常感谢您的帮助。

0 个答案:

没有答案