Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Chef infra 使用JClouds Chef创建新环境_Chef Infra_Environment_Jclouds - Fatal编程技术网

Chef infra 使用JClouds Chef创建新环境

Chef infra 使用JClouds Chef创建新环境,chef-infra,environment,jclouds,Chef Infra,Environment,Jclouds,我正在尝试使用来在vCenter中引导和配置新配置的Linux虚拟机。我们的DevOps团队(我们的“厨师”)最近在我们所有的食谱中引入了环境的概念,有人告诉我,我现在需要更新我的JClouds厨师代码来动态构建新环境。目前,我有以下代码,仅指定要使用的现有环境: // Here, "node.getEnvironment()" might return "ourapp_dev" or "ourapp_test", etc. bootstrapConfig bootstrapConfig = B

我正在尝试使用来在vCenter中引导和配置新配置的Linux虚拟机。我们的DevOps团队(我们的“厨师”)最近在我们所有的食谱中引入了环境的概念,有人告诉我,我现在需要更新我的JClouds厨师代码来动态构建新环境。目前,我有以下代码,仅指定要使用的现有环境:

// Here, "node.getEnvironment()" might return "ourapp_dev" or "ourapp_test", etc.
bootstrapConfig bootstrapConfig = BootstrapConfig.builder()
    .environment(node.getEnvironment()).runList(runlist).build();
但是现在我必须自己创造环境,在飞行中不要使用我们的Chef服务器上已有的现有版本

有人告诉我,我可以用这个对象来做这个创作。考虑到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来重现上述配置,特别是当涉及到将
appname
port
作为变量注入时。有什么想法吗?

可以使用Environment builder对象设置食谱版本。它有一个方法,可以接受
映射
,您可以使用它来配置它们

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

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

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