manifest.yml渲染
警告操作
此功能未发布
lzcos-v1.2+支持manifest.yml文件的动态渲染,以便开发者可以更好的控制部署参数。
manifest.yml的转换流程为
- 开发阶段通过lzc-cli打包进xxx.lpk文件中
- 安装到微服后lpk会被解压到
/data/system/pkgm/apps/$appid
目录下 - 在被要求运行前根据
/data/system/pkgm/apps/$appid
以及UID等运行时信息一起渲染到/data/system/pkgm/run/$uid@$appid
目录下。 此时manifest.yml文件会被渲染为最终结果。应用重启后会被重新渲染,(如果多实例)每个用户会独立渲染。 - 将最终manifest.yml转换为docker规范并运行相关容器
渲染机制
使用golang的text/template
对lpk中的emanifest.yml进行渲染,您需要先熟悉一下Go官方的模板语法外 以下为一些内置的模板函数和模板参数。
内置模板函数
- spring支持的函数。(env相关除外)
stable_secrt "seed"
模板函数,用来产生稳定的密码。此函数需要传递一个任意字符串。- 同样的seed,不同应用的结果保证不相同
- 同样的seed,同样的应用不同的微服结果保证不相同
- 同样的seed,相同的应用相同的微服(未重新恢复出厂设置)保证多次调用结果相同
模板参数
主要为三个大参数(括号内为其简写方式)
.UserParams(.U)
lzc-deploy-params.yml中要求的参数.Manifest(.M)
原始未经过渲染的lzc-manifest.yml文件,可以同个这个去引用Package
之类的字段。注意这里的参数是驼峰命名法和yml中的字段名不同。.SysParams(.S)
系统相关参数.BoxName
微服的名称.BoxDomain
微服的域名.OSVersion
微服系统版本号,注意如果是测试版则会强制修改为v99.99.99-xxx
.AppDomain
应用的域名,注意此域名目前是根据开发者写死,将来会动态分配并支持管理员动态调整。.IsMultiInstance
是否为多实例部署方式,目前是开发者写死,将来版本会调整为管理员可以动态调整最终值。.DepolyUID
实际部署时的用户ID,单实例部署方案下无此字段。
小技巧
调试阶段,您可以在lzc-manifest.yml任意位置添加来渲染出所有的可用参数
xx-debug: {{ . }}
xx-debug: {{ . }}
您可以在application.route
里增加一条规则来查看最终的manifest.yml
application:
route:
- /m=file:///lzcapp/pkg/manifest.yml
application:
route:
- /m=file:///lzcapp/pkg/manifest.yml
或直接使用devshell后cat /lzcapp/pkg/manifest.yml
示例
更安全的内部密码
yml
package: cloud.lazycat.app.redmine
name: Redmine
services:
mysql:
binds:
- /lzcapp/var/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD={{ stable_secret "root_password" }}
- MYSQL_USER=LAZYCAT
- MYSQL_PASSWORD={{ stable_secret "admin_password" | substr 0 6 }}
image: registry.lazycat.cloud/mysql
redmine:
environment:
- DB_PASSWORD={{ stable_secret "root_password" }}
package: cloud.lazycat.app.redmine
name: Redmine
services:
mysql:
binds:
- /lzcapp/var/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD={{ stable_secret "root_password" }}
- MYSQL_USER=LAZYCAT
- MYSQL_PASSWORD={{ stable_secret "admin_password" | substr 0 6 }}
image: registry.lazycat.cloud/mysql
redmine:
environment:
- DB_PASSWORD={{ stable_secret "root_password" }}