Yair Zaslavsky has uploaded a new change for review. Change subject: aaa: Adding namespace dropdown list to "add user" dialog ......................................................................
aaa: Adding namespace dropdown list to "add user" dialog This both adds the namespace dropdown list and fixes search to support namespace Bug-Url: https://bugzilla.redhat.com/1117502 Topic: AAA Change-Id: Ic78559243c765271bf8e12abd035deba05226bda Signed-off-by: Yair Zaslavsky <[email protected]> --- D backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java D backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml 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/users/AdElementListModel.java 13 files changed, 142 insertions(+), 47 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/30698/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java deleted file mode 100644 index 6104d61..0000000 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetAvailableAuthzNamespacesQuery.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.ovirt.engine.core.bll; - -public class GetAvailableAuthzNamespacesQuery { - -} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java index 4ba420b..2af84af 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SearchQuery.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.List; -import org.ovirt.engine.api.extensions.aaa.Authz; import org.ovirt.engine.core.aaa.AuthenticationProfileRepository; import org.ovirt.engine.core.aaa.DirectoryGroup; import org.ovirt.engine.core.aaa.DirectoryUser; @@ -33,9 +32,10 @@ import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.SearchEngineIllegalCharacterException; import org.ovirt.engine.core.common.errors.SqlInjectionException; +import org.ovirt.engine.core.common.queries.DirectorySearchParameters; import org.ovirt.engine.core.common.queries.SearchParameters; -import org.ovirt.engine.core.common.utils.ListUtils.Filter; import org.ovirt.engine.core.common.utils.ListUtils; +import org.ovirt.engine.core.common.utils.ListUtils.Filter; import org.ovirt.engine.core.compat.DateTime; import org.ovirt.engine.core.compat.TimeSpan; import org.ovirt.engine.core.dao.SearchDAO; @@ -179,12 +179,10 @@ } ExtensionProxy authz = EngineExtensionsManager.getInstance().getExtensionByName(data.getDomain()); - List<DirectoryUser> results = new ArrayList<>(); - for (String namespace : authz.getContext().<List<String>> get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) { - results.addAll(DirectoryUtils.findDirectoryUsersByQuery(authz, namespace, data.getQuery())); - } + return new ArrayList<DirectoryUser>(DirectoryUtils.findDirectoryUsersByQuery(authz, + ((DirectorySearchParameters) getParameters()).getNamespace(), + data.getQuery())); - return results; } private List<DirectoryGroup> searchDirectoryGroups() { @@ -195,11 +193,9 @@ } ExtensionProxy authz = EngineExtensionsManager.getInstance().getExtensionByName(data.getDomain()); - List<DirectoryGroup> results = new ArrayList<>(); - for (String namespace : authz.getContext().<List<String>> get(Authz.ContextKeys.AVAILABLE_NAMESPACES)) { - results.addAll(DirectoryUtils.findDirectoryGroupsByQuery(authz, namespace, data.getQuery())); - } - return results; + return new ArrayList<DirectoryGroup>(DirectoryUtils.findDirectoryGroupsByQuery(authz, + ((DirectorySearchParameters) getParameters()).getNamespace(), + data.getQuery())); } private List<DbUser> searchDbUsers() { diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java new file mode 100644 index 0000000..937af92 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/DirectorySearchParameters.java @@ -0,0 +1,36 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.common.interfaces.SearchType; + +public class DirectorySearchParameters extends SearchParameters { + + /** + * + */ + private static final long serialVersionUID = 1831775270159639568L; + + private String namespace; + + public DirectorySearchParameters() { + super(); + } + + public DirectorySearchParameters(String searchPattern, SearchType searchType, String namespace) { + super(searchPattern, searchType); + this.namespace = namespace; + } + + public DirectorySearchParameters(String searchPattern, + SearchType searchType, + boolean caseSensitive, + String namespace) { + super(searchPattern, searchType, caseSensitive); + this.namespace = namespace; + } + + public String getNamespace() { + return namespace; + } + + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java deleted file mode 100644 index 2ae76c5..0000000 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetAvailableAuthzNamespacesQueryParameters.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.ovirt.engine.core.common.queries; - -public class GetAvailableAuthzNamespacesQueryParameters extends VdcQueryParametersBase { - - /** - * - */ - private static final long serialVersionUID = 2473511045533756911L; - private String authzName; - - public GetAvailableAuthzNamespacesQueryParameters() { - } - - public GetAvailableAuthzNamespacesQueryParameters(String authzName) { - this.authzName = authzName; - } - - public String getAuthzName() { - return authzName; - } - -} 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 634d301..3066929 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 @@ -156,6 +156,7 @@ // Directory queries: GetDirectoryUserById(VdcQueryAuthType.User), GetDirectoryGroupById(VdcQueryAuthType.User), + GetAvailableNamespaces(VdcQueryAuthType.User), // Groups queries: GetAllDbGroups(VdcQueryAuthType.User), @@ -204,7 +205,7 @@ // Search queries Search, - GetAvailableAuthzNamespaces, + GetAvailablezNamespaces, // Public services GetDomainList(VdcQueryAuthType.User), diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java index 18891d2..4ccdae0 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendResource.java @@ -75,7 +75,7 @@ protected <T> T getEntity(Class<T> clz, SearchType searchType, String constraint) { try { VdcQueryReturnValue result = runQuery(VdcQueryType.Search, - new SearchParameters(constraint, searchType)); + createSearchParameters(searchType, constraint)); if (!result.getSucceeded()) { backendFailure(result.getExceptionString()); } @@ -85,11 +85,16 @@ } } + protected VdcQueryReturnValue runQuery(VdcQueryType queryType, VdcQueryParametersBase queryParams) { queryParams.setFiltered(isFiltered()); return backend.runQuery(queryType, sessionize(queryParams)); } + protected SearchParameters createSearchParameters(SearchType searchType, String constraint) { + return new SearchParameters(constraint, searchType); + } + protected <T> T getEntity(Class<T> clz, VdcQueryType query, VdcQueryParametersBase queryParams, String identifier) { return getEntity(clz, query, queryParams, identifier, false); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java index 615540f..58065f7 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainGroupsResource.java @@ -14,6 +14,8 @@ import org.ovirt.engine.api.restapi.resource.SingleEntityResource; import org.ovirt.engine.core.aaa.DirectoryGroup; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.DirectorySearchParameters; +import org.ovirt.engine.core.common.queries.SearchParameters; /** * This resource corresponds to the groups that exist in a directory accessible to the engine. Those groups may or may @@ -40,6 +42,11 @@ return parent; } + @Override + protected SearchParameters createSearchParameters(SearchType searchType, String constraint) { + return new DirectorySearchParameters(constraint, searchType, "*"); + } + public Domain getDirectory() { return parent.getDirectory(); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java index f19a7c2..4466e42 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/aaa/BackendDomainUsersResource.java @@ -14,6 +14,8 @@ import org.ovirt.engine.api.restapi.resource.SingleEntityResource; import org.ovirt.engine.core.aaa.DirectoryUser; import org.ovirt.engine.core.common.interfaces.SearchType; +import org.ovirt.engine.core.common.queries.DirectorySearchParameters; +import org.ovirt.engine.core.common.queries.SearchParameters; /** * This resource corresponds to the users that exist in a directory accessible @@ -47,6 +49,11 @@ } @Override + protected SearchParameters createSearchParameters(SearchType searchType, String constraint) { + return new DirectorySearchParameters(constraint, searchType, "*"); + } + + @Override @SingleEntityResource public DomainUserResource getDomainUserSubResource(String id) { return inject(new BackendDomainUserResource(id, this)); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index e0ae04a..06f42be 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1190,6 +1190,9 @@ @DefaultStringValue("Search:") String searchPermissionsPopup(); + @DefaultStringValue("") + String namespacePermissionsPopup(); + // Pool General @DefaultStringValue("Name") String namePoolGeneral(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java index d81f5a0..b500036 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.java @@ -53,6 +53,11 @@ @WithElementId("profile") public ListModelListBoxEditor<Object> profileSelection; + @UiField(provided = true) + @Path("namespace.selectedItem") + @WithElementId("namespace") + public ListModelListBoxEditor<Object> namespaceSelection; + @UiField @Ignore public Label roleToAssignLabel; @@ -129,6 +134,13 @@ return ((Role) object).getname(); } }); + + namespaceSelection = new ListModelListBoxEditor<Object>(new NullSafeRenderer<Object>() { + @Override + protected String renderNullSafe(Object object) { + return object.toString(); + } + }); } private void initTable(CommonApplicationConstants constants) { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml index 2ea7f8a..9339f1d 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/permissions/AbstractPermissionsPopupView.ui.xml @@ -27,7 +27,7 @@ } .searchStringEditor { - width: 250px; + width: 200px; height: 18px; margin-left: 5px; margin-top: 3px; @@ -39,13 +39,18 @@ height: 30px; } + .namespaceSelection { + width: 300px; + height: 30px; + } + .everyonePanel { height: 30px; margin-top: 3px; } .searchStringPanel { - width: 660px; + width: 860px; height: 30px; } @@ -63,7 +68,7 @@ } </ui:style> - <d:SimpleDialogPanel width="700px" height="500px"> + <d:SimpleDialogPanel width="900px" height="500px"> <d:content> <g:FlowPanel> <g:SimplePanel ui:field="everyonePanel" addStyleNames="{style.everyonePanel}"> @@ -74,6 +79,7 @@ </g:SimplePanel> <g:HorizontalPanel verticalAlignment="ALIGN_MIDDLE" addStyleNames="{style.searchStringPanel}"> <e:ListModelListBoxEditor addStyleNames="{style.profileSelection}" label="{constants.searchPermissionsPopup}" ui:field="profileSelection" /> + <e:ListModelListBoxEditor addStyleNames="{style.namespaceSelection}" ui:field="namespaceSelection" /> <e:TextBoxChanger addStyleNames="{style.searchStringEditor}" ui:field="searchStringEditor" /> <w:UiCommandButton ui:field="searchButton" addStyleNames="{style.goButton} appv_searchButton_pfly_fix" /> </g:HorizontalPanel> 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 08b0927..27e75aa 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 @@ -1210,6 +1210,18 @@ Frontend.getInstance().runQuery(VdcQueryType.GetAAAProfileList, new VdcQueryParametersBase(), aQuery); } + public void getAAANamespaces(AsyncQuery aQuery) { + aQuery.converterCallback = new IAsyncConverter() { + @Override + public Object Convert(Object source, AsyncQuery _asyncQuery) + { + return source != null ? (HashMap<String, List<String>>) source : new HashMap<String, List<String>>(); + } + }; + Frontend.getInstance().runQuery(VdcQueryType.GetAvailableNamespaces, new VdcQueryParametersBase(), aQuery); + } + + public void getAAAProfilesEntriesList(AsyncQuery aQuery) { aQuery.converterCallback = new IAsyncConverter() { @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java index 2841869..7045114 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/users/AdElementListModel.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -14,7 +15,7 @@ import org.ovirt.engine.core.common.businessentities.Role; import org.ovirt.engine.core.common.businessentities.aaa.DbUser; import org.ovirt.engine.core.common.interfaces.SearchType; -import org.ovirt.engine.core.common.queries.SearchParameters; +import org.ovirt.engine.core.common.queries.DirectorySearchParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.StringHelper; @@ -29,6 +30,7 @@ import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; +import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; public class AdElementListModel extends SearchableListModel @@ -45,6 +47,8 @@ } private Iterable privateExcludeItems; + + private HashMap<String, List<String>> namespacesMap; public Iterable getExcludeItems() { @@ -66,6 +70,16 @@ private void setProfile(ListModel value) { privateProfile = value; + } + + private ListModel privateNamespace; + + public void setNamespace(ListModel value) { + privateNamespace = value; + } + + public ListModel getNamespace() { + return privateNamespace; } private ListModel privateRole; @@ -157,6 +171,7 @@ { setRole(new ListModel()); setProfile(new ListModel()); + setNamespace(new ListModel()); setSelectAll(new EntityModel()); getSelectAll().setEntity(false); @@ -179,9 +194,26 @@ @Override public void onSuccess(Object model, Object result) { populateProfiles((List<ProfileEntry>) result); + getProfile().getSelectedItemChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + getNamespace().setItems(namespacesMap.get(((ProfileEntry) getProfile().getSelectedItem()).getAuthz())); + } + }); } })); + AsyncDataProvider.getInstance().getAAANamespaces(new AsyncQuery(this, new INewAsyncCallback() { + + @Override + public void onSuccess(Object model, Object result) { + namespacesMap = (HashMap<String, List<String>>) result; + List<String> selectedNamespaces = + namespacesMap.get(((ProfileEntry) (getProfile().getSelectedItem())).getAuthz()); + getNamespace().setItems(selectedNamespaces); + getNamespace().setSelectedItem(selectedNamespaces.get(0)); + } + })); AsyncDataProvider.getInstance().getRoleList(new AsyncQuery(this, new INewAsyncCallback() { @@ -196,6 +228,11 @@ protected void populateProfiles(List<ProfileEntry> profiles) { getProfile().setItems(profiles); getProfile().setSelectedItem(Linq.firstOrDefault(profiles)); + } + + protected void populateNamespaces(List<String> namespaces) { + getNamespace().setItems(namespaces); + getNamespace().setSelectedItem(Linq.firstOrDefault(namespaces)); } protected void populateRoles(List<Role> roles){ @@ -342,13 +379,13 @@ protected void findGroups(String searchString, AsyncQuery query) { Frontend.getInstance() .runQuery(VdcQueryType.Search, - new SearchParameters("ADGROUP@" + ((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + searchString, SearchType.DirectoryGroup), query); //$NON-NLS-1$ //$NON-NLS-2$ + new DirectorySearchParameters("ADGROUP@" + ((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + searchString, SearchType.DirectoryGroup, (String) getNamespace().getSelectedItem()), query); //$NON-NLS-1$ //$NON-NLS-2$ } protected void findUsers(String searchString, AsyncQuery query) { Frontend.getInstance() .runQuery(VdcQueryType.Search, - new SearchParameters("ADUSER@" + ((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + searchString, SearchType.DirectoryUser), query); //$NON-NLS-1$ //$NON-NLS-2$ + new DirectorySearchParameters("ADUSER@" + ((ProfileEntry) getProfile().getSelectedItem()).getAuthz() + ": " + searchString, SearchType.DirectoryUser, (String) getNamespace().getSelectedItem()), query); //$NON-NLS-1$ //$NON-NLS-2$ } protected void onUserAndAdGroupsLoaded(AdElementListModel adElementListModel) -- To view, visit http://gerrit.ovirt.org/30698 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic78559243c765271bf8e12abd035deba05226bda Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yair Zaslavsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
