>上下文
我有一个创建配置文件的 Ansible 模板。此模板使用的大多数变量都来自一些稳定的源,例如剧本中定义的变量。但是,一个变量包含一个密钥,如果它不存在,则需要以某种方式生成。
我希望 Ansible 根据需要生成密钥。我不希望密钥存储在运行 Ansible 的操作系统上,就像使用password
模块那样。当然,我想要幂等性。
我目前有一个可行的解决方案,但我对它不满意,因此我在这里提出问题。我当前的解决方案使用一个额外的文件,该文件包含在我的模板创建的配置文件中。这是可能的,因为它是一个PHP文件。我有一个使用shell
模块的任务,该模块在此额外文件不存在时生成密钥,然后另一个任务使用注册变量创建它。
- name: Generate secret key
shell: openssl rand -hex 32
register: secret_key_command
when: not SecretKey.stat.exists
- name: Create SecretKey.php
template:
src: "SecretKey.php.j2"
dest: "{{ some_dir }}/SecretKey.php"
when: not SecretKey.stat.exists
肯定有一种不那么做作的方法可以做到这一点吗?
问题
有没有一种好方法可以让一个变量在 Ansible 模板中只生成一次?
我不确定,但我理解正确,如果模板尚不存在,我们希望生成您的模板。因此,您可以执行以下操作:
- name: Create SecretKey.php
template:
src: "SecretKey.php.j2"
dest: "{{ some_dir }}/SecretKey.php"
force: no
force: no
告诉如果文件已经存在,请不要覆盖该文件。无需进行额外的检查。