1

标准 Cloud Foundry 版本中的许多作业都有模板,这些模板利用 Ruby erb 将值从 bosh 部署清单插入到文件中,这些文件成为已安装组件的一部分。例如,postgresql 网关启动脚本的模板包括如下几行:

PG_ADMIN_USER=<%= properties.postgresql_gateway.admin_user || "pg_admin" %>
PG_ADMIN_GROUP=<%= properties.postgresql_gateway.admin_group || "admin" %>
PG_ADMIN_PASSWD_HASH=<%= properties.postgresql_gateway.admin_passwd_hash || "" %>

替换将按如下方式实例化文件:

PG_ADMIN_USER=adminadmin
PG_ADMIN_GROUP=admin
PG_ADMIN_PASSWD_HASH=

如果您的 bosh 发布清单中包含以下内容。

properties:
  postgresql_gateway:
    check_orphan_interval: 7200
    token: AAAeAh4BXFBXwLrrWJCpQTfeDnaCn7m
    supported_versions: ["9.0"]
    version_aliases:
      current: "9.0"
    admin_user: adminadmin
    admin_group: admin

有没有办法让我动态插入虚拟机的 IP 地址?

4

1 回答 1

3

是的。在评估这些模板表达式的上下文中还有另一个可用的对象——“spec”对象。我会留给你去挖掘并查看规范对象中所有可用的内容,但迄今为止我发现的最有用的部分之一是提供此模板的服务器 IP 地址的部分实例化。您可以在我通过 BOSH 部署示例回显服务的练习中描述的 mods中看到一个示例:

exec java \
    -jar EchoServer-0.1.0.jar \
    -ipaddress <%= spec.networks.default.ip %> \
    -port <%= properties.echoserver && properties.echoserver.port || 8080 %> \
    >>$LOG_DIR/echoserver.stdout.log \
    2>>$LOG_DIR/echoserver.stderr.log

这是您正在寻找的 spec.networks.default.ip 值。

于 2013-03-12T00:26:05.543 回答