我正在尝试使用封装在bash脚本中的Salt Cloud在VMWare中提供一个Windows虚拟机,以便我可以对其进行参数化,但是我在map_data的转义方面遇到了问题。
我的命令是:
#!/bin/bash
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"HOSTNAME":{"folder":"FOLDER","devices":{"network":{"Network adapter 1":{"ip":"MYIP"}}}}}]}'这工作得很好,但是我希望主机名、文件夹和MYIP作为变量($hostname、$folder和$ip),并且我正在努力进行转义,以便将变量扩展并正确地传递给salt。
我已经尝试将变量内联到命令中:
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"$hostname":{"folder":"$folder,"devices":{"network":{"Network adapter 1":{"ip":"$ip"}}}}}]}'这就是复制概要文件中的模板,然后通过vmware错误提示可变元素不正确
我还尝试将整个地图数据封装在一个变量中,转义双引号并传递,例如,
data="'{\"PROFILE\":[{\"$hostname\":{\"folder\":\"$folder\",\"devices\":{\"network\":{\"Network adapter 1\":{\"ip\":\"$ip\"}}}}}]}'"如果我回显它,它似乎可以正确地展开,但当我将它添加到我的命令中时:
salt salt-cloud cloud.map_run map_data=$data我得到以下错误:
Passed invalid arguments to cloud.map_run: map_run() takes at most 1 argument (10 given)我知道严格来说这可能不是Salt的问题,但我想知道是否有人能给我一些如何继续的指点?
发布于 2021-02-19 20:53:26
你有没有尝试过这样的字符串连接:
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"'$hostname'":{"folder":"'$folder',"devices":{"network":{"Network adapter 1":{"ip":"'$ip'"}}}}}]}'发布于 2021-02-19 20:53:33
我自己不使用云应用程序,所以我不能测试它,但是看看你给出的第一个命令:
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"$hostname":{"folder":"$folder,"devices":{"network":{"Network adapter 1":{"ip":"$ip"}}}}}]}'因为变量放在单引号中,所以它们不会展开。所以这是行不通的。
您给出的第二个命令:
data="'{\"PROFILE\":[{\"$hostname\":{\"folder\":\"$folder\",\"devices\":{\"network\":{\"Network adapter 1\":{\"ip\":\"$ip\"}}}}}]}'"看起来是正确的,它将展开变量,但与第一个命令相比,它还将在字符串中添加单引号(我想你忘了删除这些?)。
同样在您的第一个命令中,“似乎在$folder之后缺少”。
修复这些错误给了我一个命令:
salt salt-cloud cloud.map_run map_data="{\"PROFILE\":[{\"$hostname\":{\"folder\":\"$folder\",\"devices\":{\"network\":{\"Network adapter 1\":{\"ip\":\"$ip\"}}}}}]}"我想这应该行得通。如果你把echo放在命令前面,然后复制你的json,你可以把它复制/粘贴到像https://jsonformatter.curiousconcept.com/这样的json格式化程序中,它会告诉你你使用的json是否正确。这将帮助您查找缺少引号之类的内容。
https://stackoverflow.com/questions/66275735
复制相似问题