首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Bash变量的Saltstack cloud.map

带Bash变量的Saltstack cloud.map
EN

Stack Overflow用户
提问于 2021-02-19 18:21:58
回答 2查看 45关注 0票数 0

我正在尝试使用封装在bash脚本中的Salt Cloud在VMWare中提供一个Windows虚拟机,以便我可以对其进行参数化,但是我在map_data的转义方面遇到了问题。

我的命令是:

代码语言:javascript
复制
#!/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。

我已经尝试将变量内联到命令中:

代码语言:javascript
复制
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"$hostname":{"folder":"$folder,"devices":{"network":{"Network adapter 1":{"ip":"$ip"}}}}}]}'

这就是复制概要文件中的模板,然后通过vmware错误提示可变元素不正确

我还尝试将整个地图数据封装在一个变量中,转义双引号并传递,例如,

代码语言:javascript
复制
data="'{\"PROFILE\":[{\"$hostname\":{\"folder\":\"$folder\",\"devices\":{\"network\":{\"Network adapter 1\":{\"ip\":\"$ip\"}}}}}]}'"

如果我回显它,它似乎可以正确地展开,但当我将它添加到我的命令中时:

代码语言:javascript
复制
salt salt-cloud cloud.map_run map_data=$data

我得到以下错误:

代码语言:javascript
复制
Passed invalid arguments to cloud.map_run: map_run() takes at most 1 argument (10 given)

我知道严格来说这可能不是Salt的问题,但我想知道是否有人能给我一些如何继续的指点?

EN

回答 2

Stack Overflow用户

发布于 2021-02-19 20:53:26

你有没有尝试过这样的字符串连接:

代码语言:javascript
复制
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"'$hostname'":{"folder":"'$folder',"devices":{"network":{"Network adapter 1":{"ip":"'$ip'"}}}}}]}'
票数 0
EN

Stack Overflow用户

发布于 2021-02-19 20:53:33

我自己不使用云应用程序,所以我不能测试它,但是看看你给出的第一个命令:

代码语言:javascript
复制
salt salt-cloud cloud.map_run map_data='{"PROFILE":[{"$hostname":{"folder":"$folder,"devices":{"network":{"Network adapter 1":{"ip":"$ip"}}}}}]}'

因为变量放在单引号中,所以它们不会展开。所以这是行不通的。

您给出的第二个命令:

代码语言:javascript
复制
data="'{\"PROFILE\":[{\"$hostname\":{\"folder\":\"$folder\",\"devices\":{\"network\":{\"Network adapter 1\":{\"ip\":\"$ip\"}}}}}]}'"

看起来是正确的,它将展开变量,但与第一个命令相比,它还将在字符串中添加单引号(我想你忘了删除这些?)。

同样在您的第一个命令中,“似乎在$folder之后缺少”。

修复这些错误给了我一个命令:

代码语言:javascript
复制
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是否正确。这将帮助您查找缺少引号之类的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66275735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档