Oved Ourfali has uploaded a new change for review. Change subject: foreman integration - showing foreman hosts in new host dialog ......................................................................
foreman integration - showing foreman hosts in new host dialog This patch adds external host provider interface, with an implementation for Foreman, to allow viewing foreman hosts from the "add new host" dialog. Limitations (will be addressed later): 1. Will only work with non-SSL foreman servers 2. The list of hosts will still show hosts that were already added 3. No way to set a foreman hosts search filter in the UI Change-Id: I30ea180e477a8f0714c4dc97ec55f29be515723a Signed-off-by: Oved Ourfali <[email protected]> --- M backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql M backend/manager/modules/bll/pom.xml A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml 21 files changed, 444 insertions(+), 8 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/82/14582/1 diff --git a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql index 2b679c0..7c82123 100644 --- a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql +++ b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql @@ -129,6 +129,9 @@ select fn_db_add_config_value('FilteringLUNsEnabled','false','3.2'); select fn_db_add_config_value('FilteringLUNsEnabled','false','3.3'); select fn_db_add_config_value('FindFenceProxyDelayBetweenRetriesInSec','30','general'); +select fn_db_add_config_value('ForemanUrl','','general'); +select fn_db_add_config_value('ForemanUserName','','general'); +select fn_db_add_config_value('ForemanPassword','','general'); select fn_db_add_config_value('FindFenceProxyRetries','3','general'); select fn_db_add_config_value('FreeSpaceCriticalLowInGB','5','general'); select fn_db_add_config_value('FreeSpaceLow','10','general'); diff --git a/backend/manager/modules/bll/pom.xml b/backend/manager/modules/bll/pom.xml index 20c92f5..c7628bc 100644 --- a/backend/manager/modules/bll/pom.xml +++ b/backend/manager/modules/bll/pom.xml @@ -111,6 +111,15 @@ <version>1.6</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.codehaus.jackson</groupId> + <artifactId>jackson-core-asl</artifactId> + </dependency> + <dependency> + <groupId>org.codehaus.jackson</groupId> + <artifactId>jackson-mapper-asl</artifactId> + </dependency> + </dependencies> <build> diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java new file mode 100644 index 0000000..324ac922 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java @@ -0,0 +1,22 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.bll.host.provider.HostProvider; +import org.ovirt.engine.core.bll.host.provider.HostProviderProxyFactory; +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.common.queries.GetHostListFromExternalProviderParameters; + +public class GetHostListFromExternalProviderQuery<P extends GetHostListFromExternalProviderParameters> extends QueriesCommandBase<P> { + public GetHostListFromExternalProviderQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + String url = Config.<String> GetValue(ConfigValues.ForemanUrl); + String userName = Config.<String> GetValue(ConfigValues.ForemanUserName); + String password = Config.<String> GetValue(ConfigValues.ForemanPassword); + HostProvider hostProvider = new HostProvider(url, userName, password); + getQueryReturnValue().setReturnValue(HostProviderProxyFactory.getInstance().create(hostProvider).getAll()); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java new file mode 100644 index 0000000..d22d48c --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java @@ -0,0 +1,39 @@ +package org.ovirt.engine.core.bll.host.provider; + +public class HostProvider { + private String url; + private String userName; + private String password; + + public HostProvider(String url, String userName, String password) { + super(); + this.url = url; + this.userName = userName; + this.password = password; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java new file mode 100644 index 0000000..d67f7c1 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java @@ -0,0 +1,12 @@ +package org.ovirt.engine.core.bll.host.provider; + +import java.util.List; + +import org.ovirt.engine.core.common.businessentities.VDS; + +public interface HostProviderProxy { + + List<VDS> getAll(); + List<VDS> getFiltered(String filter); + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java new file mode 100644 index 0000000..c050a85 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java @@ -0,0 +1,24 @@ +package org.ovirt.engine.core.bll.host.provider; + +import org.ovirt.engine.core.bll.host.provider.foreman.ForemanHostProviderProxy; + +public class HostProviderProxyFactory { + private static final HostProviderProxyFactory INSTANCE = new HostProviderProxyFactory(); + + private HostProviderProxyFactory() { + } + + public static HostProviderProxyFactory getInstance() { + return INSTANCE; + } + + public HostProviderProxy create(HostProvider hostProvider) { + return new ForemanHostProviderProxy(hostProvider); + } + + public static void main(String args[]) { + HostProvider provider = new HostProvider("https://foreman.sat.lab.tlv.redhat.com", "oourfali", "aA1234!"); + HostProviderProxy proxy = getInstance().create(provider); + System.out.println(proxy.getAll().size()); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java new file mode 100644 index 0000000..5011995 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.core.bll.host.provider.foreman; + +import org.codehaus.jackson.map.annotate.JsonRootName; + +@JsonRootName("host") +public class ForemanHost { + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java new file mode 100644 index 0000000..a5a3d83 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java @@ -0,0 +1,15 @@ +package org.ovirt.engine.core.bll.host.provider.foreman; + +public class ForemanHostList { + + private ForemanHost[] hosts; + + public ForemanHost[] getHosts() { + return hosts; + } + + public void setHosts(ForemanHost[] hosts) { + this.hosts = hosts; + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java new file mode 100644 index 0000000..fef8b4d --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java @@ -0,0 +1,84 @@ +package org.ovirt.engine.core.bll.host.provider.foreman; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.httpclient.Credentials; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.UsernamePasswordCredentials; +import org.apache.commons.httpclient.auth.AuthScope; +import org.apache.commons.httpclient.methods.GetMethod; +import org.ovirt.engine.core.bll.host.provider.HostProvider; +import org.ovirt.engine.core.bll.host.provider.HostProviderProxy; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.codehaus.jackson.JsonParseException; +import org.codehaus.jackson.map.JsonMappingException; +import org.codehaus.jackson.map.ObjectMapper; +import org.codehaus.jackson.map.DeserializationConfig.Feature; +import org.apache.commons.lang.StringUtils; + +public class ForemanHostProviderProxy implements HostProviderProxy { + + private HostProvider hostProvider; + + private HttpClient httpClient = new HttpClient(); + + private ObjectMapper objectMapper = new ObjectMapper(); + + public ForemanHostProviderProxy(HostProvider hostProvider) { + this.hostProvider = hostProvider; + objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); + Credentials hostProviderCredentials = new UsernamePasswordCredentials(hostProvider.getUserName(), hostProvider.getPassword()); + httpClient.getState().setCredentials(AuthScope.ANY, hostProviderCredentials); + } + + @Override + public List<VDS> getAll() { + HttpMethod method = new GetMethod(hostProvider.getUrl() + "/hosts?format=json"); + return runHostListMethod(method); + } + + private List<VDS> runHostListMethod(HttpMethod method) { + try{ + + System.out.println(httpClient.executeMethod(method)); + ForemanHostWrapper[] hosts = objectMapper.readValue(method.getResponseBody(), ForemanHostWrapper[].class); + return map(Arrays.asList(hosts)); + + } catch (JsonParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (JsonMappingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + private List<VDS> map(List<ForemanHostWrapper> foremanHosts) { + ArrayList<VDS> hosts = new ArrayList<VDS>(foremanHosts.size()); + + for (ForemanHostWrapper host : foremanHosts) { + VDS vds = new VDS(); + String hostName = host.getHost().getName(); + vds.setVdsName(hostName); + vds.setManagementIp(hostName); + hosts.add(vds); + } + + return hosts; + } + + @Override + public List<VDS> getFiltered(String filter) { + HttpMethod method = new GetMethod(hostProvider.getUrl() + "/hosts" + (filter.isEmpty()? StringUtils.EMPTY : "?&search=" + filter) + "&format=json"); + return runHostListMethod(method); + } + +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java new file mode 100644 index 0000000..ee064b8 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java @@ -0,0 +1,14 @@ +package org.ovirt.engine.core.bll.host.provider.foreman; + +public class ForemanHostWrapper { + + private ForemanHost host; + + public ForemanHost getHost() { + return host; + } + + public void setHost(ForemanHost host) { + this.host = host; + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java new file mode 100644 index 0000000..ad4a2b5 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java @@ -0,0 +1,14 @@ +package org.ovirt.engine.core.bll.host.provider; + +import org.junit.Test; + +public class HostProviderProxyFactoryTest { + + @Test + public void testCreate() { + HostProvider provider = new HostProvider("http://foreman-ovirt-dev1.eng.lab.tlv.redhat.com", "admin", "changeme"); + HostProviderProxy proxy = HostProviderProxyFactory.getInstance().create(provider); + System.out.println(proxy.getAll().size()); + System.out.println(proxy.getAll().get(0)); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java index 3422353..ffbb1b2 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java @@ -1356,6 +1356,18 @@ @DefaultValueAttribute("false") MigrationNetworkEnabled(502), + @TypeConverterAttribute(String.class) + @DefaultValueAttribute("") + ForemanUrl(503), + + @TypeConverterAttribute(String.class) + @DefaultValueAttribute("") + ForemanUserName(504), + + @TypeConverterAttribute(String.class) + @DefaultValueAttribute("") + ForemanPassword(505), + Invalid(65535); private int intValue; diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java index fc2dd12..c5cb5c1 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java @@ -15,6 +15,8 @@ MaxVdsMemOverCommit(ConfigAuthType.User), MaxVdsMemOverCommitForServers(ConfigAuthType.User), AdUserName, + // ForemanUrl attribute + ForemanUrl, // TODO remove remarks and AdUserPassword completely in version 3.1. // AdUserPassword field format has been changed. // AdUserPassword, diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java new file mode 100644 index 0000000..58ec6c3 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java @@ -0,0 +1,7 @@ +package org.ovirt.engine.core.common.queries; + +public class GetHostListFromExternalProviderParameters extends VdcQueryParametersBase { + + private static final long serialVersionUID = 8729202312358351850L; + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index fbc99f9..6e5e8ab 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -31,6 +31,7 @@ GetHostsByClusterId(VdcQueryAuthType.User), IsDisplayAddressConsistentInCluster, GetAllVdsByStoragePool(VdcQueryAuthType.User), + GetHostListFromExternalProvider(), // Vds Networks GetVdsInterfacesByVdsId(VdcQueryAuthType.User), diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index b0d262e..038f324 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -68,6 +68,7 @@ import org.ovirt.engine.core.common.queries.GetDomainListParameters; import org.ovirt.engine.core.common.queries.GetEntitiesWithPermittedActionParameters; import org.ovirt.engine.core.common.queries.GetExistingStorageDomainListParameters; +import org.ovirt.engine.core.common.queries.GetHostListFromExternalProviderParameters; import org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters; import org.ovirt.engine.core.common.queries.GetLunsByVgIdParameters; import org.ovirt.engine.core.common.queries.GetPermittedStorageDomainsByStoragePoolIdParameters; @@ -321,6 +322,21 @@ aQuery); } + public static void GetExternalProviderHostList(AsyncQuery aQuery) { + aQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + if (source == null) + { + return new ArrayList<VDS>(); + } + return source; + } + }; + Frontend.RunQuery(VdcQueryType.GetHostListFromExternalProvider, new GetHostListFromExternalProviderParameters(), aQuery); + } + public static void GetPoolById(AsyncQuery aQuery, Guid poolId) { aQuery.converterCallback = new IAsyncConverter() { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java index 552d419..38fdae6 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java @@ -652,6 +652,9 @@ } }; AsyncDataProvider.GetDataCenterList(_asyncQuery); + + hostModel.getExternalHostProviderEnabled().setEntity(false); + hostModel.getHostName().setIsEmpty(true); } private void GoToEventsTab() diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java index b50af8f..270f30e 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java @@ -7,9 +7,11 @@ import org.ovirt.engine.core.common.businessentities.FenceAgentOrder; import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue; +import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.mode.ApplicationMode; +import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.common.queries.GetNewVdsFenceStatusParameters; import org.ovirt.engine.core.common.queries.ValueObjectMap; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; @@ -141,6 +143,18 @@ privateDataCenter = value; } + private ListModel privateHostName; + + public ListModel getHostName() + { + return privateHostName; + } + + private void setHostName(ListModel value) + { + privateHostName = value; + } + private ListModel privateCluster; public ListModel getCluster() @@ -243,6 +257,16 @@ public void setConsoleAddressEnabled(EntityModel consoleAddressEnabled) { this.consoleAddressEnabled = consoleAddressEnabled; + } + + private EntityModel externalHostProviderEnabled; + + public EntityModel getExternalHostProviderEnabled() { + return externalHostProviderEnabled; + } + + public void setExternalHostProviderEnabled(EntityModel externalHostProviderEnabled) { + this.externalHostProviderEnabled = externalHostProviderEnabled; } private ListModel privatePmType; @@ -616,8 +640,11 @@ setName(new EntityModel()); setHost(new EntityModel()); setDataCenter(new ListModel()); + setHostName(new ListModel()); getDataCenter().getSelectedItemChangedEvent().addListener(this); getDataCenter().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); + getHostName().getSelectedItemChangedEvent().addListener(this); + getHostName().setIsAvailable(ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly); setCluster(new ListModel()); getCluster().getSelectedItemChangedEvent().addListener(this); setPort(new EntityModel()); @@ -625,13 +652,29 @@ setOverrideIpTables(new EntityModel()); getOverrideIpTables().setEntity(false); - IEventListener pmListener = new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { UpdatePmModels(); } }; + + setExternalHostProviderEnabled(new EntityModel()); + String foremanUrl = (String) AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.ForemanUrl); + + if (foremanUrl != null && !foremanUrl.isEmpty()) { + IEventListener externalHostsListener = new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + UpdateExternalHostModels(); + } + }; + getExternalHostProviderEnabled().setEntity(true); + getExternalHostProviderEnabled().getEntityChangedEvent().addListener(externalHostsListener); + } else { + getExternalHostProviderEnabled().setIsAvailable(false); + getHostName().setIsAvailable(false); + } // Initialize primary PM fields. setManagementIp(new EntityModel()); @@ -838,6 +881,8 @@ else if (ev.matchesDefinition(ListModel.SelectedItemChangedEventDefinition) && sender == getCluster()) { Cluster_SelectedItemChanged(); + } else if (ev.matchesDefinition(ListModel.SelectedItemChangedEventDefinition) && sender == getHostName()) { + HostName_SelectedItemChanged(); } else if (sender == getConsoleAddressEnabled()) { consoleAddressChanged(); } @@ -911,6 +956,22 @@ updatePmTypeList(pmTypes, getPmSecondaryType()); } }), cluster.getcompatibility_version()); + } + } + + private void HostName_SelectedItemChanged() + { + VDS host = (VDS) getHostName().getSelectedItem(); + + if (host != null) + { + getName().setEntity(host.getName()); // setting it as a proposed name + getHost().setEntity(host.getManagementIp()); // setting it as the name + getHost().setIsChangable(false); + } else { + getName().setEntity(""); //$NON-NLS-1$ + getHost().setEntity(""); //$NON-NLS-1$ + getHost().setIsChangable(true); } } @@ -992,6 +1053,39 @@ return dict; } + private void UpdateExternalHostModels() + { + boolean enabled = (Boolean) getExternalHostProviderEnabled().getEntity(); + if (enabled && getHostName().getIsEmpty()) { + AsyncQuery getHostsQuery = new AsyncQuery(); + getHostsQuery.setModel(this); + getHostsQuery.asyncCallback = new INewAsyncCallback() { + @Override + public void OnSuccess(Object model, Object result) + { + HostModel hostListModel = (HostModel) model; + + ArrayList<VDS> hosts = (ArrayList<VDS>) result; + ListModel hostNameListModel = hostListModel.getHostName(); + hostNameListModel.setItems(hosts); + hostNameListModel.setSelectedItem(null); + hostNameListModel.setIsSelectable(true); + hostNameListModel.setIsChangable(true); + hostNameListModel.setIsEmpty(false); + getName().setEntity(""); + getHost().setEntity(""); + } + }; + AsyncDataProvider.GetExternalProviderHostList(getHostsQuery); + } else { + getHostName().setIsSelectable(enabled); + getHostName().setIsChangable(enabled); + getHostName().setSelectedItem(null); + getName().setEntity(""); + getHost().setEntity(""); + } + } + private void UpdatePmModels() { boolean isPm = (Boolean) getIsPm().getEntity(); @@ -1025,9 +1119,11 @@ List<String> pmOptions = (ArrayList<String>) returnValue; - getPmPort().setIsAvailable(pmOptions.contains(PmPortKey)); - getPmSlot().setIsAvailable(pmOptions.contains(PmSlotKey)); - getPmSecure().setIsAvailable(pmOptions.contains(PmSecureKey)); + if (pmOptions != null) { + getPmPort().setIsAvailable(pmOptions.contains(PmPortKey)); + getPmSlot().setIsAvailable(pmOptions.contains(PmSlotKey)); + getPmSecure().setIsAvailable(pmOptions.contains(PmSecureKey)); + } } }), pmType); } else { @@ -1061,9 +1157,11 @@ List<String> pmOptions = (ArrayList<String>) returnValue; - getPmSecondaryPort().setIsAvailable(pmOptions.contains(PmPortKey)); - getPmSecondarySlot().setIsAvailable(pmOptions.contains(PmSlotKey)); - getPmSecondarySecure().setIsAvailable(pmOptions.contains(PmSecureKey)); + if (pmOptions != null) { + getPmSecondaryPort().setIsAvailable(pmOptions.contains(PmPortKey)); + getPmSecondarySlot().setIsAvailable(pmOptions.contains(PmSlotKey)); + getPmSecondarySecure().setIsAvailable(pmOptions.contains(PmSecureKey)); + } } }), pmSecondaryType); } else { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index 7ae679e..a88e360 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -385,6 +385,9 @@ @DefaultStringValue("Name") String hostPopupNameLabel(); + @DefaultStringValue("External Host") + String hostPopupExternalHosts(); + @DefaultStringValue("Address") String hostPopupHostAddressLabel(); @@ -397,6 +400,9 @@ @DefaultStringValue("Automatically configure host firewall") String hostPopupOverrideIpTablesLabel(); + @DefaultStringValue("Show external hosts") + String hostPopupEnableExternalHostProvider(); + @DefaultStringValue("Enable Power Management") String hostPopupPmEnabledLabel(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java index ff1815c..274dd5c 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java @@ -2,6 +2,7 @@ import java.util.List; +import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.storage_pool; import org.ovirt.engine.core.common.mode.ApplicationMode; @@ -97,6 +98,11 @@ @WithElementId("name") EntityModelTextBoxEditor nameEditor; + @UiField(provided = true) + @Path(value = "hostName.selectedItem") + @WithElementId("hostName") + ListModelListBoxEditor<Object> hostNameEditor; + @UiField @Path(value = "host.entity") @WithElementId("host") @@ -173,6 +179,11 @@ @Path(value = "pmSecure.entity") @WithElementId("pmSecure") EntityModelCheckBoxEditor pmSecureEditor; + + @UiField(provided = true) + @Path(value = "externalHostProviderEnabled.entity") + @WithElementId("externalHostProviderEnabled") + EntityModelCheckBoxEditor externalHostProviderEnabledEditor; @UiField FlowPanel pmSecondaryPanel; @@ -299,6 +310,7 @@ private void addStyles() { overrideIpTablesEditor.addContentWidgetStyleName(style.overrideIpStyle()); + externalHostProviderEnabledEditor.addContentWidgetStyleName(style.checkBox()); } private void initEditors() { @@ -314,6 +326,13 @@ @Override public String renderNullSafe(Object object) { return ((VDSGroup) object).getname(); + } + }); + + hostNameEditor = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() { + @Override + public String renderNullSafe(Object object) { + return ((VDS) object).getName(); } }); @@ -340,6 +359,7 @@ // Check boxes pmEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); + externalHostProviderEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT); } void localize(ApplicationConstants constants) { @@ -351,6 +371,7 @@ hostAddressEditor.setLabel(constants.hostPopupHostAddressLabel()); rootPasswordEditor.setLabel(constants.hostPopupRootPasswordLabel()); overrideIpTablesEditor.setLabel(constants.hostPopupOverrideIpTablesLabel()); + externalHostProviderEnabledEditor.setLabel(constants.hostPopupEnableExternalHostProvider()); // Power Management tab powerManagementTab.setLabel(constants.hostPopupPowerManagementTabLabel()); @@ -588,6 +609,8 @@ String radioButton(); String overrideIpStyle(); + + String checkBox(); } } diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml index 3b5d25d..5d08fb47 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml @@ -100,9 +100,19 @@ float: right; width: 230px; } + + .checkBox .gwt-CheckBox{ + padding: 0px !important; + border-width: 0px !important; + } + + .checkBox { + padding: 0px; + } + </ui:style> - <d:SimpleDialogPanel width="650px" height="500px"> + <d:SimpleDialogPanel width="670px" height="500px"> <d:content> <t:DialogTabPanel ui:field="tabPanel" height="100%"> <t:tab> @@ -112,6 +122,10 @@ <g:FlowPanel addStyleNames="{style.generalTabTopDecorator}"> <e:ListModelListBoxEditor ui:field="dataCenterEditor"/> <e:ListModelListBoxEditor ui:field="clusterEditor"/> + <g:HorizontalPanel width="100%"> + <e:EntityModelCheckBoxEditor ui:field="externalHostProviderEnabledEditor"/> + <e:ListModelListBoxEditor ui:field="hostNameEditor"/> + </g:HorizontalPanel> </g:FlowPanel> <e:EntityModelTextBoxEditor ui:field="nameEditor"/> <e:EntityModelTextBoxEditor ui:field="hostAddressEditor"/> -- To view, visit http://gerrit.ovirt.org/14582 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I30ea180e477a8f0714c4dc97ec55f29be515723a Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Oved Ourfali <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
