// TODO use userData to do this, and make initbuilder an example for
  // something else.
  @BeforeTest
  void makeScript() {

    mkEbsBoot =
        new InitBuilder(
                "mkebsboot", // name of the script
                "/tmp", // working directory
                "/tmp/logs", // location of stdout.log and stderr.log
                ImmutableMap.of(
                    "imageDir", "/mnt/tmp", "ebsDevice", "/dev/sdh", "ebsMountPoint", "/mnt/ebs"),
                ImmutableList.<Statement>of(
                    Statements.interpret(
                        "echo creating a filesystem and mounting the ebs volume",
                        "{md} {varl}IMAGE_DIR{varr} {varl}EBS_MOUNT_POINT{varr}",
                        "rm -rf {varl}IMAGE_DIR{varr}/*",
                        "yes| mkfs -t ext3 {varl}EBS_DEVICE{varr} 2>&-",
                        "mount {varl}EBS_DEVICE{varr} {varl}EBS_MOUNT_POINT{varr}",
                        "echo making a local working copy of the boot disk",
                        "rsync -ax --exclude /ubuntu/.bash_history --exclude /home/*/.bash_history --exclude /etc/ssh/ssh_host_* --exclude /etc/ssh/moduli --exclude /etc/udev/rules.d/*persistent-net.rules --exclude /var/lib/* --exclude=/mnt/* --exclude=/proc/* --exclude=/tmp/* --exclude=/dev/log / {varl}IMAGE_DIR{varr}",
                        "echo preparing the local working copy",
                        "touch {varl}IMAGE_DIR{varr}/etc/init.d/ec2-init-user-data",
                        "echo copying the local working copy to the ebs mount",
                        "{cd} {varl}IMAGE_DIR{varr}",
                        "tar -cSf - * | tar xf - -C {varl}EBS_MOUNT_POINT{varr}",
                        "echo size of ebs",
                        "du -sk {varl}EBS_MOUNT_POINT{varr}",
                        "echo size of source",
                        "du -sk {varl}IMAGE_DIR{varr}",
                        "rm -rf {varl}IMAGE_DIR{varr}/*",
                        "umount {varl}EBS_MOUNT_POINT{varr}",
                        "echo " + SCRIPT_END)))
            .render(OsFamily.UNIX);
  }
 /** @deprecated since 0.7 */
 @Deprecated
 public static void mapSecurityGroupRuleToIpTables(
     ComputeService computeService,
     NodeMetadata node,
     LoginCredentials credentials,
     String networkInterface,
     Iterable<Integer> ports) {
   for (Integer port : ports) {
     String insertIptableRule =
         IptablesCommands.insertIptablesRule(
             Chain.INPUT, networkInterface, Protocol.TCP, port, Policy.ACCEPT);
     Statement statement = Statements.newStatementList(exec(insertIptableRule));
     ExecResponse response =
         computeService.runScriptOnNode(
             node.getId(), statement, overrideLoginCredentials(credentials).runAsRoot(false));
     if (response.getExitStatus() != 0) {
       String msg =
           String.format(
               "Cannot insert the iptables rule for port %d. Error: %s",
               port, response.getError());
       LOG.error(msg);
       throw new RuntimeException(msg);
     }
   }
 }
 /** @deprecated since 0.7; see {@link IptablesCommands} */
 @Deprecated
 public static Statement authorizePortInIpTables(int port) {
   // TODO gogrid rules only allow ports 22, 3389, 80 and 443.
   // the first rule will be ignored, so we have to apply this
   // directly
   return Statements.newStatementList( // just in case iptables are being used, try to open 8080
       exec("iptables -I INPUT 1 -p tcp --dport " + port + " -j ACCEPT"), //
       exec("iptables -I RH-Firewall-1-INPUT 1 -p tcp --dport " + port + " -j ACCEPT"), //
       exec("iptables-save"));
 }
示例#4
0
 @Test
 public void testBuildEBS() throws MalformedURLException, IOException {
   assertEquals(
       new InitBuilder(
               "mkebsboot", // name of the script
               "/tmp", // working directory
               "/tmp/logs", // location of stdout.log and stderr.log
               ImmutableMap.of(
                   "IMAGE_DIR",
                   "/mnt/tmp",
                   "EBS_DEVICE",
                   "/dev/sdh",
                   "EBS_MOUNT_POINT",
                   "/mnt/ebs"), // variables
               // used
               // inside
               // of
               // the
               // script
               ImmutableList.<Statement>of(
                   Statements.interpret(
                       "echo creating a filesystem and mounting the ebs volume", // what
                       // to
                       // execute
                       "{md} {varl}IMAGE_DIR{varr} {varl}EBS_MOUNT_POINT{varr}",
                       "rm -rf {varl}IMAGE_DIR{varr}/*",
                       "yes| mkfs -t ext3 {varl}EBS_DEVICE{varr} 2>&-",
                       "mount {varl}EBS_DEVICE{varr} {varl}EBS_MOUNT_POINT{varr}",
                       "echo making a local working copy of the boot disk",
                       "rsync -ax --exclude /ubuntu/.bash_history --exclude /home/*/.bash_history --exclude /etc/ssh/ssh_host_* --exclude /etc/ssh/moduli --exclude /etc/udev/rules.d/*persistent-net.rules --exclude /var/lib/ec2/* --exclude=/mnt/* --exclude=/proc/* --exclude=/tmp/* --exclude=/dev/log / {varl}IMAGE_DIR{varr}",
                       "echo preparing the local working copy",
                       "touch {varl}IMAGE_DIR{varr}/etc/init.d/ec2-init-user-data",
                       "echo copying the local working copy to the ebs mount",
                       "{cd} {varl}IMAGE_DIR{varr}",
                       "tar -cSf - * | tar xf - -C {varl}EBS_MOUNT_POINT{varr}",
                       "echo size of ebs",
                       "du -sk {varl}EBS_MOUNT_POINT{varr}",
                       "echo size of source",
                       "du -sk {varl}IMAGE_DIR{varr}",
                       "rm -rf {varl}IMAGE_DIR{varr}/*",
                       "umount {varl}EBS_MOUNT_POINT{varr}",
                       "echo ----COMPLETE----")))
           .render(OsFamily.UNIX),
       Resources.toString(
           Resources.getResource("test_ebs." + ShellToken.SH.to(OsFamily.UNIX)), Charsets.UTF_8));
 }
  public void testStartCCInstance() throws Exception {

    Template template =
        view.getComputeService()
            .templateBuilder()
            .fromHardware(EC2HardwareBuilder.cc2_8xlarge().build())
            .osFamily(OsFamily.AMZN_LINUX)
            .build();
    assert template != null : "The returned template was null, but it should have a value.";
    assertEquals(template.getHardware().getProviderId(), InstanceType.CC2_8XLARGE);
    assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "ebs");
    assertEquals(template.getImage().getUserMetadata().get("virtualizationType"), "hvm");
    assertEquals(template.getImage().getUserMetadata().get("hypervisor"), "xen");

    template
        .getOptions()
        .runScript(Statements.newStatementList(AdminAccess.standard(), InstallJDK.fromOpenJDK()));

    String group = PREFIX + "cccluster";
    view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group));
    // TODO make this not lookup an explicit region
    client
        .getPlacementGroupApi()
        .get()
        .deletePlacementGroupInRegion(null, "jclouds#" + group + "#us-east-1");

    try {
      Set<? extends NodeMetadata> nodes =
          view.getComputeService().createNodesInGroup(group, 1, template);
      NodeMetadata node = getOnlyElement(nodes);

      getOnlyElement(
          getOnlyElement(
              client.getInstanceApi().get().describeInstancesInRegion(null, node.getProviderId())));

    } catch (RunNodesException e) {
      System.err.println(e.getNodeErrors().keySet());
      Throwables.propagate(e);
    } finally {
      view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group));
    }
  }
  /** ssh client is initialized through this call. */
  protected ExecResponse doCall() {
    try {
      ssh.put(initFile, init.render(OsFamily.UNIX));
    } catch (SshException e) {
      // If there's a problem with the sftp configuration, we can try via ssh exec
      if (logger.isTraceEnabled())
        logger.warn(
            e,
            "<< (%s) problem using sftp [%s], attempting via sshexec",
            ssh.toString(),
            e.getMessage());
      else
        logger.warn(
            "<< (%s) problem using sftp [%s], attempting via sshexec",
            ssh.toString(), e.getMessage());
      ssh.disconnect();
      ssh.connect();
      ssh.exec("rm " + initFile);
      ssh.exec(
          Statements.appendFile(
                  initFile,
                  Splitter.on('\n').split(init.render(OsFamily.UNIX)),
                  AppendFile.MARKER + "_" + init.getInstanceName())
              .render(OsFamily.UNIX));
    }

    ssh.exec("chmod 755 " + initFile);
    setupLinkToInitFile();

    runAction("init");
    init.getInitStatement()
        .accept(
            new AdminAccessVisitor() {

              @Override
              public void visit(AdminAccess input) {
                refreshSshIfNewAdminCredentialsConfigured(input);
              }
            });
    return runAction("start");
  }
 protected String exec(final String nodeId, String command) {
   return exec(nodeId, Statements.exec(command));
 }
 protected static Template addRunScriptToTemplate(Template template) {
   template
       .getOptions()
       .runScript(Statements.newStatementList(AdminAccess.standard(), InstallJDK.fromOpenJDK()));
   return template;
 }
 private static Statement asFileStatement(String path, Configuration configuration) {
   return Statements.appendFile(path, asYamlLines(configuration.subset(ES_PREFIX)));
 }