Java JClouds厨师长未引导&;配置虚拟机

Java JClouds厨师长未引导&;配置虚拟机,java,chef-infra,jclouds,Java,Chef Infra,Jclouds,我正在尝试获取以下代码(v1.7.3)以在全新的Linux虚拟机上引导Chef客户端,然后执行运行列表以使用应用程序堆栈(typical\u app)实际配置该虚拟机: 更新:这是我运行@Ignasi Barrera建议的更改后得到的/tmp/stderr文件: --2014-07-22 10:58:14-- https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/13.04/x86_64/chef_11.12.8-2_amd64.de

我正在尝试获取以下代码(v1.7.3)以在全新的Linux虚拟机上引导Chef客户端,然后执行运行列表以使用应用程序堆栈(
typical\u app
)实际配置该虚拟机:

更新:这是我运行@Ignasi Barrera建议的更改后得到的
/tmp/stderr
文件:

--2014-07-22 10:58:14--  https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/13.04/x86_64/chef_11.12.8-2_amd64.deb
Resolving opscode-omnibus-packages.s3.amazonaws.com (opscode-omnibus-packages.s3.amazonaws.com)... 176.32.100.240
Connecting to opscode-omnibus-packages.s3.amazonaws.com (opscode-omnibus-packages.s3.amazonaws.com)|176.32.100.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33399362 (32M) [application/x-debian-package]
Saving to: ‘/tmp/install.sh.10185/chef_11.12.8-2_amd64.deb’

    0K .......... .......... .......... .......... ..........  0%  908K 36s
   50K .......... .......... .......... .......... ..........  0% 1.13M 32s
  100K .......... .......... .......... .......... ..........  0% 26.9M 22s
  150K .......... .......... .......... .......... ..........  0% 1.36M 22s
  200K .......... .......... .......... .......... ..........  0% 17.2M 18s
... omitted for brevity
32400K .......... .......... .......... .......... .......... 99% 2.64M 0s
32450K .......... .......... .......... .......... .......... 99% 26.2M 0s
32500K .......... .......... .......... .......... .......... 99% 31.9M 0s
32550K .......... .......... .......... .......... .......... 99% 6.12M 0s
32600K .......... ......                                     100% 4.09M=7.1s

2014-07-22 10:58:22 (4.49 MB/s) - ‘/tmp/install.sh.10185/chef_11.12.8-2_amd64.deb’ saved [33399362/33399362]

这里的主要挑战是,您试图在节点上运行脚本,而不使用jclouds计算服务。代码使用jclouds chef生成语句,但该语句假定由jclouds计算服务执行,该服务有自己的机制来呈现它执行的脚本

为了获得完整的原始脚本并能够使用原始SSH连接直接执行它,必须手动完成一些事情。特别是,jclouds-chef脚本假定定义了一些bash函数,并且在以这种方式呈现脚本时缺少这些函数

您应该按如下方式更改
rawString
字符串的创建:

StringBuilder rawScript=new StringBuilder();
映射resolvedFunctions=ScriptBuilder.resolveFunctionDependenciesForStatements(
新的HashMap(),ImmutableSet.of(bootstrap),OsFamily.UNIX);
ScriptBuilder.writeFunctions(resolvedFunctions、OsFamily.UNIX、rawScript);
append(bootstrap.render(OsFamily.UNIX));
put(“/tmp/chef bootstrap.sh”,rawScript.toString());
ExecResponse result=ssh.exec(“bash/tmp/chef bootstrap.sh”);
这样,最终脚本将具有所有依赖函数。还要注意的是,我没有直接运行脚本,而是将代码更改为上载脚本,然后在本地运行该文件。这将帮助您解决脚本失败时发生的问题


还请注意,脚本将在每次运行时生成
/etc/chef
目录的内容,因此,在再次运行之前,您可能需要删除该目录。

此问题似乎与主题无关,因为它包含3个不同的问题,并且没有提供简洁的解释和复制步骤。抱歉,我不同意@sethvargo-我将删除上面的第3个项目符号,但是,如果您阅读了整个问题,您将看到前两个项目非常密切相关,并且可以通过相同的代码更改来回答(正确的解决方案将允许Chef Client正确安装,执行它的线程将返回)。此外,我无法提供更简洁的解释和一套复制步骤!看看上面我说“复制…”的地方,看起来你没有读到那部分。这绝不是离题的:这是一个没有重复的编程问题,并且显示了研究成果。我很抱歉。我之前在相关问题中的回答不是100%准确,需要几个手动步骤才能正确呈现脚本。我已经在这里解释了它们,并验证了它现在是否有效。谢谢@Ignasi Barrera(+1)-请查看我的更新(包括
/tmp/stderr
)。我做了您建议的更改,现在代码确实完成了执行(没有挂起的线程),但是当我使用SSH连接到机器中时,更改看起来仍然不起作用。如果我运行
which ruby
我得到
/usr/bin/ruby
,但是
哪个chef客户端
哪个java
typicalapp
是一个java web服务器)我没有得到任何输出。没有
/etc/chef
目录,在
/tmp
目录中,我看到一个
stderr
文件,其内容实际上不包含任何错误/异常。这里有什么想法/想法吗?再次感谢!失败后,SSH进入机器,删除
/etc/chef
目录(如果存在),然后从那里手动运行脚本。您将看到输出以及可能出现的故障。目录是由脚本创建的,并且可能以前失败过。我只是建议您使用SSH连接机器并在本地运行脚本,以找出问题所在。呈现的脚本是bash,而不是sh。您是否使用“bash scriptname”运行它?是的,它将安装所有需要的内容并运行Chef。希望你能成功!
Setup complete.
Configured the bootstrapper.
[main] INFO net.schmizz.sshj.common.SecurityUtils - BouncyCastle registration succeeded
[main] WARN net.schmizz.sshj.DefaultConfig - Disabling high-strength ciphers: cipher strengths apparently limited by JCE policy
[main] INFO net.schmizz.sshj.transport.TransportImpl - Client identity string: SSH-2.0-SSHJ_0_8_1_SNAPSHOT
[main] INFO net.schmizz.sshj.transport.TransportImpl - Server identity string: SSH-2.0-OpenSSH_6.6p1 Ubuntu-2ubuntu1
Connected to SSH.
Raw script rendered.
[main] INFO net.schmizz.sshj.connection.channel.direct.SessionChannel - Will request to exec `setupPublicCurl || exit 1
curl -q -s -S -L --connect-timeout 10 --max-time 600 --retry 20 -X GET  https://www.opscode.com/chef/install.sh |(bash)
mkdir -p /etc/chef
cat >> /etc/chef/client.rb <<-'END_OF_JCLOUDS_FILE'
    require 'rubygems'
    require 'ohai'
    o = Ohai::System.new
    o.all_plugins
    node_name "jclouds-chef-" + o[:ipaddress]
    log_level :info
    log_location STDOUT
    validation_client_name "chef-validator"
    chef_server_url "https://mychefserver"
END_OF_JCLOUDS_FILE
cat >> /etc/chef/validation.pem <<-'END_OF_JCLOUDS_FILE'
    -----BEGIN RSA PRIVATE KEY-----
    <omitted for security purposes>
    -----END RSA PRIVATE KEY-----

END_OF_JCLOUDS_FILE
cat >> /etc/chef/first-boot.json <<-'END_OF_JCLOUDS_FILE'
    {"id":"jclouds-chef","run_list":["role[typical_app]"]}
END_OF_JCLOUDS_FILE
chef-client -j /etc/chef/first-boot.json
`
Bootstrap script executed...
[main] INFO net.schmizz.sshj.transport.TransportImpl - Disconnected - BY_APPLICATION
SSH closed.
And done!
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <jclouds.version>1.7.3</jclouds.version>
    </properties>
    <groupId>com.mycompany.app</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.apache.jclouds.driver</groupId>
            <artifactId>jclouds-sshj</artifactId>
            <version>${jclouds.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.jclouds.api</groupId>
            <artifactId>chef</artifactId>
            <version>${jclouds.version}</version>
        </dependency>
    </dependencies>
</project>
--2014-07-22 10:58:14--  https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/13.04/x86_64/chef_11.12.8-2_amd64.deb
Resolving opscode-omnibus-packages.s3.amazonaws.com (opscode-omnibus-packages.s3.amazonaws.com)... 176.32.100.240
Connecting to opscode-omnibus-packages.s3.amazonaws.com (opscode-omnibus-packages.s3.amazonaws.com)|176.32.100.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 33399362 (32M) [application/x-debian-package]
Saving to: ‘/tmp/install.sh.10185/chef_11.12.8-2_amd64.deb’

    0K .......... .......... .......... .......... ..........  0%  908K 36s
   50K .......... .......... .......... .......... ..........  0% 1.13M 32s
  100K .......... .......... .......... .......... ..........  0% 26.9M 22s
  150K .......... .......... .......... .......... ..........  0% 1.36M 22s
  200K .......... .......... .......... .......... ..........  0% 17.2M 18s
... omitted for brevity
32400K .......... .......... .......... .......... .......... 99% 2.64M 0s
32450K .......... .......... .......... .......... .......... 99% 26.2M 0s
32500K .......... .......... .......... .......... .......... 99% 31.9M 0s
32550K .......... .......... .......... .......... .......... 99% 6.12M 0s
32600K .......... ......                                     100% 4.09M=7.1s

2014-07-22 10:58:22 (4.49 MB/s) - ‘/tmp/install.sh.10185/chef_11.12.8-2_amd64.deb’ saved [33399362/33399362]