【问题标题】:Surround value in quotes before newline在换行符之前用引号括起来
【发布时间】:2019-08-06 00:19:33
【问题描述】:

我正在制作一个 jinja2 模板来管理某些网络设备上的 SSH 密钥。 我有一个名为user_info 的字典,基本上是{"username":"ssh_key"}

为了使配置正常工作,我需要将 SSH 密钥括在“”中 这在 jinja2 中很容易做到,就像这样:

system {
    login {
        {% for key, value in user_info.items() %}
        user {{ key }} {
        class super-user; 
        authentication {
            ssh-rsa "{{ value }}"
            }
        }
        {% endfor %}
    }
}

注意{{ value }} 周围的“” 我遇到的问题是 dict 在 ssh-key 的末尾有一个换行符,例如:

'bob': 'ssh-rsa this-is-my-ssk-key\n'

所以我需要将ssh-rsa this-is-my-ssk-key 包装在“”中,但在新行之前。

我需要将 \n 保留在那里,因为有些人有多个 ssh 密钥,而 \n 是它将它们分开的方式。例如

'bob': 'ssh-rsa this-is-my-ssk-key\n ssh-rsa another-ssh-key\n ssh-rsa yes-this-is-one-more-ssh-key'

所以我需要在新行之前用“”包裹每个 ssh-rsa 部分... 这可能吗?

【问题讨论】:

  • 将它们拆分为列表并仅将它们保留为列表。然后您可以将"" 添加到每个项目并使用'\n' 将它们连接回来,或者您可以在模板中使用for-loop 以使用"{{ value }}" 分别显示每个元素
  • 你的意思是把 ssh-keys 拆分成一个列表还是整个东西而不使用字典?我将在哪里进行拆分?在 jinja2 或我的 python 代码中?
  • 你想要第一个 ssh 密钥吗?
  • 不,我需要所有这些
  • 仅将ssh-rsa 拆分为列表并将此列表保存在您的字典中。当你得到它时,在 python 中执行它。

标签: python jinja2


【解决方案1】:

如果他们都需要自己走,试试这个。 .strip() 将在拆分前删除任何尾随的换行符

authentication {
    {% for key in value.strip().split('\n') %}
        ssh-rsa "{{ key }}"
    {% endfor %}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-12
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多