Metadata-Version: 2.1
Name: env2yaml
Version: 0.2.0
Summary: 将环境变量渲染到YAML文件中的工具
Home-page: https://github.com/yourusername/env2yaml
Author: jianli hu
Author-email: 1879324764@qq.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: >=3.6
Description-Content-Type: text/markdown

# env2yaml 工具使用说明

`env2yaml` 是一个将环境变量文件渲染到  YAML 文件中的工具。

- 支持 jinja2 语法，可以根据环境变量的值动态渲染 YAML 文件。
- 支持变量扩展，可以根据环境变量的值动态扩展变量的值。

## 安装
```
pip install env2yaml
```

### 基本用法

```bash
env2yaml -h
usage: env2yaml [-h] --input_ini INPUT_INI --input_yaml INPUT_YAML --output_yaml OUTPUT_YAML [--dry-run]

环境变量渲染到YAML文件

optional arguments:
  -h, --help            show this help message and exit
  --input_ini INPUT_INI
                        环境变量文件路径
  --input_yaml INPUT_YAML
                        模板YAML文件路径
  --output_yaml OUTPUT_YAML
                        输出YAML文件路径
  --dry-run             仅输出渲染结果，不写入文件


env2yaml --input_ini=config.env --input_yaml=test.yml --output_yaml=test_output.yaml
env2yaml --input_ini=config.env --input_yaml=test.yml --output_yaml=test_output.yaml --dry-run
```

- `--input_ini`: 环境变量文件路径
- `--input_yaml`: YAML模板文件路径
- `--output_yaml`: 输出文件路径
- `--dry-run`: 仅输出渲染结果，不写入文件（可选）

### 示例

#### 环境变量文件 (config.env)

```ini
DB_HOST=127.0.0.1
MYSQL_DB=test
MYSQL_PORT=${MYSQL_PORT:3307}
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_ENABLED=true
REDIS_CONNECTION=redis://${REDIS_HOST}:${REDIS_PORT}
BASE_DIR=/opt/app
LOG_DIR=${BASE_DIR}/logs
LOG_FILE=${LOG_DIR}/app.log
HOSTS=host1,host2,host3
```

#### YAML模板文件 (test.yml)

```yaml
---
hosts: web
remote_user: root
gather_facts: no
vars:
  DB_HOST: "{{ DB_HOST }}"
  MYSQL_DB: "{{ MYSQL_DB }}"
  MYSQL_PORT: "{{ MYSQL_PORT }}"
  REDIS_HOST: "{{ REDIS_HOST }}"
  BASE_DIR: "{{ BASE_DIR }}"
  LOG_DIR: "{{ LOG_DIR }}"
  LOG_FILE: "{{ LOG_FILE }}"
  {%- if REDIS_ENABLED %}
  REDIS_CONNECTION: "{{ REDIS_CONNECTION }}"
  {%- endif %}
  {%- for host in HOSTS %}
  HOST_{{ loop.index0 }}: "{{ host }}"
  {%- endfor %}
```
#### 渲染后的输出 (test_output.yaml)

```yaml
---
hosts: web
remote_user: root
gather_facts: no
vars:
  DB_HOST: "127.0.0.1"
  MYSQL_DB: "test"
  MYSQL_PORT: "3307"
  REDIS_HOST: "127.0.0.1"
  BASE_DIR: "/opt/app"
  LOG_DIR: "/opt/app/logs"
  LOG_FILE: "/opt/app/logs/app.log"
  REDIS_CONNECTION: "redis://127.0.0.1:6379"
  HOST_0: "host1"
  HOST_1: "host2"
  HOST_2: "host3"
```





## 开发注意事项

- 环境变量文件支持 `key=value` 和 `key="value"` 格式
- 支持注释行（以 `#` 开头的行）
- 空行将被忽略
- 工具使用Jinja2模板引擎，支持变量引用、条件判断、循环等

## 高级功能

### 变量扩展

工具支持在环境变量值中使用变量扩展，格式为 `${VAR_NAME}`。例如：

```ini
BASE_DIR=/opt/app
LOG_DIR=${BASE_DIR}/logs
LOG_FILE=${LOG_DIR}/app.log
```

在这个例子中，`LOG_DIR` 的值会被扩展为 `/opt/app/logs`。

### 变量默认值

工具支持为变量引用指定默认值，格式为 `${VAR_NAME:DEFAULT_VALUE}`。如果 `VAR_NAME` 不存在，则使用 `DEFAULT_VALUE`。


环境变量文件 (config.env)

```ini
DB_HOST=127.0.0.1
MYSQL_DB=test
# 支持默认值
MYSQL_PORT=${MYSQL_PORT:3307}
```

YAML模板文件 (test.yml)

```yaml
---
hosts: web
remote_user: root
gather_facts: no
vars:
  DB_HOST: "{{ DB_HOST }}"
  MYSQL_DB: "{{ MYSQL_DB }}"
  MYSQL_PORT: "{{ MYSQL_PORT }}"   #使用默认值
```

渲染后的输出

```yaml
---
hosts: web
remote_user: root
gather_facts: no
vars:
  DB_HOST: "127.0.0.1"
  MYSQL_DB: "test"
  MYSQL_PORT: "3307"
```


