Skip to content

Commit 2d053a7

Browse files
Added new filter to guest os mapping
1 parent 0dcc11b commit 2d053a7

File tree

10 files changed

+61
-22
lines changed

10 files changed

+61
-22
lines changed

api/src/main/java/org/apache/cloudstack/api/command/admin/guest/AddGuestOsCmd.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.command.admin.guest;
1818

19+
import org.apache.commons.collections.MapUtils;
1920
import org.apache.log4j.Logger;
2021

2122
import org.apache.cloudstack.api.APICommand;
@@ -57,7 +58,7 @@ public class AddGuestOsCmd extends BaseAsyncCreateCmd {
5758
@Parameter(name = ApiConstants.NAME, type = CommandType.STRING, required = false, description = "Optional name for Guest OS")
5859
private String osName;
5960

60-
@Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, required = true, description = "Map of (key/value pairs)")
61+
@Parameter(name = ApiConstants.DETAILS, type = CommandType.MAP, required = false, description = "Map of (key/value pairs)")
6162
private Map details;
6263

6364

@@ -79,7 +80,7 @@ public String getOsName() {
7980

8081
public Map getDetails() {
8182
Map<String, String> detailsMap = new HashMap<String, String>();
82-
if (!details.isEmpty()) {
83+
if (!MapUtils.isEmpty(details)) {
8384
Collection<?> servicesCollection = details.values();
8485
Iterator<?> iter = servicesCollection.iterator();
8586
while (iter.hasNext()) {

api/src/main/java/org/apache/cloudstack/api/command/admin/guest/ListGuestOsMappingCmd.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public class ListGuestOsMappingCmd extends BaseListCmd {
5151
@Parameter(name = ApiConstants.OS_DISPLAY_NAME, type = CommandType.STRING, required = false, description = "list Guest OS mapping by OS display name")
5252
private String osDisplayName;
5353

54+
@Parameter(name = ApiConstants.OS_NAME_FOR_HYPERVISOR, type = CommandType.STRING, required = false, description = "list Guest OS mapping by OS mapping name with hypervisor")
55+
private String osNameForHypervisor;
56+
5457
@Parameter(name = ApiConstants.HYPERVISOR, type = CommandType.STRING, required = false, description = "list Guest OS mapping by hypervisor")
5558
private String hypervisor;
5659

@@ -73,6 +76,10 @@ public String getOsDisplayName() {
7376
return osDisplayName;
7477
}
7578

79+
public String getOsNameForHypervisor() {
80+
return osNameForHypervisor;
81+
}
82+
7683
public String getHypervisor() {
7784
return hypervisor;
7885
}

api/src/main/java/org/apache/cloudstack/api/response/GuestOSResponse.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public class GuestOSResponse extends BaseResponse {
3939
@Param(description = "the name of the OS category")
4040
private String osCategoryName;
4141

42-
@SerializedName(ApiConstants.OS_NAME)
42+
@SerializedName(ApiConstants.NAME)
4343
@Param(description = "the name of the OS type")
44-
private String osName;
44+
private String name;
4545

4646
@SerializedName(ApiConstants.IS_USER_DEFINED)
4747
@Param(description = "is the guest OS user defined")
@@ -71,12 +71,12 @@ public void setOsCategoryName(String osCategoryName) {
7171
this.osCategoryName = osCategoryName;
7272
}
7373

74-
public String getOsName() {
75-
return osName;
74+
public String getName() {
75+
return name;
7676
}
7777

78-
public void setOsName(String osName) {
79-
this.osName = osName;
78+
public void setName(String name) {
79+
this.name = name;
8080
}
8181

8282
public String getIsUserDefined() {

engine/schema/src/main/java/com/cloud/storage/dao/GuestOSDao.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,12 @@
1919
import com.cloud.storage.GuestOSVO;
2020
import com.cloud.utils.db.GenericDao;
2121

22+
import java.util.List;
23+
2224
public interface GuestOSDao extends GenericDao<GuestOSVO, Long> {
2325

2426
GuestOSVO listByDisplayName(String displayName);
2527

28+
List<GuestOSVO> listLikeDisplayName(String displayName);
2629
GuestOSVO findByCategoryIdAndDisplayNameOrderByCreatedDesc(long categoryId, String displayName);
2730
}

engine/schema/src/main/java/com/cloud/storage/dao/GuestOSDaoImpl.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,19 @@ public class GuestOSDaoImpl extends GenericDaoBase<GuestOSVO, Long> implements G
3333

3434
protected final SearchBuilder<GuestOSVO> Search;
3535

36+
protected final SearchBuilder<GuestOSVO> displayNameSearch;
37+
3638
public GuestOSDaoImpl() {
3739
Search = createSearchBuilder();
3840
Search.and("category_id", Search.entity().getCategoryId(), SearchCriteria.Op.EQ);
3941
Search.and("display_name", Search.entity().getDisplayName(), SearchCriteria.Op.EQ);
4042
Search.and("is_user_defined", Search.entity().getIsUserDefined(), SearchCriteria.Op.EQ);
4143
Search.done();
44+
45+
displayNameSearch = createSearchBuilder();
46+
displayNameSearch.and("display_name", displayNameSearch.entity().getDisplayName(), SearchCriteria.Op.LIKE);
47+
displayNameSearch.done();
48+
4249
}
4350

4451
@Override
@@ -48,6 +55,13 @@ public GuestOSVO listByDisplayName(String displayName) {
4855
return findOneBy(sc);
4956
}
5057

58+
@Override
59+
public List<GuestOSVO> listLikeDisplayName(String displayName) {
60+
SearchCriteria<GuestOSVO> sc = displayNameSearch.create();
61+
sc.setParameters("display_name", "%" + displayName + "%");
62+
return listBy(sc);
63+
}
64+
5165
@Override
5266
public GuestOSVO findByCategoryIdAndDisplayNameOrderByCreatedDesc(long categoryId, String displayName) {
5367
SearchCriteria<GuestOSVO> sc = Search.create();

server/src/main/java/com/cloud/api/ApiResponseHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3583,7 +3583,7 @@ public Site2SiteVpnConnectionResponse createSite2SiteVpnConnectionResponse(Site2
35833583
@Override
35843584
public GuestOSResponse createGuestOSResponse(GuestOS guestOS) {
35853585
GuestOSResponse response = new GuestOSResponse();
3586-
response.setOsName(guestOS.getDisplayName());
3586+
response.setName(guestOS.getDisplayName());
35873587
response.setId(guestOS.getUuid());
35883588
response.setIsUserDefined(String.valueOf(guestOS.getIsUserDefined()));
35893589
GuestOSCategoryVO category = ApiDBUtils.findGuestOsCategoryById(guestOS.getCategoryId());

server/src/main/java/com/cloud/server/ManagementServerImpl.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2610,6 +2610,7 @@ public Pair<List<? extends GuestOSHypervisor>, Integer> listGuestOSMappingByCrit
26102610
final Long id = cmd.getId();
26112611
final Long osTypeId = cmd.getOsTypeId();
26122612
final String osDisplayName = cmd.getOsDisplayName();
2613+
final String osNameForHypervisor = cmd.getOsNameForHypervisor();
26132614
final String hypervisor = cmd.getHypervisor();
26142615
final String hypervisorVersion = cmd.getHypervisorVersion();
26152616

@@ -2628,8 +2629,8 @@ public Pair<List<? extends GuestOSHypervisor>, Integer> listGuestOSMappingByCrit
26282629
sc.addAnd("guestOsId", SearchCriteria.Op.EQ, osTypeId);
26292630
}
26302631

2631-
if (osDisplayName != null) {
2632-
sc.addAnd("guestOsName", SearchCriteria.Op.LIKE, "%" + osDisplayName + "%");
2632+
if (osNameForHypervisor != null) {
2633+
sc.addAnd("guestOsName", SearchCriteria.Op.LIKE, "%" + osNameForHypervisor + "%");
26332634
}
26342635

26352636
if (hypervisor != null) {
@@ -2640,6 +2641,12 @@ public Pair<List<? extends GuestOSHypervisor>, Integer> listGuestOSMappingByCrit
26402641
sc.addAnd("hypervisorVersion", SearchCriteria.Op.EQ, hypervisorVersion);
26412642
}
26422643

2644+
if (osDisplayName != null) {
2645+
List<GuestOSVO> guestOSVOS = _guestOSDao.listLikeDisplayName(osDisplayName);
2646+
List<Long> guestOSids = guestOSVOS.stream().map(mo -> mo.getId()).collect(Collectors.toList());
2647+
sc.addAnd("guestOsId", SearchCriteria.Op.IN, guestOSids.toArray());
2648+
}
2649+
26432650
final Pair<List<GuestOSHypervisorVO>, Integer> result = _guestOSHypervisorDao.searchAndCount(sc, searchFilter);
26442651
return new Pair<List<? extends GuestOSHypervisor>, Integer>(result.first(), result.second());
26452652
}

ui/src/config/section/config.js

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,23 +88,29 @@ export default {
8888
title: 'label.guest.os',
8989
docHelp: 'adminguide/service_offerings.html#compute-and-disk-service-offerings',
9090
icon: 'database-outlined',
91-
permission: ['listOsTypes'],
92-
columns: ['osname', 'oscategoryname', 'isuserdefined'],
93-
details: ['osname', 'oscategoryname', 'isuserdefined'],
91+
permission: ['listOsTypes', 'listOsCategories'],
92+
columns: ['name', 'oscategoryname', 'isuserdefined'],
93+
details: ['name', 'oscategoryname', 'isuserdefined'],
9494
related: [{
9595
name: 'guestoshypervisormapping',
9696
title: 'label.guest.os.hypervisor.mappings',
9797
param: 'ostypeid'
9898
}],
99-
searchFilters: ['osname'],
99+
searchFilters: ['name'],
100100
actions: [
101101
{
102102
api: 'addGuestOs',
103103
icon: 'plus-outlined',
104104
label: 'label.add.guest.os',
105105
listView: true,
106106
dataView: false,
107-
args: ['osdisplayname', 'oscategoryid']
107+
args: ['osdisplayname', 'oscategoryid'],
108+
mapping: {
109+
oscategoryid: {
110+
api: 'listOsCategories',
111+
params: (record) => { return { oscategoryid: record.id } }
112+
}
113+
}
108114
},
109115
{
110116
api: 'updateGuestOs',
@@ -121,7 +127,8 @@ export default {
121127
args: ['ostypeid', 'hypervisor', 'hypervisorversion', 'osnameforhypervisor', 'osmappingcheckenabled', 'forced'],
122128
mapping: {
123129
ostypeid: {
124-
value: (record) => { return record.id }
130+
api: 'listOsTypes',
131+
params: (record) => { return { ostypeid: record.id } }
125132
}
126133
}
127134
},
@@ -145,7 +152,7 @@ export default {
145152
columns: ['hypervisor', 'hypervisorversion', 'osdisplayname', 'osnameforhypervisor'],
146153
details: ['hypervisor', 'hypervisorversion', 'osdisplayname', 'osnameforhypervisor', 'isuserdefined'],
147154
filters: ['all', 'kvm', 'vmware', 'xenserver', 'lxc', 'ovm3'],
148-
searchFilters: ['osdisplayname', 'hypervisor', 'hypervisorversion'],
155+
searchFilters: ['osdisplayname', 'osnameforhypervisor', 'hypervisor', 'hypervisorversion'],
149156
actions: [
150157
{
151158
api: 'addGuestOsMapping',

ui/src/views/image/RegisterOrUploadIso.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,11 @@
111111
}"
112112
:loading="osTypeLoading"
113113
:placeholder="apiParams.ostypeid.description">
114-
<a-select-option :value="opt.id" v-for="(opt, optIndex) in osTypes" :key="optIndex" :label="opt.name || opt.description">
114+
<a-select-option :value="opt.id" v-for="(opt, optIndex) in osTypes" :key="optIndex" :label="opt.name">
115115
<span>
116116
<resource-icon v-if="opt.icon" :image="opt.icon.base64image" size="1x" style="margin-right: 5px"/>
117117
<global-outlined v-else style="margin-right: 5px" />
118-
{{ opt.name || opt.description }}
118+
{{ opt.name }}
119119
</span>
120120
</a-select-option>
121121
</a-select>

ui/src/views/image/RegisterOrUploadTemplate.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@
249249
:loading="osTypes.loading"
250250
:placeholder="apiParams.ostypeid.description">
251251
<a-select-option v-for="opt in osTypes.opts" :key="opt.id">
252-
{{ opt.name || opt.description }}
252+
{{ opt.name || opt.name }}
253253
</a-select-option>
254254
</a-select>
255255
</a-form-item>
@@ -564,7 +564,7 @@ export default {
564564
const listOsTypes = json.listostypesresponse.ostype
565565
this.osTypes.opts = listOsTypes
566566
this.defaultOsType = this.osTypes.opts[1].description
567-
this.defaultOsId = this.osTypes.opts[1].id
567+
this.defaultOsId = this.osTypes.opts[1].name
568568
}).finally(() => {
569569
this.osTypes.loading = false
570570
})

0 commit comments

Comments
 (0)