AIRAVATA-2500 Implement SSHAccountProvisionerFactory
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/77baac43 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/77baac43 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/77baac43 Branch: refs/heads/AIRAVATA-2500 Commit: 77baac438f9a59629a9fc21a904dc7397245a029 Parents: 1c39e2e Author: Marcus Christie <machris...@apache.org> Authored: Thu Aug 10 15:24:26 2017 -0400 Committer: Marcus Christie <machris...@apache.org> Committed: Tue Sep 19 15:07:40 2017 -0400 ---------------------------------------------------------------------- .../accountprovisioning/ConfigParam.java | 32 +++++++-- .../accountprovisioning/SSHAccountManager.java | 37 +++++++++- .../SSHAccountProvisioner.java | 9 --- .../SSHAccountProvisionerFactory.java | 28 +++++--- .../SSHAccountProvisionerProvider.java | 37 ++++++++++ .../IULdapSSHAccountProvisioner.java | 7 -- .../IULdapSSHAccountProvisionerProvider.java | 44 ++++++++++++ ...ta.accountprovisioning.SSHAccountProvisioner | 22 ------ ...ntprovisioning.SSHAccountProvisionerProvider | 22 ++++++ .../SSHAccountProvisionerFactoryTest.java | 75 ++++++++++++++++++++ .../provisioner/TestSSHAccountProvisioner.java | 71 ++++++++++++++++++ .../TestSSHAccountProvisionerProvider.java | 66 +++++++++++++++++ ...ntprovisioning.SSHAccountProvisionerProvider | 21 ++++++ .../account_provisioning_model.thrift | 2 +- .../gateway_resource_profile_model.thrift | 2 +- 15 files changed, 420 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/ConfigParam.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/ConfigParam.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/ConfigParam.java index beb8bbc..cf27b7f 100644 --- a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/ConfigParam.java +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/ConfigParam.java @@ -24,7 +24,7 @@ public class ConfigParam { public enum ConfigParamType { STRING, - CRED_TOKEN, + CRED_STORE_PASSWORD_TOKEN, } private boolean optional = false; @@ -32,36 +32,58 @@ public class ConfigParam { private String description; private ConfigParamType type = ConfigParamType.STRING; + public ConfigParam(String name) { + this.name = name; + } + public boolean isOptional() { return optional; } - public void setOptional(boolean optional) { + public ConfigParam setOptional(boolean optional) { this.optional = optional; + return this; } public String getName() { return name; } - public void setName(String name) { + public ConfigParam setName(String name) { this.name = name; + return this; } public String getDescription() { return description; } - public void setDescription(String description) { + public ConfigParam setDescription(String description) { this.description = description; + return this; } public ConfigParamType getType() { return type; } - public void setType(ConfigParamType type) { + public ConfigParam setType(ConfigParamType type) { this.type = type; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ConfigParam)) return false; + + ConfigParam that = (ConfigParam) o; + + return name.equals(that.name); } + @Override + public int hashCode() { + return name.hashCode(); + } } http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountManager.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountManager.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountManager.java index 4e00e4e..dcb819b 100644 --- a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountManager.java +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountManager.java @@ -20,12 +20,18 @@ package org.apache.airavata.accountprovisioning; +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.credential.store.client.CredentialStoreClientFactory; import org.apache.airavata.credential.store.cpi.CredentialStoreService; import org.apache.airavata.credential.store.exception.CredentialStoreException; +import org.apache.airavata.model.credential.store.PasswordCredential; +import org.apache.airavata.registry.api.RegistryService; import org.apache.airavata.registry.api.client.RegistryServiceClientFactory; import org.apache.airavata.registry.api.exception.RegistryServiceException; +import org.apache.thrift.TException; +import java.util.HashMap; import java.util.Map; public class SSHAccountManager { @@ -41,8 +47,24 @@ public class SSHAccountManager { String provisionerName = null; Map<ConfigParam,String> provisionerConfig = null; + CredentialStoreService.Client credentialStoreServiceClient = getCredentialStoreClient(); + // Resolve any CRED_STORE_PASSWORD_TOKEN config parameters to passwords + Map<ConfigParam,String> resolvedConfig = new HashMap<>(); + for (Map.Entry<ConfigParam,String> configEntry : provisionerConfig.entrySet() ) { + if (configEntry.getKey().getType() == ConfigParam.ConfigParamType.CRED_STORE_PASSWORD_TOKEN) { + try { + PasswordCredential password = credentialStoreServiceClient.getPasswordCredential(configEntry.getValue(), gatewayId); + resolvedConfig.put(configEntry.getKey(), password.getPassword()); + } catch (TException e) { + throw new RuntimeException("Failed to get password needed to configure " + provisionerName); + } + } else { + resolvedConfig.put(configEntry.getKey(), configEntry.getValue()); + } + } + // instantiate and init the account provisioner - SSHAccountProvisioner sshAccountProvisioner = SSHAccountProvisionerFactory.createSSHAccountProvisioner(provisionerName, provisionerConfig); + SSHAccountProvisioner sshAccountProvisioner = SSHAccountProvisionerFactory.createSSHAccountProvisioner(provisionerName, resolvedConfig); // First check if username has an account boolean hasAccount = sshAccountProvisioner.hasAccount(username); @@ -61,9 +83,20 @@ public class SSHAccountManager { String scratchLocation = sshAccountProvisioner.getScratchLocation(username); } - private RegistryService.Client getRegistryServiceClient() throws RegistryServiceException { + private static RegistryService.Client getRegistryServiceClient() throws RegistryServiceException { // TODO: finish implementing return RegistryServiceClientFactory.createRegistryClient(null, 0); } + + private static CredentialStoreService.Client getCredentialStoreClient() { + + try { + String credServerHost = ServerSettings.getCredentialStoreServerHost(); + int credServerPort = Integer.valueOf(ServerSettings.getCredentialStoreServerPort()); + return CredentialStoreClientFactory.createAiravataCSClient(null, 0); + } catch (CredentialStoreException | ApplicationSettingsException e) { + throw new RuntimeException("Failed to create credential store service client", e); + } + } } http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisioner.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisioner.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisioner.java index d997c3c..5303081 100644 --- a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisioner.java +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisioner.java @@ -20,19 +20,10 @@ package org.apache.airavata.accountprovisioning; -import java.util.List; import java.util.Map; public interface SSHAccountProvisioner { - /** - * An identifying name for this SSHAccountProvisioner instance. This name should be unique amongst - * all SSHAccountProvisioner implementations. - */ - default String getName() { - return this.getClass().getName(); - } - List<ConfigParam> getConfigParams(); void init(Map<ConfigParam, String> config); boolean hasAccount(String username); boolean canCreateAccount(); http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactory.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactory.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactory.java index f691895..7b1f6c6 100644 --- a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactory.java +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactory.java @@ -20,30 +20,42 @@ package org.apache.airavata.accountprovisioning; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.ServiceLoader; public class SSHAccountProvisionerFactory { - public static List<String> getSSHAccountProvisionerImplementationNames() { + private static ServiceLoader<SSHAccountProvisionerProvider> sshAccountProvisionerProviders = ServiceLoader.load(SSHAccountProvisionerProvider.class); - // TODO: implement - return null; + public static List<String> getSSHAccountProvisionerImplementationNames() { + List<String> names = new ArrayList<>(); + for (SSHAccountProvisionerProvider sshAccountProvisionerProvider : sshAccountProvisionerProviders ) { + names.add(sshAccountProvisionerProvider.getName()); + } + return names; } public static List<ConfigParam> getSSHAccountProvisionerConfigParams(String provisionerName) { - // TODO: implement - return null; + return getSSHAccountProvisionerProvider(provisionerName).getConfigParams(); } public static SSHAccountProvisioner createSSHAccountProvisioner(String provisionerName, Map<ConfigParam, String> config) { + SSHAccountProvisionerProvider sshAccountProvisionerProvider = getSSHAccountProvisionerProvider(provisionerName); + + return sshAccountProvisionerProvider.createSSHAccountProvisioner(config); } - private CredentialStoreService.Client getCredentialStoreClient() throws CredentialStoreException { + private static SSHAccountProvisionerProvider getSSHAccountProvisionerProvider(String provisionerName) { - // TODO: finish implementing - return CredentialStoreClientFactory.createAiravataCSClient(null, 0); + for (SSHAccountProvisionerProvider sshAccountProvisionerProvider : sshAccountProvisionerProviders ) { + if (sshAccountProvisionerProvider.getName().equals(provisionerName)) { + return sshAccountProvisionerProvider; + } + } + throw new RuntimeException("Unknown SSHAccountProvisioner named " + provisionerName); } } http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerProvider.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerProvider.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerProvider.java new file mode 100644 index 0000000..42f2794 --- /dev/null +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerProvider.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.airavata.accountprovisioning; + +import java.util.List; +import java.util.Map; + +public interface SSHAccountProvisionerProvider { + + /** + * An identifying name for the SSHAccountProvisioner instances created by this provider. + * This name should be unique amongst all SSHAccountProvisioner implementations. + */ + default String getName() { + return this.getClass().getName(); + } + List<ConfigParam> getConfigParams(); + SSHAccountProvisioner createSSHAccountProvisioner(Map<ConfigParam,String> config); +} http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java index 4ad3512..0714f49 100644 --- a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisioner.java @@ -23,18 +23,11 @@ package org.apache.airavata.accountprovisioning.provisioner; import org.apache.airavata.accountprovisioning.ConfigParam; import org.apache.airavata.accountprovisioning.SSHAccountProvisioner; -import java.util.List; import java.util.Map; public class IULdapSSHAccountProvisioner implements SSHAccountProvisioner { @Override - public List<ConfigParam> getConfigParams() { - // TODO: implement - return null; - } - - @Override public void init(Map<ConfigParam, String> config) { // TODO: implement http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisionerProvider.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisionerProvider.java b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisionerProvider.java new file mode 100644 index 0000000..b54fdc4 --- /dev/null +++ b/modules/compute-account-provisioning/src/main/java/org/apache/airavata/accountprovisioning/provisioner/IULdapSSHAccountProvisionerProvider.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.airavata.accountprovisioning.provisioner; + +import org.apache.airavata.accountprovisioning.ConfigParam; +import org.apache.airavata.accountprovisioning.SSHAccountProvisioner; +import org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider; + +import java.util.List; +import java.util.Map; + +public class IULdapSSHAccountProvisionerProvider implements SSHAccountProvisionerProvider { + + @Override + public List<ConfigParam> getConfigParams() { + // TODO: implement + return null; + } + + @Override + public SSHAccountProvisioner createSSHAccountProvisioner(Map<ConfigParam,String> config) { + SSHAccountProvisioner sshAccountProvisioner = new IULdapSSHAccountProvisioner(); + sshAccountProvisioner.init(config); + return sshAccountProvisioner; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisioner ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisioner b/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisioner deleted file mode 100644 index 50d2859..0000000 --- a/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisioner +++ /dev/null @@ -1,22 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# -# - - -org.apache.airavata.accountprovisioning.provisioner.IULdapSSHAccountProvisioner \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider b/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider new file mode 100644 index 0000000..d042cd1 --- /dev/null +++ b/modules/compute-account-provisioning/src/main/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider @@ -0,0 +1,22 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# + + +org.apache.airavata.accountprovisioning.provisioner.IULdapSSHAccountProvisionerProvider \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java new file mode 100644 index 0000000..466896e --- /dev/null +++ b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/SSHAccountProvisionerFactoryTest.java @@ -0,0 +1,75 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.airavata.accountprovisioning; + +import org.apache.airavata.accountprovisioning.provisioner.TestSSHAccountProvisioner; +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SSHAccountProvisionerFactoryTest { + + @Test + public void testGetSSHAccountProvisionerImplementationNames() { + + List<String> sshAccountProvisionerNames = SSHAccountProvisionerFactory.getSSHAccountProvisionerImplementationNames(); + Assert.assertTrue("names should contain TestSSHAccountProvisioner", sshAccountProvisionerNames.contains("TestSSHAccountProvisioner")); + } + + @Test + public void testGetSSHAccountProvisionerConfigParams() { + + List<ConfigParam> configParams = SSHAccountProvisionerFactory.getSSHAccountProvisionerConfigParams("TestSSHAccountProvisioner"); + Assert.assertEquals(4, configParams.size()); + ConfigParam ldaphost = configParams.get(0); + Assert.assertEquals("ldaphost", ldaphost.getName()); + Assert.assertEquals(ConfigParam.ConfigParamType.STRING, ldaphost.getType()); + ConfigParam ldapport = configParams.get(1); + Assert.assertEquals("ldapport", ldapport.getName()); + Assert.assertEquals(ConfigParam.ConfigParamType.STRING, ldapport.getType()); + ConfigParam ldapUsername = configParams.get(2); + Assert.assertEquals("ldap-username", ldapUsername.getName()); + Assert.assertEquals(ConfigParam.ConfigParamType.STRING, ldapUsername.getType()); + ConfigParam ldapPassword = configParams.get(3); + Assert.assertEquals("ldap-password", ldapPassword.getName()); + Assert.assertEquals(ConfigParam.ConfigParamType.CRED_STORE_PASSWORD_TOKEN, ldapPassword.getType()); + } + + @Test + public void testCreateSSHAccountProvisioner() { + + Map<ConfigParam, String> config = new HashMap<>(); + ConfigParam test1 = new ConfigParam("test1"); + config.put(test1, "value1"); + ConfigParam test2 = new ConfigParam("test2"); + config.put(test2, "value2"); + ConfigParam test3 = new ConfigParam("test3"); + config.put(test3, "value3"); + TestSSHAccountProvisioner sshAccountProvisioner = (TestSSHAccountProvisioner) SSHAccountProvisionerFactory.createSSHAccountProvisioner("TestSSHAccountProvisioner", config); + // Make sure all of the config params and values were passed to SSHAccountProvisioner + Assert.assertTrue(sshAccountProvisioner.getConfig().containsKey(test1)); + Assert.assertTrue(sshAccountProvisioner.getConfig().containsKey(test2)); + Assert.assertTrue(sshAccountProvisioner.getConfig().containsKey(test3)); + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisioner.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisioner.java b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisioner.java new file mode 100644 index 0000000..d2ef213 --- /dev/null +++ b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisioner.java @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.airavata.accountprovisioning.provisioner; + +import org.apache.airavata.accountprovisioning.ConfigParam; +import org.apache.airavata.accountprovisioning.SSHAccountProvisioner; + +import java.util.Map; + +public class TestSSHAccountProvisioner implements SSHAccountProvisioner { + + private Map<ConfigParam, String> config; + + @Override + public void init(Map<ConfigParam, String> config) { + + this.config = config; + } + + @Override + public boolean hasAccount(String username) { + return false; + } + + @Override + public boolean canCreateAccount() { + return false; + } + + @Override + public void createAccount(String username, String sshPublicKey) { + + } + + @Override + public boolean canInstallSSHKey() { + return false; + } + + @Override + public void installSSHKey(String username, String sshPublicKey) { + + } + + @Override + public String getScratchLocation(String username) { + return null; + } + + public Map<ConfigParam, String> getConfig() { + return config; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java new file mode 100644 index 0000000..65fcfe5 --- /dev/null +++ b/modules/compute-account-provisioning/src/test/java/org/apache/airavata/accountprovisioning/provisioner/TestSSHAccountProvisionerProvider.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.airavata.accountprovisioning.provisioner; + +import org.apache.airavata.accountprovisioning.ConfigParam; +import org.apache.airavata.accountprovisioning.SSHAccountProvisioner; +import org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class TestSSHAccountProvisionerProvider implements SSHAccountProvisionerProvider { + + @Override + public String getName() { + return "TestSSHAccountProvisioner"; + } + + @Override + public List<ConfigParam> getConfigParams() { + List<ConfigParam> configParams = new ArrayList<>(); + configParams.add(new ConfigParam("ldaphost") + .setDescription("Hostname of LDAP server") + .setOptional(false) + .setType(ConfigParam.ConfigParamType.STRING)); + configParams.add(new ConfigParam("ldapport") + .setDescription("Port of LDAP server") + .setOptional(false) + .setType(ConfigParam.ConfigParamType.STRING)); + configParams.add(new ConfigParam("ldap-username") + .setDescription("Username for LDAP server") + .setOptional(false) + .setType(ConfigParam.ConfigParamType.STRING)); + configParams.add(new ConfigParam("ldap-password") + .setDescription("Password for LDAP server") + .setOptional(false) + .setType(ConfigParam.ConfigParamType.CRED_STORE_PASSWORD_TOKEN)); + return configParams; + } + + @Override + public SSHAccountProvisioner createSSHAccountProvisioner(Map<ConfigParam, String> config) { + SSHAccountProvisioner sshAccountProvisioner = new TestSSHAccountProvisioner(); + sshAccountProvisioner.init(config); + return sshAccountProvisioner; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/modules/compute-account-provisioning/src/test/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider ---------------------------------------------------------------------- diff --git a/modules/compute-account-provisioning/src/test/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider b/modules/compute-account-provisioning/src/test/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider new file mode 100644 index 0000000..c920421 --- /dev/null +++ b/modules/compute-account-provisioning/src/test/resources/META-INF/services/org.apache.airavata.accountprovisioning.SSHAccountProvisionerProvider @@ -0,0 +1,21 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# +# + +org.apache.airavata.accountprovisioning.provisioner.TestSSHAccountProvisionerProvider \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/thrift-interface-descriptions/data-models/resource-catalog-models/account_provisioning_model.thrift ---------------------------------------------------------------------- diff --git a/thrift-interface-descriptions/data-models/resource-catalog-models/account_provisioning_model.thrift b/thrift-interface-descriptions/data-models/resource-catalog-models/account_provisioning_model.thrift index b13b1c3..627116e 100644 --- a/thrift-interface-descriptions/data-models/resource-catalog-models/account_provisioning_model.thrift +++ b/thrift-interface-descriptions/data-models/resource-catalog-models/account_provisioning_model.thrift @@ -25,7 +25,7 @@ namespace py apache.airavata.model.appcatalog.accountprovisioning enum SSHAccountProvisionerConfigParamType { STRING, - CRED_TOKEN + CRED_STORE_PASSWORD_TOKEN } struct SSHAccountProvisioner { http://git-wip-us.apache.org/repos/asf/airavata/blob/77baac43/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift ---------------------------------------------------------------------- diff --git a/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift b/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift index e3686f2..6244c28 100644 --- a/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift +++ b/thrift-interface-descriptions/data-models/resource-catalog-models/gateway_resource_profile_model.thrift @@ -77,7 +77,7 @@ struct ComputeResourcePreference { 13: optional i64 reservationStartTime, 14: optional i64 reservationEndTime, 15: optional string sshAccountProvisioner, - 16: optional map<SSHAccountProvisionerConfigParam, String> sshAccountProvisionerConfig + 16: optional map<account_provisioning_model.SSHAccountProvisionerConfigParam, String> sshAccountProvisionerConfig } struct StoragePreference {