无法创建 %UserProfile% 目录

Cannot get ansible to create %UserProfile% directory

我有一个应用程序创建了一个实际名为 %UserProfile% 的目录。我不知道如何让 Ansible 理解并使用该名称。

我想创建目录 D:\Downloads\CloneApp\cloneapptorun\Backup\Windows Documents\%UserProfile%

我找不到告诉 ansible 做什么工作的方法。我尝试了很多组合。下面的代码是我使用的基本结构:

- name: Create local staging cloneapp package directory
  win_file:
    path: "{{ remote_cloneapp_package_folder }}"
    state: directory
- name: Create local staging cloneapp package userprofile documents documents directory
  win_file:
    path: /unsafe "{{ remote_cloneapp_package_folder }}\Backup\Windows Documents\{%raw%}%UserProfile%{%endraw%}"
    state: directory

Giving:
fatal: [192.168.2.96]: FAILED! => {"changed": false, "msg": "Get-AnsibleParam: Parameter 'path' has an invalid path '/unsafe \"c:\Downloads\CloneApp\cloneapptorun\\Backup\Windows Documents\\C:\Users\mbengtss\"' specified."}

我在最后的路径部分尝试了很多组合。喜欢:

  1. path: "{{ remote_cloneapp_package_folder }}\Backup\Windows Documents\{%raw%}.%UserProfile.%{%endraw%}"

    直接从 ansible 提供不正确的语法,不可运行

  2. 路径:'{{ remote_cloneapp_package_folder }}\Backup\Windows 文件{{ %raw% }}%UserProfile%{{ %endraw% }}'

    给予:致命:[192.168.2.96]:失败! => {"msg": "template error while templating string: unexpected '%'. String: {{ remote_cloneapp_package_folder }}\Backup\Windows Documents\{{ %raw% }}%UserProfile%{{ %endraw% }}"}

  3. 路径:{{ remote_cloneapp_package_folder }}\Backup\Windows 文件{{ % }}用户资料{{ % }}

    给予:致命:[192.168.2.96]:失败! => {"msg": "template error while templating string: unexpected '%'. String: {{ remote_cloneapp_package_folder }}\Backup\Windows Documents\{{ % }}UserProfile{{ % }}"}

  4. 路径:'{{ remote_cloneapp_package_folder }}\Backup\Windows Documents\%UserProfile%'

    给予:致命:[192.168.2.96]:失败! => {"changed":错误,"msg":"The given path's format is not supported."}

  5. 路径:'"{{ remote_cloneapp_package_folder }}\Backup\Windows Documents\%UserProfile%"'

    给予:致命:[192.168.2.96]:失败! => {"changed":错误,"msg":"The given path's format is not supported."}

  6. 路径:“{{ remote_cloneapp_package_folder }}\Backup\Windows Documents\\%UserProfile\%”

    给出:语法错误,不可运行,直接来自 ansible

None 次尝试导致 Ansible 创建所需的目录,尽管第一个目录部分是根据需要创建的。

如何定义最后一个路径字符串以使其有效?我确实希望目录保持原样。所以问题不在于更改目录名称,而在于让 Ansible 理解并创建当前命名的目录名称。

--- 垫子 ---

哇,那是残酷的,但我学到了很多关于 ansible 的知识,作为为你的问题设置测试环境的副作用。

答案似乎是利用 % 环境扩展行为来注入一个值,该值本身 受环境扩展的影响:

- win_file:
     path: 'c:\temp\%sneaky%'
     state: directory
  environment:
     # any name will do, so long as it is not an existing env-var
     sneaky: '%UserProfile%'

但是,根据您在其他多少地方引用了这个名字非常奇怪的目录,您可能会有很多,很多 祝你好运,将它命名为合理且仅此而已在最后一刻将其重命名为 "desired" 名称(从 win_command 文档中获得灵感,它允许使用 args: stdin: 来避免引用地狱):

- win_command: powershell.exe -
  args:
    stdin: 'mv c:\temp\something c:\temp\%UserProfile%'

是的,我知道也可以使用 win_command 在第一个代码片段中创建目录,但我更感兴趣的是看看是否有任何方法可以做你原来的事情问