Java JClouds厨师长:TokenType2上出现非法访问错误?

Java JClouds厨师长:TokenType2上出现非法访问错误?,java,chef-infra,jclouds,Java,Chef Infra,Jclouds,我正在使用API使用Chef客户端引导Linux虚拟机(myapp01.me.example.com),然后通过typicalapp角色运行客户端并使用其应用程序堆栈配置虚拟机: package com.me.myorg.chef; import org.jclouds.Constants import org.jclouds.ContextBuilder import org.jclouds.chef.ChefContext import org.jclouds.chef.ChefServi

我正在使用API使用Chef客户端引导Linux虚拟机(
myapp01.me.example.com
),然后通过
typicalapp
角色运行客户端并使用其应用程序堆栈配置虚拟机:

package com.me.myorg.chef;

import org.jclouds.Constants
import org.jclouds.ContextBuilder
import org.jclouds.chef.ChefContext
import org.jclouds.chef.ChefService
import org.jclouds.chef.config.ChefProperties
import org.jclouds.chef.domain.BootstrapConfig
import org.jclouds.chef.util.RunListBuilder
import org.jclouds.compute.domain.ExecResponse
import org.jclouds.compute.domain.OsFamily
import org.jclouds.domain.LoginCredentials
import org.jclouds.scriptbuilder.domain.Statement
import org.jclouds.ssh.SshClient
import org.jclouds.sshj.config.SshjSshClientModule

import com.google.common.base.Charsets
import com.google.common.collect.ImmutableSet
import com.google.common.io.Files
import com.google.common.net.HostAndPort
import com.google.inject.Key
import com.google.inject.TypeLiteral

public class ChefProvisioner {
    public static void main(String[] args) {
        ChefProvisioner.provision()
    }

    public static provision() {
        String vmIp = "myapp01.me.example.com";     // A Linux VM living in our local vCenter
        String vmSshUsername = "admin";
        String vmSshPassword = "12345";

        String endpoint = "https://mychefserver";
        String client = "myuser";
        String validator = "chef-validator";
        String clientCredential = Files.toString(new File("C:\\Users\\myuser\\sandbox\\chef\\myuser.pem"), Charsets.UTF_8);
        String validatorCredential = Files.toString(new File("C:\\Users\\myuser\\sandbox\\chef\\chef-validator.pem"), Charsets.UTF_8);

        Properties props = new Properties();
        props.put(ChefProperties.CHEF_VALIDATOR_NAME, validator);
        props.put(ChefProperties.CHEF_VALIDATOR_CREDENTIAL, validatorCredential);
        props.put(Constants.PROPERTY_RELAX_HOSTNAME, "true");
        props.put(Constants.PROPERTY_TRUST_ALL_CERTS, "true");

        ChefContext ctx = ContextBuilder.newBuilder("chef")
            .endpoint(endpoint)
            .credentials(client, clientCredential)
            .overrides(props)
            .modules(ImmutableSet.of(new SshjSshClientModule())) //
            .buildView(ChefContext.class);
        ChefService chef = ctx.getChefService();

        List<String> runlist = new RunListBuilder().addRole("typicalapp").build();
        BootstrapConfig bootstrapConfig = BootstrapConfig.builder().runlist(runlist).build();

        chef.updateBootstrapConfigForGroup("jclouds-chef", bootstrapConfig);
        Statement bootstrap = chef.createBootstrapScriptForGroup("jclouds-chef");

        SshClient.Factory sshFactory = ctx.unwrap().utils()
            .injector().getInstance(Key.get(new TypeLiteral<SshClient.Factory>() {}));
        SshClient ssh = sshFactory.create(HostAndPort.fromParts(vmIp, 22),
        LoginCredentials.builder().user(vmSshUsername).password(vmSshPassword).build());

        ssh.connect();
        try {
            String rawScript = bootstrap.render(OsFamily.UNIX);
            ExecResponse result = ssh.exec(rawScript);
        } finally {
            ssh.disconnect();
        }
    }
}
package com.me.myorg.chef;
导入org.jclouds.Constants
导入org.jclouds.ContextBuilder
导入org.jclouds.chef.ChefContext
导入org.jclouds.chef.ChefService
导入org.jclouds.chef.config.ChefProperties
导入org.jclouds.chef.domain.BootstrapConfig
导入org.jclouds.chef.util.RunListBuilder
导入org.jclouds.compute.domain.ExecResponse
导入org.jclouds.compute.domain.OsFamily
导入org.jclouds.domain.LoginCredentials
导入org.jclouds.scriptbuilder.domain.Statement
导入org.jclouds.ssh.SshClient
导入org.jclouds.sshj.config.sshjsclientModule
导入com.google.common.base.charset
导入com.google.common.collect.ImmutableSet
导入com.google.common.io.Files
导入com.google.common.net.HostAndPort
导入com.google.inject.Key
导入com.google.inject.TypeLiteral
公共类支票提供程序{
公共静态void main(字符串[]args){
支票提供人条款()
}
公共静态条款(){
String vmIp=“myapp01.me.example.com”;//本地vCenter中的Linux虚拟机
字符串vmSshUsername=“admin”;
字符串vmshPassword=“12345”;
字符串端点=”https://mychefserver";
String client=“myuser”;
字符串验证器=“厨师验证器”;
字符串clientCredential=Files.toString(新文件(“C:\\Users\\myuser\\sandbox\\chef\\myuser.pem”)、Charsets.UTF_8);
String validatorCredential=Files.toString(新文件(“C:\\Users\\myuser\\sandbox\\chef\\chef validator.pem”)、Charsets.UTF_8);
Properties props=新属性();
props.put(ChefProperties.CHEF\u VALIDATOR\u NAME,VALIDATOR);
道具放置(ChefProperties.CHEF\u VALIDATOR\u凭证,VALIDATOR凭证);
props.put(Constants.PROPERTY_RELAX_HOSTNAME,“true”);
props.put(Constants.PROPERTY_TRUST_ALL_CERTS,“true”);
ChefContext ctx=ContextBuilder.newBuilder(“厨师”)
.endpoint(端点)
.凭据(客户端、客户端凭据)
.覆盖(道具)
.modules(ImmutableSet.of(新的SSHJSHClientModule())//
.buildView(ChefContext.class);
ChefService chef=ctx.getChefService();
List runlist=new RunListBuilder().addRole(“typicalapp”).build();
BootstrapConfig BootstrapConfig=BootstrapConfig.builder().runlist(runlist.build();
updateBootstrapConfigForGroup(“jclouds chef”,bootstrapConfig);
语句bootstrap=chef.createbootstrapsscriptforgroup(“jclouds chef”);
SshClient.Factory sshFactory=ctx.unwrap().utils()
.injector().getInstance(Key.get(new-TypeLiteral(){}));
SshClient ssh=sshFactory.create(HostAndPort.fromParts(vmIp,22),
LoginCredentials.builder().user(vmshUserName).password(vmshPassword.build());
ssh.connect();
试一试{
字符串rawScript=bootstrap.render(OsFamily.UNIX);
ExecResponse result=ssh.exec(rawScript);
}最后{
ssh.disconnect();
}
}
}
当我运行此命令时,我得到:

Exception in thread "main" java.util.ServiceConfigurationError: org.jclouds.apis.ApiMetadata: Provider org.jclouds.openstack.swift.SwiftApiMetadata could not be instantiated: java.lang.IllegalAccessError: tried to access class com.google.common.reflect.TypeResolver from class org.jclouds.util.TypeToken2
    at java.util.ServiceLoader.fail(ServiceLoader.java:224)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:377)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:323)
    at com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:633)
    at org.jclouds.apis.Apis.all(Apis.java:72)
    at org.jclouds.apis.Apis.withId(Apis.java:89)
    at org.jclouds.ContextBuilder.newBuilder(ContextBuilder.java:168)
    at org.jclouds.ContextBuilder$newBuilder.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
    at com.me.myorg.chef.ChefProvisioner.provision(ChefProvisioner.groovy:51)
    at com.me.myorg.chef.ChefProvisioner$provision.call(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
    at com.me.myorg.chef.ChefProvisioner.main(ChefProvisioner.groovy:27)
Caused by: java.lang.IllegalAccessError: tried to access class com.google.common.reflect.TypeResolver from class org.jclouds.util.TypeToken2
    at org.jclouds.util.TypeToken2.where(TypeToken2.java:47)
    at org.jclouds.rest.internal.BaseRestApiMetadata.contextToken(BaseRestApiMetadata.java:60)
    at org.jclouds.rest.internal.BaseRestApiMetadata$Builder.<init>(BaseRestApiMetadata.java:74)
    at org.jclouds.openstack.swift.SwiftApiMetadata$Builder.<init>(SwiftApiMetadata.java:85)
    at org.jclouds.openstack.swift.SwiftApiMetadata$Builder.<init>(SwiftApiMetadata.java:81)
    at org.jclouds.openstack.swift.SwiftApiMetadata$ConcreteBuilder.<init>(SwiftApiMetadata.java:108)
    at org.jclouds.openstack.swift.SwiftApiMetadata$ConcreteBuilder.<init>(SwiftApiMetadata.java:108)
    at org.jclouds.openstack.swift.SwiftApiMetadata.<init>(SwiftApiMetadata.java:60)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:374)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:373)
    ... 16 more
线程“main”java.util.ServiceConfigurationError:org.jclouds.api.ApiMetadata:Provider org.jclouds.openstack.swift.swittapimetadata中的异常无法实例化:java.lang.IllegalAccessError:试图从类org.jclouds.util.TypeToken2访问类com.google.common.reflect.TypeResolver
在java.util.ServiceLoader.fail处(ServiceLoader.java:224)
在java.util.ServiceLoader.access$100(ServiceLoader.java:181)
位于java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:377)
位于java.util.ServiceLoader$1.next(ServiceLoader.java:445)
位于com.google.common.collect.ImmutableCollection$Builder.addAll(ImmutableCollection.java:323)
位于com.google.common.collect.ImmutableSet$Builder.addAll(ImmutableSet.java:633)
位于org.jclouds.api.api.all(api.java:72)
位于org.jclouds.api.api.withId(api.java:89)
位于org.jclouds.ContextBuilder.newBuilder(ContextBuilder.java:168)
位于org.jclouds.ContextBuilder$newBuilder.call(未知来源)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
位于com.me.myorg.chef.ChefProvisioner.provision(ChefProvisioner.groovy:51)
访问com.me.myorg.chef.ChefProvisioner$provision.call(未知来源)
位于org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112)
位于com.me.myorg.chef.ChefProvisioner.main(ChefProvisioner.groovy:27)
原因:java.lang.IllegalAccessError:试图从类org.jclouds.util.TypeToken2访问类com.google.common.reflect.TypeResolver
位于org.jclouds.util.TypeToken2.where(TypeToken2.java:47)
位于org.jclouds.rest.internal.BaseRestApiMetadata.contextToken(BaseRestApiMetadata.java:60)
位于org.jclouds.rest.internal.BaseRestApiMetadata$Builder。(BaseRestApiMetadata.java:74)
在org.jclouds.openstack.swift.swittapimetadata$Builder上。(swittapimetadata.java:85)
在org.jclouds.openstack.swift.swittapimetadata$Builder上。(swittapimetadata.java:81)
在org.jclouds.openstack.swift.swittapimetadata$ConcreteBuilder上
在org.jclouds.openstack.swift.swittapimetadata$ConcreteBuilder上
位于org.jclouds.openstack.swift.swittapimetadata.(swittapimetadata.java:60)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
在sun.reflect.Na