mirror of
https://github.com/apache/jclouds.git
synced 2025-03-04 07:19:07 +00:00
changed to group naming conventions and updated runScript syntax
This commit is contained in:
parent
4c1f8f8414
commit
4113cadb24
@ -26,7 +26,7 @@ import org.jclouds.chef.domain.Client;
|
||||
import org.jclouds.chef.domain.CookbookVersion;
|
||||
import org.jclouds.chef.domain.Node;
|
||||
import org.jclouds.chef.internal.BaseChefService;
|
||||
import org.jclouds.io.Payload;
|
||||
import org.jclouds.scriptbuilder.domain.Statement;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.io.InputSupplier;
|
||||
@ -61,39 +61,39 @@ public interface ChefService {
|
||||
/**
|
||||
* Creates all steps necessary to bootstrap and run the chef api.
|
||||
*
|
||||
* @param tag
|
||||
* @param group
|
||||
* corresponds to a configured
|
||||
* {@link org.jclouds.chef.reference.ChefConstants#CHEF_BOOTSTRAP_DATABAG databag}
|
||||
* where run_list and other information are stored
|
||||
* @return boot script
|
||||
* @see #updateRunListForTag
|
||||
*/
|
||||
Payload createClientAndBootstrapScriptForTag(String tag);
|
||||
Statement createClientAndBootstrapScriptForGroup(String group);
|
||||
|
||||
/**
|
||||
* assigns a run list to all nodes bootstrapped with a certain tag
|
||||
* assigns a run list to all nodes bootstrapped with a certain group
|
||||
*
|
||||
* @param runList
|
||||
* list of recipes or roles to assign. syntax is {@code recipe[name]} and {@code
|
||||
* role[name]}
|
||||
*
|
||||
* @param tag
|
||||
* @param group
|
||||
* corresponds to a configured
|
||||
* {@link org.jclouds.chef.reference.ChefConstants#CHEF_BOOTSTRAP_DATABAG databag}
|
||||
* where run_list and other information are stored
|
||||
* @see #makeChefApiBootstrapScriptForTag
|
||||
*/
|
||||
void updateRunListForTag(Iterable<String> runList, String tag);
|
||||
void updateRunListForGroup(Iterable<String> runList, String group);
|
||||
|
||||
/**
|
||||
* @param tag
|
||||
* @param group
|
||||
* corresponds to a configured
|
||||
* {@link org.jclouds.chef.reference.ChefConstants#CHEF_BOOTSTRAP_DATABAG databag}
|
||||
* where run_list and other information are stored
|
||||
* @return run list for all nodes bootstrapped with a certain tag
|
||||
* @return run list for all nodes bootstrapped with a certain group
|
||||
* @see #updateRunListForTag
|
||||
*/
|
||||
List<String> getRunListForTag(String tag);
|
||||
List<String> getRunListForGroup(String group);
|
||||
|
||||
void deleteAllNodesInList(Iterable<String> names);
|
||||
|
||||
|
@ -26,8 +26,8 @@ import javax.inject.Singleton;
|
||||
import org.jclouds.chef.ChefApi;
|
||||
import org.jclouds.chef.ChefAsyncApi;
|
||||
import org.jclouds.chef.domain.Client;
|
||||
import org.jclouds.chef.functions.ClientForTag;
|
||||
import org.jclouds.chef.functions.RunListForTag;
|
||||
import org.jclouds.chef.functions.ClientForGroup;
|
||||
import org.jclouds.chef.functions.RunListForGroup;
|
||||
import org.jclouds.chef.statements.InstallChefGems;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.scriptbuilder.domain.Statement;
|
||||
@ -51,14 +51,14 @@ public class ChefRestClientModule extends BaseChefRestClientModule<ChefApi, Chef
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Map<String, List<String>> runListForTag(RunListForTag runListForTag) {
|
||||
return new MapMaker().makeComputingMap(runListForTag);
|
||||
Map<String, List<String>> runListForGroup(RunListForGroup runListForGroup) {
|
||||
return new MapMaker().makeComputingMap(runListForGroup);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Map<String, Client> tagToClient(ClientForTag tagToClient) {
|
||||
return new MapMaker().makeComputingMap(tagToClient);
|
||||
Map<String, Client> tagToClient(ClientForGroup groupToClient) {
|
||||
return new MapMaker().makeComputingMap(groupToClient);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -33,16 +33,16 @@ import com.google.common.base.Function;
|
||||
|
||||
/**
|
||||
*
|
||||
* Generates a client relevant for a particular tag
|
||||
* Generates a client relevant for a particular group
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class ClientForTag implements Function<String, Client> {
|
||||
public class ClientForGroup implements Function<String, Client> {
|
||||
private final ChefApi chefApi;
|
||||
|
||||
@Inject
|
||||
public ClientForTag(ChefApi chefApi) {
|
||||
public ClientForGroup(ChefApi chefApi) {
|
||||
this.chefApi = checkNotNull(chefApi, "chefApi");
|
||||
}
|
||||
|
@ -20,7 +20,6 @@ package org.jclouds.chef.functions;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static org.jclouds.io.Payloads.newStringPayload;
|
||||
import static org.jclouds.scriptbuilder.domain.Statements.appendFile;
|
||||
import static org.jclouds.scriptbuilder.domain.Statements.exec;
|
||||
import static org.jclouds.scriptbuilder.domain.Statements.newStatementList;
|
||||
@ -37,10 +36,8 @@ import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.chef.domain.Client;
|
||||
import org.jclouds.crypto.Pems;
|
||||
import org.jclouds.io.Payload;
|
||||
import org.jclouds.json.Json;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.scriptbuilder.domain.OsFamily;
|
||||
import org.jclouds.scriptbuilder.domain.Statement;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
@ -58,7 +55,7 @@ import com.google.inject.TypeLiteral;
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class GroupToBootScript implements Function<String, Payload> {
|
||||
public class GroupToBootScript implements Function<String, Statement> {
|
||||
@VisibleForTesting
|
||||
static final Type RUN_LIST_TYPE = new TypeLiteral<Map<String, List<String>>>() {
|
||||
}.getType();
|
||||
@ -78,7 +75,7 @@ public class GroupToBootScript implements Function<String, Payload> {
|
||||
this.installChefGems = checkNotNull(installChefGems, "installChefGems");
|
||||
}
|
||||
|
||||
public Payload apply(String tag) {
|
||||
public Statement apply(String tag) {
|
||||
checkNotNull(tag, "tag");
|
||||
|
||||
Client client = tagToClient.get(tag);
|
||||
@ -108,11 +105,8 @@ public class GroupToBootScript implements Function<String, Payload> {
|
||||
|
||||
Statement runChef = exec("chef-client -j " + chefBootFile);
|
||||
|
||||
Statement bootstrapAndRunChef = newStatementList(installChefGems, createChefConfigDir, createClientRb,
|
||||
return newStatementList(installChefGems, createChefConfigDir, createClientRb,
|
||||
createValidationPem, createFirstBoot, runChef);
|
||||
|
||||
String runScript = bootstrapAndRunChef.render(OsFamily.UNIX);
|
||||
return newStringPayload(runScript);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -39,13 +39,13 @@ import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
*
|
||||
* Retrieves the run-list for a specific tag
|
||||
* Retrieves the run-list for a specific group
|
||||
*
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class RunListForTag implements Function<String, List<String>> {
|
||||
public class RunListForGroup implements Function<String, List<String>> {
|
||||
public static final Type RUN_LIST_TYPE = new TypeLiteral<Map<String, List<String>>>() {
|
||||
}.getType();
|
||||
private final ChefApi api;
|
||||
@ -53,7 +53,7 @@ public class RunListForTag implements Function<String, List<String>> {
|
||||
private final String databag;
|
||||
|
||||
@Inject
|
||||
public RunListForTag(@Named(CHEF_BOOTSTRAP_DATABAG) String databag, ChefApi api, Json json) {
|
||||
public RunListForGroup(@Named(CHEF_BOOTSTRAP_DATABAG) String databag, ChefApi api, Json json) {
|
||||
this.databag = checkNotNull(databag, "databag");
|
||||
this.api = checkNotNull(api, "api");
|
||||
this.json = checkNotNull(json, "json");
|
@ -39,7 +39,7 @@ import org.jclouds.chef.domain.CookbookVersion;
|
||||
import org.jclouds.chef.domain.DatabagItem;
|
||||
import org.jclouds.chef.domain.Node;
|
||||
import org.jclouds.chef.functions.GroupToBootScript;
|
||||
import org.jclouds.chef.functions.RunListForTag;
|
||||
import org.jclouds.chef.functions.RunListForGroup;
|
||||
import org.jclouds.chef.reference.ChefConstants;
|
||||
import org.jclouds.chef.strategy.CleanupStaleNodesAndClients;
|
||||
import org.jclouds.chef.strategy.CreateNodeAndPopulateAutomaticAttributes;
|
||||
@ -49,11 +49,11 @@ import org.jclouds.chef.strategy.ListClients;
|
||||
import org.jclouds.chef.strategy.ListCookbookVersions;
|
||||
import org.jclouds.chef.strategy.ListNodes;
|
||||
import org.jclouds.chef.strategy.UpdateAutomaticAttributesOnNode;
|
||||
import org.jclouds.io.Payload;
|
||||
import org.jclouds.io.Payloads;
|
||||
import org.jclouds.io.payloads.RSADecryptingPayload;
|
||||
import org.jclouds.io.payloads.RSAEncryptingPayload;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.scriptbuilder.domain.Statement;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
@ -81,9 +81,9 @@ public class BaseChefService implements ChefService {
|
||||
private final ListClients listClients;
|
||||
private final UpdateAutomaticAttributesOnNode updateAutomaticAttributesOnNode;
|
||||
private final Provider<PrivateKey> privateKey;
|
||||
private final GroupToBootScript tagToBootScript;
|
||||
private final GroupToBootScript groupToBootScript;
|
||||
private final String databag;
|
||||
private final RunListForTag runListForTag;
|
||||
private final RunListForGroup runListForGroup;
|
||||
private final ListCookbookVersions listCookbookVersions;
|
||||
|
||||
@Inject
|
||||
@ -93,7 +93,7 @@ public class BaseChefService implements ChefService {
|
||||
DeleteAllClientsInList deleteAllClientsInList, ListClients listClients,
|
||||
ListCookbookVersions listCookbookVersions, UpdateAutomaticAttributesOnNode updateAutomaticAttributesOnNode,
|
||||
Provider<PrivateKey> privateKey, @Named(CHEF_BOOTSTRAP_DATABAG) String databag,
|
||||
GroupToBootScript tagToBootScript, RunListForTag runListForTag) {
|
||||
GroupToBootScript groupToBootScript, RunListForGroup runListForGroup) {
|
||||
this.chefContext = checkNotNull(chefContext, "chefContext");
|
||||
this.cleanupStaleNodesAndClients = checkNotNull(cleanupStaleNodesAndClients, "cleanupStaleNodesAndClients");
|
||||
this.createNodeAndPopulateAutomaticAttributes = checkNotNull(createNodeAndPopulateAutomaticAttributes,
|
||||
@ -106,9 +106,9 @@ public class BaseChefService implements ChefService {
|
||||
this.updateAutomaticAttributesOnNode = checkNotNull(updateAutomaticAttributesOnNode,
|
||||
"updateAutomaticAttributesOnNode");
|
||||
this.privateKey = checkNotNull(privateKey, "privateKey");
|
||||
this.tagToBootScript = checkNotNull(tagToBootScript, "tagToBootScript");
|
||||
this.groupToBootScript = checkNotNull(groupToBootScript, "groupToBootScript");
|
||||
this.databag = checkNotNull(databag, "databag");
|
||||
this.runListForTag = checkNotNull(runListForTag, "runListForTag");
|
||||
this.runListForGroup = checkNotNull(runListForGroup, "runListForGroup");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -188,12 +188,12 @@ public class BaseChefService implements ChefService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Payload createClientAndBootstrapScriptForTag(String tag) {
|
||||
return tagToBootScript.apply(tag);
|
||||
public Statement createClientAndBootstrapScriptForGroup(String group) {
|
||||
return groupToBootScript.apply(group);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateRunListForTag(Iterable<String> runList, String tag) {
|
||||
public void updateRunListForGroup(Iterable<String> runList, String group) {
|
||||
try {
|
||||
chefContext.getApi().createDatabag(databag);
|
||||
} catch (IllegalStateException e) {
|
||||
@ -201,14 +201,14 @@ public class BaseChefService implements ChefService {
|
||||
}
|
||||
chefContext.getApi().updateDatabagItem(
|
||||
databag,
|
||||
new DatabagItem(tag, chefContext.utils().json().toJson(
|
||||
new DatabagItem(group, chefContext.utils().json().toJson(
|
||||
ImmutableMap.<String, List<String>> of("run_list", Lists.newArrayList(runList)),
|
||||
RunListForTag.RUN_LIST_TYPE)));
|
||||
RunListForGroup.RUN_LIST_TYPE)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getRunListForTag(String tag) {
|
||||
return runListForTag.apply(tag);
|
||||
public List<String> getRunListForGroup(String group) {
|
||||
return runListForGroup.apply(group);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -32,8 +32,8 @@ import org.jclouds.blobstore.TransientAsyncBlobStore;
|
||||
import org.jclouds.chef.ChefApi;
|
||||
import org.jclouds.chef.ChefAsyncApi;
|
||||
import org.jclouds.chef.domain.Client;
|
||||
import org.jclouds.chef.functions.ClientForTag;
|
||||
import org.jclouds.chef.functions.RunListForTag;
|
||||
import org.jclouds.chef.functions.ClientForGroup;
|
||||
import org.jclouds.chef.functions.RunListForGroup;
|
||||
import org.jclouds.chef.statements.InstallChefGems;
|
||||
import org.jclouds.chef.test.TransientChefApi;
|
||||
import org.jclouds.chef.test.TransientChefAsyncApi;
|
||||
@ -89,13 +89,13 @@ public class TransientChefApiModule extends AbstractModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Map<String, List<String>> runListForTag(RunListForTag runListForTag) {
|
||||
Map<String, List<String>> runListForTag(RunListForGroup runListForTag) {
|
||||
return new MapMaker().makeComputingMap(runListForTag);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Map<String, Client> tagToClient(ClientForTag tagToClient) {
|
||||
Map<String, Client> tagToClient(ClientForGroup tagToClient) {
|
||||
return new MapMaker().makeComputingMap(tagToClient);
|
||||
}
|
||||
|
||||
|
@ -36,15 +36,15 @@ import com.google.common.collect.ImmutableSet;
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = { "unit" })
|
||||
public class ClientForTagTest {
|
||||
@Test(groups = "unit", testName = "ClientForGroupTest")
|
||||
public class ClientForGroupTest {
|
||||
|
||||
public void testWhenNoClientsInList() throws IOException {
|
||||
ChefApi chefApi = createMock(ChefApi.class);
|
||||
Client client = createMock(Client.class);
|
||||
PrivateKey privateKey = createMock(PrivateKey.class);
|
||||
|
||||
ClientForTag fn = new ClientForTag(chefApi);
|
||||
ClientForGroup fn = new ClientForGroup(chefApi);
|
||||
|
||||
expect(chefApi.listClients()).andReturn(ImmutableSet.<String> of());
|
||||
expect(chefApi.createClient("foo-validator-00")).andReturn(client);
|
||||
@ -67,7 +67,7 @@ public class ClientForTagTest {
|
||||
Client client = createMock(Client.class);
|
||||
PrivateKey privateKey = createMock(PrivateKey.class);
|
||||
|
||||
ClientForTag fn = new ClientForTag(chefApi);
|
||||
ClientForGroup fn = new ClientForGroup(chefApi);
|
||||
|
||||
expect(chefApi.listClients()).andReturn(
|
||||
ImmutableSet.<String> of("foo-validator-00", "foo-validator-01", "foo-validator-02"));
|
||||
@ -91,7 +91,7 @@ public class ClientForTagTest {
|
||||
Client client = createMock(Client.class);
|
||||
PrivateKey privateKey = createMock(PrivateKey.class);
|
||||
|
||||
ClientForTag fn = new ClientForTag(chefApi);
|
||||
ClientForGroup fn = new ClientForGroup(chefApi);
|
||||
|
||||
expect(chefApi.listClients()).andReturn(ImmutableSet.<String> of("foo-validator-00", "foo-validator-02"));
|
||||
expect(chefApi.createClient("foo-validator-01")).andReturn(client);
|
@ -18,10 +18,10 @@
|
||||
*/
|
||||
package org.jclouds.chef.functions;
|
||||
|
||||
import static org.easymock.EasyMock.createMock;
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createMock;
|
||||
import static org.easymock.classextension.EasyMock.replay;
|
||||
import static org.easymock.classextension.EasyMock.verify;
|
||||
import static org.easymock.EasyMock.replay;
|
||||
import static org.easymock.EasyMock.verify;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -37,6 +37,7 @@ import org.jclouds.crypto.PemsTest;
|
||||
import org.jclouds.json.Json;
|
||||
import org.jclouds.json.config.GsonModule;
|
||||
import org.jclouds.rest.annotations.ApiVersion;
|
||||
import org.jclouds.scriptbuilder.domain.OsFamily;
|
||||
import org.jclouds.scriptbuilder.domain.Statement;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
@ -53,8 +54,8 @@ import com.google.inject.Injector;
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = { "unit" })
|
||||
public class TagToBootScriptTest {
|
||||
@Test(groups = "unit", testName = "GroupToBootScriptTest")
|
||||
public class GroupToBootScriptTest {
|
||||
|
||||
Injector injector = Guice.createInjector(new AbstractModule() {
|
||||
@Override
|
||||
@ -105,7 +106,7 @@ public class TagToBootScriptTest {
|
||||
replay(client);
|
||||
replay(privateKey);
|
||||
|
||||
assertEquals(fn.apply("foo").getRawContent(), CharStreams.toString(Resources.newReaderSupplier(Resources
|
||||
assertEquals(fn.apply("foo").render(OsFamily.UNIX), CharStreams.toString(Resources.newReaderSupplier(Resources
|
||||
.getResource("one-recipe.sh"), Charsets.UTF_8)));
|
||||
|
||||
verify(client);
|
@ -45,8 +45,8 @@ import com.google.inject.Injector;
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = { "unit" })
|
||||
public class RunListForTagTest {
|
||||
@Test(groups = "unit", testName = "RunListForGroupTest")
|
||||
public class RunListForGroupTest {
|
||||
Injector injector = Guice.createInjector(new AbstractModule() {
|
||||
@Override
|
||||
protected void configure()
|
||||
@ -62,7 +62,7 @@ public class RunListForTagTest {
|
||||
ChefApi chefApi = createMock(ChefApi.class);
|
||||
Client client = createMock(Client.class);
|
||||
|
||||
RunListForTag fn = new RunListForTag("jclouds", chefApi, json);
|
||||
RunListForGroup fn = new RunListForGroup("jclouds", chefApi, json);
|
||||
|
||||
expect(chefApi.getDatabagItem("jclouds", "foo")).andReturn(null);
|
||||
|
||||
@ -80,7 +80,7 @@ public class RunListForTagTest {
|
||||
ChefApi chefApi = createMock(ChefApi.class);
|
||||
Api api = createMock(Api.class);
|
||||
|
||||
RunListForTag fn = new RunListForTag("jclouds", chefApi, json);
|
||||
RunListForGroup fn = new RunListForGroup("jclouds", chefApi, json);
|
||||
|
||||
expect(chefApi.getDatabagItem("jclouds", "foo")).andReturn(
|
||||
new DatabagItem("foo", "{\"run_list\":[\"recipe[apache2]\"]}"));
|
||||
@ -99,7 +99,7 @@ public class RunListForTagTest {
|
||||
ChefApi chefApi = createMock(ChefApi.class);
|
||||
Api api = createMock(Api.class);
|
||||
|
||||
RunListForTag fn = new RunListForTag("jclouds", chefApi, json);
|
||||
RunListForGroup fn = new RunListForGroup("jclouds", chefApi, json);
|
||||
|
||||
expect(chefApi.getDatabagItem("jclouds", "foo")).andReturn(
|
||||
new DatabagItem("foo", "{\"run_list\":[\"recipe[apache2]\",\"recipe[mysql]\"]}"));
|
Loading…
x
Reference in New Issue
Block a user