Ansible replace似乎抛出了解析错误?

Ansible replace似乎抛出了解析错误?,replace,ansible,Replace,Ansible,我正在尝试使用Ansible replace模块更改Windows Server 2019标准目标上文件中的某些文本。我使用的是运行在Python2.7上的Ansible 2.8.3 - name: REPLACE | Replace baseline.local with FQDN in InternetSettings.xml replace: path: '/path/to/settings.xml' regexp: 'baseline\.local' repl

我正在尝试使用Ansible replace模块更改Windows Server 2019标准目标上文件中的某些文本。我使用的是运行在Python2.7上的Ansible 2.8.3

- name: REPLACE | Replace baseline.local with FQDN in InternetSettings.xml
  replace:
    path: '/path/to/settings.xml'
    regexp: 'baseline\.local'
    replace: '{{ FQDN }}'
我认为问题不在于路径,尽管文件路径上的一个目录的名称中有括号“{}”。是吗

我曾尝试对
win\u Lineinfle
做过同样的事情,它没有在相同的路径上抛出错误,但在这种情况下很难复制replace的功能,这正是我真正需要的

编辑2:当我将文件复制到本地计算机并委托给127.0.0.1时,它会起作用。我正在从Windows Linux子系统(WSL)安装运行ansible。当我将文件复制到远程linux系统并在那里运行replace时,它也可以工作,所以这似乎是Windows的问题

编辑:我得到的错误的堆栈跟踪:

"Exception calling "Create" with "1" argument(s): "At line:4 char:21
+ def _ansiballz_main():
+                     ~
An expression was expected after '('.
At line:13 char:27
+     except (AttributeError, OSError):
+                           ~
Missing argument in parameter list.
At line:15 char:7
+     if scriptdir is not None:
+       ~
Missing '(' after 'if' in if statement.
At line:22 char:7
+     if sys.version_info < (3,):
+       ~
Missing '(' after 'if' in if statement.
At line:22 char:30
+     if sys.version_info < (3,):
+                              ~
Missing expression after ','.
At line:22 char:25
+     if sys.version_info < (3,):
+                         ~
The '<' operator is reserved for future use.
At line:24 char:32
+
“异常调用”Create“时在第4行加上参数“1:”,字符:21
+def_ansiballz_main():
+                     ~
在“(”之后应该有一个表达式。
第13行字符:27
+除了(属性错误、操作错误):
+                           ~
参数列表中缺少参数。
第15行字符:7
+如果scriptdir不是None:
+       ~
if语句中“if”之后缺少“(”。
第22行字符:7
+如果sys.version_info<(3,):
+       ~
if语句中“if”之后缺少“(”。
第22行字符:30
+如果sys.version_info<(3,):
+                              ~
“,”之后缺少表达式。
第22行字符:25
+如果sys.version_info<(3,):
+                         ~

“尝试将regexp字符串更改为双引号:


regexp:“baseline.local”

我和我的队友怀疑,这个问题是由于试图在windows目标上使用非windows内置的ansible模块造成的,尤其是在没有安装python的目标上。我们怀疑ansible控制器上编译python的某些部分或随后在windows上执行python二进制文件目标才是问题的真正根源。我们已经决定采用win_shell和powershell的“替换”来解决问题。

您使用的是什么版本的Ansible?我没有看到同样的问题。我在python 2.7上使用Ansible 2.8.3。也许更重要的是,我在运行Windows服务器也许吧。不幸的是,我手头没有任何Windows服务器为您验证这一点。如果您能够在linux服务器上测试相同的代码,并且如果它工作正常,可能会向Ansible社区证明存在错误。尽管我必须读一些书,看看是否有任何不是为Windows显式编写的Ansible模块会正常工作我还没有找到任何地方说ansible replace模块不应该在windows目标上工作…但是因为它不是“windows”模块之一,也许应该理解它?我不知道。无论如何,谢谢你的帮助