为传递给bash保留来自std的引号



好了,这有点复杂不过我有一个python脚本可以消化json文件并打印出该文件的字符串表示形式如下

for id in pwds.keys():
secret += f"'{id}' : '{pwds[id]['username']},{pwds[id]['pswd']}',"
secret = secret[:-1] + "}'"
print(secret)

由jenkins管道接收,因此它可以传递给bash脚本

def secret_string = sh (script: "python3 syncToSecrets.py", returnStdout: true)
sh label: 'SYNC', script: "bash sync.sh  ${ENVIRONMENT} ${secret_string}"

我可以看到,当python打印输出时,它看起来像

'{"key": value", "key":"value"}"但是当它变成secret_string,以及bash脚本时,它看起来是这样的{key: value, key: value}

这是bash脚本调用它的方式

ENV=$1; SECRET_STRING=$2;
aws secretsmanager create-secret --name NAME --secret-string "${SECRET_STRING}"

这在技术上是可行的,它只是上传整个东西作为一个字符串,而不是离散的kv对。

我正在尝试用AWS CLI运行一些东西,它要求数据用引号包装,但到目前为止,我完全无法在进程之间保持引号。任何建议吗?

pwds字典数据示例:

import json
pwds = {
'id001': {
'username': 'user001',
'pswd': 'pwd123'
},
'id002': {
'username': 'user002',
'pswd': 'pwd123'
}    
}

正如SuperStormer建议的那样,使用Python类型(dict, list等)而不是构建自己的JSON会更好。

secrets = [{id: f"{val['username']}, {val['pswd']}"} for id, val in pwds.items()]
json.dumps(secrets)

'[{"id001": "user001, pwd123"}, {"id002": "user002, pwd123"}]'

JSON字符串应该在Jenkins脚本块中可用。尝试使用单引号或--secret-string file://secrets.json作为替代。

相关内容