好了,这有点复杂不过我有一个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
作为替代。