英文:
Retrieve parameters from AWS SSM with ansible
问题
- 名称: 获取环境变量
本地操作: set_fact "{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region='eu-west-1', shortnames=True, bypath=True, recursive=True, on_missing='skip' ) }}"
- 名称: 创建 .env 文件
ansible.builtin.template:
src: env.file.j2
dest: /opt/docker-swarm-stack/{{ stack_name }}/.env
mode: "0600"
成为: true
模板内容如下:
{% for key, value in env_content.items() %}
{{ key }}={{ value }}
{% endfor %}
错误信息:
致命: [remote_host -> localhost]: 失败! => {"msg": "在模板化字符串时发生模板错误: 意外的模板结束,预期 ','.. 字符串: \"{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region"}
尝试过的任务:
- 名称: 获取环境变量
本地操作: set_fact "{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region='eu-west-1', shortnames=True, bypath=True, recursive=True, on_missing='skip' ) }}"
但是在lookup前没有{{
,最后没有}}
,但是出现了以下错误:
TASK [docker-swarm-stack : 获取环境变量] **************************************************************************************************************************************************************
在执行任务时发生了异常。要查看完整的回溯信息,请使用 -vvv。错误是: NoneType: None
致命: [remote_host -> localhost]: 失败! => {"changed": false, "msg": "变量名 '\" lookup('aws_ssm', '/myi-homemade-apps-config/development/service', region' 不是有效的。变量必须以字母或下划线字符开头,并且只能包含字母、数字和下划线。"}
英文:
I need to retrieve some parameters from AWS SSM with ansible to create an env file. I tried this tasks:
- name: Get enviroment vars
local_action: set_fact "{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region='eu-west-1', shortnames=true, bypath=true, recursive=true, on_missing='skip' ) }}"
- name: Create .env file
ansible.builtin.template:
src: env.file.j2
dest: /opt/docker-swarm-stack/{{ stack_name }}/.env
mode: "0600"
become: true
I set local_action because I need this task being executed in the local host, not in remote.
The template has:
{% for key, value in env_content.items() %}
{{key}}={{value}}
{% endfor %}
When I play the playbook, I get this error:
fatal: [remote_host -> localhost]: FAILED! => {"msg": "template error while templating string: unexpected end of template, expected ','.. String: \"{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region"}
What I'm doing wrong?
Thanks
I tried this task:
local_action: set_fact "{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region='eu-west-1', shortnames=true, bypath=true, recursive=true, on_missing='skip' ) }}"
Without the {{ before lookup and without the last }} but I get this error:
TASK [docker-swarm-stack : Get enviroment vars] **************************************************************************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: NoneType: None
fatal: [remote_host -> localhost]: FAILED! => {"changed": false, "msg": "The variable name '\" lookup('aws_ssm', '/myi-homemade-apps-config/development/service', region' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores."}
答案1
得分: 0
以下是您要翻译的部分:
主要问题是set_fact没有被提供一个父级事实来存储来自SSM的所有参数。
这是一个更新后的代码,适用于您:
- name: 获取SSM参数
local_action:
module: ansible.builtin.set_fact
env_content: "{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region='eu-west-1', shortnames=true, bypath=true, recursive=true, on_missing='skip' ) }}"
shortnames=true, bypath=true,
recursive=true)
- name: 创建.env文件
ansible.builtin.template:
src: env.file.j2
dest: /opt/docker-swarm-stack/{{ stack_name }}/.env
mode: "0600"
become: true
这个解决方案将提取与您路径匹配的所有SSM参数,并将它们存储为env_content
事实的目录条目。您的模板已经在迭代env_content
以提取键/值对。
希望能对您有所帮助!
英文:
The main problem is that set_fact is not being given a parent fact to store all your parameters from SSM.
Here's an updated code that will work for you.
- name: Get SSM parameters
local_action:
module: ansible.builtin.set_fact
env_content: "{{ lookup('aws_ssm', '/myi-homemade-apps-config/{{ service_environment }}/{{ stack_name }}', region='eu-west-1', shortnames=true, bypath=true, recursive=true, on_missing='skip' ) }}"
shortnames=true, bypath=true,
recursive=true) }}"
- name: Create .env file
ansible.builtin.template:
src: env.file.j2
dest: /opt/docker-swarm-stack/{{ stack_name }}/.env
mode: "0600"
become: true
This solution will pull all parameters from SSM that match your path, and store them as directory entries to the env_content
fact. Your template is already iterating over the env_content
to pull the key/value pairs.
Hope that helps!
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论