Ssh 使用Ansible,如何在不丢失左边填充的情况下将私钥写入文本文件?
换句话说,我希望Ansible变量中的内容写入配置文件中的特定“列”,而不希望对该内容进行包装 任务:Ssh 使用Ansible,如何在不丢失左边填充的情况下将私钥写入文本文件?,ssh,ansible,jinja2,Ssh,Ansible,Jinja2,换句话说,我希望Ansible变量中的内容写入配置文件中的特定“列”,而不希望对该内容进行包装 任务: -名称:构建云初始化文件 地方行动: 模块:ansible.builtin.template src:cloud_config.j2 目标:./cloud\u config.yml 模式:0640 标签:['containers','containers:configuration'] 位于vault文件中的变量: machineuser\u键:| -----开始OPENSSH私钥-----
-名称:构建云初始化文件
地方行动:
模块:ansible.builtin.template
src:cloud_config.j2
目标:./cloud\u config.yml
模式:0640
标签:['containers','containers:configuration']
位于vault文件中的变量:
machineuser\u键:|
-----开始OPENSSH私钥-----
B3BLBNNZAC1RZXKTDJEAAABG5VBMUAAAAAAEBM9UZQAAAABAABALWAAAZC2GTCN
...
模板:
write\u文件:
{#ssh config以允许部署用户获取Ansible repo}
{#见https://docs.github.com/en/developers/overview/managing-deploy-keys#machine-用户#}
-路径:/home/{gcp\u deploy\u user}}/.ssh/{{gcp\u deploy\u user}}}\u github\u rsa
权限:600
所有者:{{gcp_部署_用户}
内容:|
{{machineuser_key}
该模板任务的输出:
write\u文件:
-路径:/home/omegasphinx/.ssh/omegasphinx\u github\u rsa
权限:600
所有者:omegasphinx
内容:|
-----开始OPENSSH私钥-----
B3BLBNNZAC1RZXKTDJEAAABG5VBMUAAAAAAEBM9UZQAAAABAABALWAAAZC2GTCN
...
我知道当人们想要编写配置文件时,blockinfle
是一个推荐的模块,我应该使用。但是当我做这些事情时,它仍然会包装ssh密钥的内容。blockinfle
任务如下所示:
-name:将ssh私钥添加到云初始化文件
地方行动:
模块:ansible.builtin.blockinfile
路径:cloud_config.yml
模式:0440
插入后面的文字:“#machineuser_ssh_块”
块:| 2
-路径:/home/{gcp\u deploy\u user}}/.ssh/{{gcp\u deploy\u user}}}\u github\u rsa
权限:600
所有者:{{gcp_部署_用户}
内容:|
{{machineuser_key}
标签:['containers','containers:configuration']
.j2
模板如下所示:
write\u文件:
#机器操作员\u ssh\u块
然后,输出如下所示(完全相同):
write\u文件:
-路径:/home/omegasphinx/.ssh/omegasphinx\u github\u rsa
权限:600
所有者:omegasphinx
内容:|
-----开始OPENSSH私钥-----
B3BLBNNZAC1RZXKTDJEAAABG5VBMUAAAAAAEBM9UZQAAAABAABALWAAAZC2GTCN
...
我尝试过的其他事情:
- 我在编辑器中禁用空格的制表符,然后在
变量中ssh键的每一行之前添加制表符machineuser_-key
- 文件中说“你可以通过在块的开头加一个加号(+)来手动禁用lstrip_块行为”;因此,我添加了一个块,然后在块内缩进变量:
给你一些我期望发生的事情的背景。Jinja文档的“”部分声明“如果存在单个尾随换行符,则删除该换行符”,但“其他空格(空格、制表符、换行符等)返回时保持不变”。在我的例子中,我有“其他空格”:变量
machineuser_key
每行左边的空格。但很明显,我遗漏了一些东西。从你的问题中我可以看出,并不是jinja空格控制干扰了你的结果,而是事实上,machineuser_key
本身嵌入了换行符;许多舵图都有相同的问题,这使您可以利用相同的解决方法:
- 利用YAML是JSON的超集这一事实
- 使用将您和YAML块放在同一页上
-path:/home/{{gcp\u deploy\u user}}/.ssh/{{gcp\u deploy\u user}}}\u github\u rsa
权限:600
所有者:{{gcp_部署_用户}
内容:{{machineuser_key}to_json}
导致
所有者:gcpawesomeuser
内容:“----开始OPENSSH私钥------\nb3blbnzac1rzxktdjaaaaababg5vbmuaaaaebm9uzqaaaaaabaablawaaadzc2gtcn\nETC等\n”
使用缩进过滤器
-path:/home/{{gcp\u deploy\u user}}/.ssh/{{gcp\u deploy\u user}}}\u github\u rsa
权限:600
所有者:{{gcp_部署_用户}
内容:|
{{machineuser|u key | indent(2)}
#(2)匹配“内容”下胡子开始的空格数
制作:
所有者:gcpawesomeuser
内容:|
-----开始OPENSSH私钥-----
B3BLBNNZAC1RZXKTDJEAAABG5VBMUAAAAAAEBM9UZQAAAABAABALWAAAZC2GTCN
等等等等等等
从你的问题中我可以看出,不是jinja空格控制干扰了你的结果,而是machineuser_key
本身嵌入了换行符;许多舵图都有相同的问题,这使您可以利用相同的解决方法:
- 利用YAML是JSON的超集这一事实
- 使用将您和YAML块放在同一页上
-path:/home/{{gcp\u deploy\u user}}/.ssh/{{gcp\u deploy\u user}}}\u github\u rsa
权限:600
所有者:{{gcp_部署_用户}
内容:{{machineuser_key}to_json}
导致
所有者:gcpawesomeuser
内容:“----开始OPENSSH私钥------\nb3blbnzac1rzxktdjaaaaababg5vbmuaaaaebm9uzqaaaaaabaablawaaadzc2gtcn\nETC等\n”
使用缩进过滤器
-path:/home/{{gcp\u deploy\u user}}/.ssh/{{gcp\u deploy\u user}}}\u github\u rsa
权限:600
所有者:{{gcp_部署_用户}
内容:|
{{machineuser|u key | indent(2)}
#与(2)马
{%+ if machineuser_key is defined %}
{{ machineuser_key }}
{% endif %}