【问题标题】:How to install chef extension via azure sdk如何通过 azure sdk 安装 Chef 扩展
【发布时间】:2015-09-10 02:30:36
【问题描述】:

我需要通过 Java Azure SDK 创建具有包含 Chef 扩展的角色的部署。我有下一个设置扩展参数的代码,但它不起作用。

作为示例,我在 Python http://blogs.msdn.com/b/shwetasblogs/archive/2015/02/19/creating-deployment-amp-customizing-linux-vms-with-python-amp-chef-part-2.aspx 中使用下一个材料

private void withExtension(Role role) {
        ArrayList<ResourceExtensionReference> references = new ArrayList<ResourceExtensionReference>();
        ResourceExtensionReference reference = new ResourceExtensionReference();
        reference.setReferenceName("LinuxChefClient");
        reference.setVersion("11.*");
        reference.setPublisher("Chef.Bootstrap.WindowsAzure");
        reference.setName("LinuxChefClient");

        ResourceExtensionParameterValue publicConfig = new ResourceExtensionParameterValue();
        publicConfig.setType("Public");
        publicConfig.setKey("PublicParams");
        String value = "{\n" +
                "  \"client_rb\": \"chef_server_url \\\"https://<chefServerUri>\\\"\\nnode_name \\\"<vmName>\\\"\\nvalidation_key \\\"/etc/chef/validation.pem\\\"\\nlog_location  \\\"/etc/chef/client.log\\\"\\nlog_level  :info\\njson_attribs \\\"/etc/chef/role.json\\\"\",\n" +
                "  \"run_list\": [\"role[base]\"]\n" +
                "}";
        publicConfig.setValue(value);


        ResourceExtensionParameterValue privateConfig = new ResourceExtensionParameterValue();
        privateConfig.setType("Private");
        privateConfig.setKey("PrivateParams");
        privateConfig.setValue("{ \"validation_key\": \"" + VALIDATION_PEM + "\" }");

        ArrayList<ResourceExtensionParameterValue> parameterValues = new ArrayList<ResourceExtensionParameterValue>();


    parameterValues.add(publicConfig);
            parameterValues.add(privateConfig);
reference.setResourceExtensionParameterValues(parameterValues);

        references.add(reference);

        role.setResourceExtensionReferences(references);
}

【问题讨论】:

  • 两个问题:1.你遇到了什么错误? 2.您的私有和公共配置似乎没有使用base64加密。你试过改变它吗?

标签: java azure cloud chef-infra


【解决方案1】:

您似乎没有加密privateConfigpublicConfig 的值。作为official document description(Request body part),在设置值之前,我们需要对这些值进行加密:

    <PublicConfiguration>
base-64-encoded-xsd-for-extension-public-configuration
</PublicConfiguration>
      <PrivateConfiguration>
base-64-encoded-xsd-for-extension-private-configuration
</PrivateConfiguration>

请尝试将此代码添加到您的项目中:

value=Base64.encode(value.getBytes(Charset.forName("UTF-8")));

顺便说一下,如果上面的代码不起作用,请分享更多错误信息。

【讨论】:

  • Azure SDK for Java - 在内部加密值。如果更改 WINdows 机器的扩展名,它可以正常工作,但对于 Linux (Ubuntu) - 没有任何反应。它也不能通过 Azure Powershell (CustomScriptForLinux) azure.microsoft.com/blog/2014/08/20/…
【解决方案2】:

我无法添加评论,所以在回复中问我的问题 -

  1. 您看到的错误是什么?
  2. 您的虚拟机创建成功了吗?

乔治,请回答这些问题,以便我能更好地帮助你。对了,你可以查看博客-http://blogs.msdn.com/b/azureossds/archive/2015/09/08/accessing-vm-extensions-like-chef-using-azure-sdk-for-java-programmatically.aspx

用于使用 Azure sdk for Java 访问扩展。您必须修改代码以设置扩展引用才能创建新的。

希望这会有所帮助!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2015-12-30
    • 2018-11-01
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多