【问题标题】:Creating new Environments with JClouds-Chef使用 JClouds-Chef 创建新环境
【发布时间】:2014-08-07 18:39:55
【问题描述】:

我正在尝试使用JClouds-Chef API both 在我们的 vCenter 中引导和配置新配置的 Linux 虚拟机。我们的 DevOps 团队(我们的“主厨”)最近将 Environments 概念引入了我们所有的食谱,我被告知我现在需要更新我的 JClouds-Chef 代码以动态构建新环境.目前我有以下代码,它只是指定一个现有要使用的环境:

// Here, "node.getEnvironment()" might return "ourapp_dev" or "ourapp_test", etc.
bootstrapConfig bootstrapConfig = BootstrapConfig.builder()
    .environment(node.getEnvironment()).runList(runlist).build();

但现在我必须自己动态创建环境;不要使用我们的 Chef 服务器上已有的现有环境。

有人告诉我我可以使用Environment 对象来完成这个创建。考虑到 API 的设置方式,它看起来确实是这样。但是我找不到任何可行的例子,而且我自己不是“厨师”,我很难在这里通过树木看到森林。

这是我被告知需要用作模板的环境:

name "{appname}_dev"
description "{appname} Dev Environment"
cookbook_versions({
    "our_app" => "= 0.2.0",
    "our_logs" => "= 0.1.0"
})
default_attributes(
    "our_app" => {
        "port" => "{port}",
        "app_name" => "{appname}",
        "config_vars" => {
            "useFizz" => "true",
            "host" => "devourapp",
            "context" => "devourapp/{appname}"
        },
        "jar_file_url" => "http://ourartifactory/ourrepo/com/us/{appname}/%5BRELEASE%5D/{appname}-%5BRELEASE%5D.jar"
    },
    our_logs" => {
        "some_resource" => "{appname}",
        "log_server" => "logstash.example.com"
    }              
)

显然,{ } 花括号中的任何内容都是我需要以某种方式传递的变量。例如,{appname} 可能是 fizzbuz,在这种情况下,上面的第一行必须解析为:

name "fizzbuzz_dev"

等等。我可以在 Java 代码中提前确定这些变量名:

String appname = getAppName();
String port = getPort();
// etc.

问题是我不知道如何使用Environment API 来重现上述配置,尤其是在将appnameport 作为变量注入时。有什么想法吗?

【问题讨论】:

    标签: chef-infra environment jclouds


    【解决方案1】:

    可以使用环境构建器对象设置食谱版本。它有一个接受Map<String, String> 的方法,您可以使用它来配置它们。

    属性有点棘手。由于属性结构是任意的,因此没有实用的方法可以在 Java 对象中表示它们。您必须在 Environment builder 对象中使用 attributes 方法,并将根级别的属性名称作为键,并将带有文字 json 字符串的 JsonBall 作为值。对于单个属性,如下所示,但您已经可以将整个地图直接提供给 attributes(复数)方​​法:

    envBuilder.attribute("our_app", new JsonBall("{\"foo\":true}"));
    

    您必须手动构建包含适当值的 json 字符串。

    【讨论】:

      猜你喜欢
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      相关资源
      最近更新 更多