New*_*ee2 5 environment-variables ansible
我正在尝试设置一个剧本,它将运行命令来检查安装在目标机器上的服务的状态。该命令仅在.env file执行时才有效。执行.env fileis的命令.<space>./.env_file_name,该文件包含环境变量列表,例如 exportJAVA_HOME=/optware/java/jdk/1.2.
我尝试在使用以下剧本运行命令之前执行环境文件,但它不起作用。
- hosts: name
tasks:
- name: `execute env file`
command: . ./.env_file_name
register: result
Run Code Online (Sandbox Code Playgroud)
是否有任何剧本可以运行可执行环境文件来设置目标机器上存在的环境,然后运行我们的命令?
zig*_*arn 17
首先,该. ./.env_file_name语法是shell语法,不能与command模块一起使用,需要使用shell模块。
其次,shell 环境上下文在每个任务中都会重置,因为每个任务都是 ssh 命令往返(因此是一个新的 shell 会话),并且在一个任务中加载环境变量并不会使它们可用于下一个任务。
根据您的具体情况,您有一些选择:
group_vars最好的选择是通过/host_vars将清单端的环境放在每个组/主机具有不同值的变量中,然后将其用作environment关键字
# host_vars/my_host.yml
---
env_vars:
VAR1: key1
VAR2: key2
Run Code Online (Sandbox Code Playgroud)
- hosts: my_host
tasks:
- name: Display environment variables
command: env
environment: "{{ env_vars }}"
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
如果你的任务都是shell/ command(我不建议这样做,因为最好尽可能使用适当的ansible 模块),你可以简单地每次使用 shell 模块加载 env 文件
- hosts: my_host
tasks:
- name: Display environment variables
shell: |
. ./.env_file_name && env
- name: Do another action
shell: |
. ./.env_file_name && do_something_else
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
shell模块任务此选项是一次性解析 env 文件并将其加载到 ansible 事实中以与environment关键字一起使用。
- hosts: my_host
tasks:
- name: Get env file content
slurp:
src: ./.env_file_name
register: env_file_content
- name: Parse environment
set_fact:
env_vars: "{{ ('{' + (env_file_content.content | b64decode).split('\n') | select | map('regex_replace', '([^=]*)=(.*)', '\"\\1\": \"\\2\"') | join(',') + '}') | from_json }}"
- name: Display environment variables
command: env
environment: "{{ env_vars }}"
Run Code Online (Sandbox Code Playgroud)
或者,如果需要执行 env 文件而不是直接解析:
- hosts: my_host
tasks:
- name: Get env file content
shell: . ./.env_file_name && env
register: env_file_result
- name: Parse environment
set_fact:
env_vars: "{{ ('{' + env_file_result.stdout_lines | map('regex_replace', '([^=]*)=(.*)', '\"\\1\": \"\\2\"') | join(',') + '}') | from_json }}"
- name: Display environment variables
command: env
environment: "{{ env_vars }}"
Run Code Online (Sandbox Code Playgroud)
优点:
缺点:
| 归档时间: |
|
| 查看次数: |
6968 次 |
| 最近记录: |