Nomad作业文件中base64encode未正确编码变量值如何解决
根本原因
你之前的写法都是在*HCL配置解析阶段(作业提交时)*执行base64encode函数,此时NOMAD_ADDR_serviceA这类Nomad运行时注入的变量还没有生成实际值,HCL只会将其识别为普通字符串处理,因此最终得到的就是固定的字符串编码结果。
解决方案
方案1:使用Nomad template块(推荐)
Nomad的template块会在分配启动后、任务运行前执行渲染,此时运行时变量已经完成注入,可以直接读取实际值做编码,同时支持直接将渲染结果注入为任务环境变量:
task "你的任务名" { # 其余任务配置(driver、resources等)保持不变 template { data = <<EOF HOST_ID={{ env "NOMAD_ADDR_serviceA" | base64Encode }} EOF destination = "local/task_env" env = true # 开启后会自动将渲染文件中的键值对注入为任务环境变量 } # 原有env块中不需要再定义HOST_ID }
注:
env = true参数需要Nomad 0.12及以上版本支持,低版本可以在任务启动命令中执行source local/task_env加载变量。
方案2:启动命令中通过Shell处理
如果不想引入template块,也可以将编码逻辑放到任务启动的Shell执行阶段,此时运行时变量已经注入到Shell环境中:
task "你的任务名" { driver = "docker" # 也支持exec等原生支持Shell的驱动 config { command = "/bin/sh" args = ["-c", "export HOST_ID=$(echo -n $NOMAD_ADDR_serviceA | base64 -w 0) && exec 你的原有启动命令"] } }
内容的提问来源于stack exchange,提问作者obviyus
相关产品推荐
相关产品推荐

