@Override public void execute(CloudStackClient cloudStackClient, Pool pool, DelegateExecution execution) { String keyName = KeyPairs.formatNameFromBusinessKey(execution.getProcessBusinessKey()); LOG.info("Creating admin access key pair as {}", keyName); SSHKeyPairClient sshKeyPairClient = cloudStackClient.getSSHKeyPairClient(); try { SshKeyPair sshKeyPair = sshKeyPairClient.registerSSHKeyPair(keyName, pool.getAdminAccess().getPublicKey()); LOG.info("Registered remote key with fingerprint {}", sshKeyPair.getFingerprint()); } catch (IllegalStateException e) { LOG.warn("Key with name {} already exists", keyName); SshKeyPair key = sshKeyPairClient.getSSHKeyPair(keyName); if (key.getFingerprint().equals(SshKeys.fingerprintPublicKey(pool.getAdminAccess().getPublicKey()))) { LOG.info("Fingerprints match. Not updating admin access key pair."); } else { LOG.info("Fingerprint do not match. Replacing admin access key pair."); sshKeyPairClient.deleteSSHKeyPair(keyName); sshKeyPairClient.registerSSHKeyPair(keyName, pool.getAdminAccess().getPublicKey()); } } } }
@Test public void testRegisterDeleteSSHKeyPair() { final Map<String, String> sshKey = SshKeys.generate(); final String publicKey = sshKey.get("public"); sshKeyPair = client.getSSHKeyPairClient().registerSSHKeyPair(keyPairName, publicKey); assertNull(sshKeyPair.getPrivateKey()); checkSSHKeyPair(sshKeyPair); client.getSSHKeyPairClient().deleteSSHKeyPair(keyPairName); assertEquals(client.getSSHKeyPairClient().getSSHKeyPair(sshKeyPair.getName()), null); assertEquals(SshKeys.fingerprintPublicKey(publicKey), sshKeyPair.getFingerprint()); sshKeyPair = null; }
protected void checkSSHKeyPair(SshKeyPair pair) { assert pair.getName() != null : pair; assertEquals(pair.getFingerprint(), client.getSSHKeyPairClient().getSSHKeyPair(pair.getName()).getFingerprint()); }
@Test public void testCreateDeleteSSHKeyPair() { sshKeyPair = client.getSSHKeyPairClient().createSSHKeyPair(keyPairName); assertNotNull(sshKeyPair.getPrivateKey()); checkSSHKeyPair(sshKeyPair); client.getSSHKeyPairClient().deleteSSHKeyPair(sshKeyPair.getName()); assertEquals(client.getSSHKeyPairClient().getSSHKeyPair(sshKeyPair.getName()), null); assertEquals(SshKeys.fingerprintPrivateKey(sshKeyPair.getPrivateKey()), sshKeyPair.getFingerprint()); sshKeyPair = null; }
@Test public void testListAndGetSSHKeyPairsWhenResponseIs2xx() { HttpResponse response = HttpResponse.builder() .statusCode(200) .payload(payloadFromResource("/listsshkeypairsresponse.json")) .build(); SSHKeyPairClient client = requestSendsResponse(HttpRequest.builder() .method("GET") .endpoint( URI.create("http://localhost:8080/client/api?response=json&" + "command=listSSHKeyPairs&listAll=true&apiKey=identity&signature=5d2J9u%2BdKpkQsadDbl9i9OcUSLQ%3D")) .addHeader("Accept", "application/json") .build(), response); assertEquals(client.listSSHKeyPairs(), ImmutableSet.of( SshKeyPair.builder().name("jclouds-keypair") .fingerprint("1c:06:74:52:3b:99:1c:95:5c:04:c2:f4:ba:77:6e:7b").build())); client = requestSendsResponse(HttpRequest.builder() .method("GET") .endpoint( URI.create("http://localhost:8080/client/api?response=json&command=listSSHKeyPairs&listAll=true&" + "name=jclouds-keypair&apiKey=identity&signature=hJIVCFOHhdOww3aq19tFHpeD2HI%3D")) .addHeader("Accept", "application/json") .build(), response); assertEquals(client.getSSHKeyPair("jclouds-keypair"), SshKeyPair.builder().name("jclouds-keypair") .fingerprint("1c:06:74:52:3b:99:1c:95:5c:04:c2:f4:ba:77:6e:7b").build()); }