You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2013/11/12 11:47:44 UTC
git commit: JCLOUDS-365: ChefSolo should not depend on InstallChefGems
Updated Branches:
refs/heads/master 4500dbe2e -> cccdb756d
JCLOUDS-365: ChefSolo should not depend on InstallChefGems
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/cccdb756
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/cccdb756
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/cccdb756
Branch: refs/heads/master
Commit: cccdb756d14b9c62295e0df9ded5fab5256227ed
Parents: 4500dbe
Author: Ignasi Barrera <na...@apache.org>
Authored: Wed Nov 6 10:56:41 2013 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Nov 12 09:11:38 2013 +0100
----------------------------------------------------------------------
.../scriptbuilder/statements/chef/ChefSolo.java | 31 +++++++----------
.../statements/chef/ChefSoloTest.java | 36 +++++++-------------
2 files changed, 26 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cccdb756/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/chef/ChefSolo.java
----------------------------------------------------------------------
diff --git a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/chef/ChefSolo.java b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/chef/ChefSolo.java
index c7a0931..ad507ea 100644
--- a/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/chef/ChefSolo.java
+++ b/scriptbuilder/src/main/java/org/jclouds/scriptbuilder/statements/chef/ChefSolo.java
@@ -21,6 +21,7 @@ import static com.google.common.collect.Iterables.transform;
import static org.jclouds.scriptbuilder.domain.Statements.createOrOverwriteFile;
import static org.jclouds.scriptbuilder.domain.Statements.exec;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -77,7 +78,6 @@ public class ChefSolo implements Statement {
private List<Role> roles = Lists.newArrayList();
private List<DataBag> databags = Lists.newArrayList();
private RunList runlist;
- private String chefVersion;
/**
* Directory where Chef Solo will store files.
@@ -237,22 +237,13 @@ public class ChefSolo implements Statement {
return this;
}
- /**
- * The version of the Chef gem to install.
- */
- public Builder chefVersion(String chefVersion) {
- this.chefVersion = checkNotNull(chefVersion, "chefVersion");
- return this;
- }
-
public ChefSolo build() {
return new ChefSolo(Optional.of(fileCachePath), Optional.fromNullable(rolePath),
Optional.fromNullable(databagPath), Optional.of(cookbookPath.build()),
Optional.fromNullable(cookbooksArchiveLocation), Optional.fromNullable(jsonAttributes),
Optional.fromNullable(group), Optional.fromNullable(interval), Optional.fromNullable(logLevel),
Optional.fromNullable(logFile), Optional.fromNullable(nodeName), Optional.fromNullable(splay),
- Optional.fromNullable(user), Optional.of(roles), Optional.of(databags), Optional.fromNullable(runlist),
- Optional.fromNullable(chefVersion));
+ Optional.fromNullable(user), Optional.of(roles), Optional.of(databags), Optional.fromNullable(runlist));
}
}
@@ -273,14 +264,12 @@ public class ChefSolo implements Statement {
private Optional<List<Role>> roles;
private Optional<List<DataBag>> databags;
private RunList runlist;
- private final InstallChefGems installChefGems;
protected ChefSolo(Optional<String> fileCachePath, Optional<String> rolePath, Optional<String> databagPath,
Optional<ImmutableList<String>> cookbookPath, Optional<String> cookbooksArchiveLocation,
Optional<String> jsonAttributes, Optional<String> group, Optional<Integer> interval,
Optional<String> logLevel, Optional<String> logFile, Optional<String> nodeName, Optional<Integer> splay,
- Optional<String> user, Optional<List<Role>> roles, Optional<List<DataBag>> databags,
- Optional<RunList> runlist, Optional<String> chefVersion) {
+ Optional<String> user, Optional<List<Role>> roles, Optional<List<DataBag>> databags, Optional<RunList> runlist) {
this.fileCachePath = checkNotNull(fileCachePath, "fileCachePath must be set").or(DEFAULT_SOLO_PATH);
this.rolePath = checkNotNull(rolePath, "rolePath must be set").or(this.fileCachePath + "/roles");
this.databagPath = checkNotNull(databagPath, "databagPath must be set").or(this.fileCachePath + "/data_bags");
@@ -296,13 +285,12 @@ public class ChefSolo implements Statement {
this.roles = checkNotNull(roles, "roles must be set");
this.databags = checkNotNull(databags, "databags must be set");
this.runlist = checkNotNull(runlist, "runlist must be set").or(RunList.builder().build());
- this.user = checkNotNull(user, "chefVersion must be set");
+ this.user = checkNotNull(user, "user must be set");
if (!checkNotNull(cookbookPath, "cookbookPath must be set").isPresent() || cookbookPath.get().isEmpty()) {
this.cookbookPath = ImmutableList.<String> of(this.fileCachePath + "/cookbooks");
} else {
this.cookbookPath = ImmutableList.<String> copyOf(cookbookPath.get());
}
- this.installChefGems = InstallChefGems.builder().version(chefVersion.orNull()).build();
}
@Override
@@ -312,8 +300,8 @@ public class ChefSolo implements Statement {
}
ImmutableList.Builder<Statement> statements = ImmutableList.builder();
- statements.add(installChefGems);
+ checkChefIsInstalled(statements);
createSoloConfiguration(statements);
createRolesIfNecessary(statements);
createDatabagsIfNecessary(statements);
@@ -354,7 +342,14 @@ public class ChefSolo implements Statement {
@Override
public Iterable<String> functionDependencies(OsFamily family) {
- return installChefGems.functionDependencies(family);
+ return Collections.emptyList();
+ }
+
+ private void checkChefIsInstalled(ImmutableList.Builder<Statement> statements) {
+ statements.add(exec("if ! hash chef-solo 2>/dev/null; then"));
+ statements.add(exec("echo 'chef-solo not found. Please, install Chef first'"));
+ statements.add(exec("exit 1"));
+ statements.add(exec("fi"));
}
@VisibleForTesting
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cccdb756/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/chef/ChefSoloTest.java
----------------------------------------------------------------------
diff --git a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/chef/ChefSoloTest.java b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/chef/ChefSoloTest.java
index 0b96ad7..34bc581 100644
--- a/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/chef/ChefSoloTest.java
+++ b/scriptbuilder/src/test/java/org/jclouds/scriptbuilder/statements/chef/ChefSoloTest.java
@@ -323,72 +323,58 @@ public class ChefSoloTest {
public void testChefWoloWithDefaultConfiguration() throws IOException {
String script = ChefSolo.builder().build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname`\n");
}
public void testChefWoloWithNodeName() throws IOException {
String script = ChefSolo.builder().nodeName("foo").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N foo\n");
}
public void testChefSoloWithGroup() throws IOException {
String script = ChefSolo.builder().group("foo").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -g foo\n");
}
public void testChefSoloWithInterval() throws IOException {
String script = ChefSolo.builder().interval(15).build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -i 15\n");
}
public void testChefSoloWithLogLevel() throws IOException {
String script = ChefSolo.builder().logLevel("debug").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -l debug\n");
}
public void testChefSoloWithLogFile() throws IOException {
String script = ChefSolo.builder().logFile("/var/log/solo.log").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -L /var/log/solo.log\n");
}
public void testChefSoloWithCookbooksLocation() throws IOException {
String script = ChefSolo.builder().cookbooksArchiveLocation("/tmp/cookbooks").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -r /tmp/cookbooks\n");
}
public void testChefSoloWithSplay() throws IOException {
String script = ChefSolo.builder().splay(15).build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -s 15\n");
}
public void testChefSoloWithUser() throws IOException {
String script = ChefSolo.builder().user("foo").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems() + createConfigFile() + createNodeFile()
+ assertEquals(script, checkSoloExists() + createConfigFile() + createNodeFile()
+ "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname` -u foo\n");
}
- public void testChefSoloWithChefGemVersion() throws IOException {
- String script = ChefSolo.builder().chefVersion(">= 0.10.8").build().render(OsFamily.UNIX);
- assertEquals(script, installChefGems(">= 0.10.8") + createConfigFile() + createNodeFile()
- + "chef-solo -c /var/chef/solo.rb -j /var/chef/node.json -N `hostname`\n");
- }
-
- private static String installChefGems() throws IOException {
- return "gem install chef --no-rdoc --no-ri\n";
- }
-
- private static String installChefGems(String version) throws IOException {
- return "gem install chef -v '" + version + "' --no-rdoc --no-ri\n";
- }
-
private static String createConfigFile() {
return "mkdir -p /var/chef\nmkdir -p /var/chef/cookbooks\ncat > /var/chef/solo.rb <<-'END_OF_JCLOUDS_FILE'\n"
+ "\tfile_cache_path \"/var/chef\"\n\tcookbook_path [\"/var/chef/cookbooks\"]\n"
@@ -399,4 +385,8 @@ public class ChefSoloTest {
return "cat > /var/chef/node.json <<-'END_OF_JCLOUDS_FILE'\n\t{\"run_list\":[]}\nEND_OF_JCLOUDS_FILE\n";
}
+ private static String checkSoloExists() {
+ return "if ! hash chef-solo 2>/dev/null; then\necho 'chef-solo not found. Please, install Chef first'\nexit 1\nfi\n";
+ }
+
}