mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-03 04:12:31 +01:00
Added importVsphereStoragePolicies API and scheme changes
This commit is contained in:
parent
a72782f2e5
commit
b8b4f0f9ad
31
api/src/main/java/com/cloud/dc/VsphereStoragePolicy.java
Normal file
31
api/src/main/java/com/cloud/dc/VsphereStoragePolicy.java
Normal file
@ -0,0 +1,31 @@
|
||||
// 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 com.cloud.dc;
|
||||
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
public interface VsphereStoragePolicy extends Identity, InternalIdentity {
|
||||
|
||||
long getZoneId();
|
||||
|
||||
String getPolicyId();
|
||||
|
||||
String getName();
|
||||
|
||||
String getDescription();
|
||||
}
|
||||
@ -619,6 +619,9 @@ public class EventTypes {
|
||||
public static final String EVENT_POD_ROLLING_MAINTENANCE = "POD.ROLLING.MAINTENANCE";
|
||||
public static final String EVENT_ZONE_ROLLING_MAINTENANCE = "ZONE.ROLLING.MAINTENANCE";
|
||||
|
||||
// Storage Policies
|
||||
public static final String EVENT_IMPORT_VCENTER_STORAGE_POLICIES = "IMPORT.VCENTER.STORAGE.POLICIES";
|
||||
|
||||
static {
|
||||
|
||||
// TODO: need a way to force author adding event types to declare the entity details as well, with out braking
|
||||
@ -1026,6 +1029,8 @@ public class EventTypes {
|
||||
entityEventDetails.put(EVENT_CLUSTER_ROLLING_MAINTENANCE, ClusterResponse.class);
|
||||
entityEventDetails.put(EVENT_HOST_ROLLING_MAINTENANCE, HostResponse.class);
|
||||
|
||||
entityEventDetails.put(EVENT_IMPORT_VCENTER_STORAGE_POLICIES, "StoragePolicies");
|
||||
|
||||
entityEventDetails.put(EVENT_IMAGE_STORE_DATA_MIGRATE, ImageStore.class);
|
||||
}
|
||||
|
||||
|
||||
@ -195,6 +195,72 @@ INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type, hype
|
||||
-- Copy XenServer 8.0 hypervisor guest OS mappings to XenServer8.1
|
||||
INSERT IGNORE INTO `cloud`.`guest_os_hypervisor` (uuid,hypervisor_type, hypervisor_version, guest_os_name, guest_os_id, created, is_user_defined) SELECT UUID(),'Xenserver', '8.1.0', guest_os_name, guest_os_id, utc_timestamp(), 0 FROM `cloud`.`guest_os_hypervisor` WHERE hypervisor_type='Xenserver' AND hypervisor_version='8.0.0';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `cloud`.`vsphere_storage_policy` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`uuid` varchar(255) UNIQUE,
|
||||
`zone_id` bigint(20) unsigned NOT NULL COMMENT 'id of the zone',
|
||||
`policy_id` varchar(255) NOT NULL COMMENT 'the identifier of the Storage Policy in vSphere DataCenter',
|
||||
`name` varchar(255) NOT NULL COMMENT 'name of the storage policy',
|
||||
`description` text COMMENT 'description of the storage policy',
|
||||
`update_time` datetime COMMENT 'last updated when policy imported',
|
||||
`removed` datetime COMMENT 'date removed',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `fk_vsphere_storage_policy__zone_id` (`zone_id`),
|
||||
UNIQUE KEY (`zone_id`, `policy_id`),
|
||||
CONSTRAINT `fk_vsphere_storage_policy__zone_id` FOREIGN KEY (`zone_id`) REFERENCES `data_center` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `cloud`.`storage_pool` ADD COLUMN `parent` BIGINT(20) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'ID of the Datastore cluster (storage pool) if this is a child in that Datastore cluster';
|
||||
|
||||
-- Added parent column to support datastore clusters in vmware vsphere
|
||||
DROP VIEW IF EXISTS `cloud`.`storage_pool_view`;
|
||||
CREATE VIEW `cloud`.`storage_pool_view` AS
|
||||
SELECT
|
||||
`storage_pool`.`id` AS `id`,
|
||||
`storage_pool`.`uuid` AS `uuid`,
|
||||
`storage_pool`.`name` AS `name`,
|
||||
`storage_pool`.`status` AS `status`,
|
||||
`storage_pool`.`path` AS `path`,
|
||||
`storage_pool`.`pool_type` AS `pool_type`,
|
||||
`storage_pool`.`host_address` AS `host_address`,
|
||||
`storage_pool`.`created` AS `created`,
|
||||
`storage_pool`.`removed` AS `removed`,
|
||||
`storage_pool`.`capacity_bytes` AS `capacity_bytes`,
|
||||
`storage_pool`.`capacity_iops` AS `capacity_iops`,
|
||||
`storage_pool`.`scope` AS `scope`,
|
||||
`storage_pool`.`hypervisor` AS `hypervisor`,
|
||||
`storage_pool`.`storage_provider_name` AS `storage_provider_name`,
|
||||
`storage_pool`.`parent` AS `parent`,
|
||||
`cluster`.`id` AS `cluster_id`,
|
||||
`cluster`.`uuid` AS `cluster_uuid`,
|
||||
`cluster`.`name` AS `cluster_name`,
|
||||
`cluster`.`cluster_type` AS `cluster_type`,
|
||||
`data_center`.`id` AS `data_center_id`,
|
||||
`data_center`.`uuid` AS `data_center_uuid`,
|
||||
`data_center`.`name` AS `data_center_name`,
|
||||
`data_center`.`networktype` AS `data_center_type`,
|
||||
`host_pod_ref`.`id` AS `pod_id`,
|
||||
`host_pod_ref`.`uuid` AS `pod_uuid`,
|
||||
`host_pod_ref`.`name` AS `pod_name`,
|
||||
`storage_pool_tags`.`tag` AS `tag`,
|
||||
`op_host_capacity`.`used_capacity` AS `disk_used_capacity`,
|
||||
`op_host_capacity`.`reserved_capacity` AS `disk_reserved_capacity`,
|
||||
`async_job`.`id` AS `job_id`,
|
||||
`async_job`.`uuid` AS `job_uuid`,
|
||||
`async_job`.`job_status` AS `job_status`,
|
||||
`async_job`.`account_id` AS `job_account_id`
|
||||
FROM
|
||||
((((((`storage_pool`
|
||||
LEFT JOIN `cluster` ON ((`storage_pool`.`cluster_id` = `cluster`.`id`)))
|
||||
LEFT JOIN `data_center` ON ((`storage_pool`.`data_center_id` = `data_center`.`id`)))
|
||||
LEFT JOIN `host_pod_ref` ON ((`storage_pool`.`pod_id` = `host_pod_ref`.`id`)))
|
||||
LEFT JOIN `storage_pool_tags` ON (((`storage_pool_tags`.`pool_id` = `storage_pool`.`id`))))
|
||||
LEFT JOIN `op_host_capacity` ON (((`storage_pool`.`id` = `op_host_capacity`.`host_id`)
|
||||
AND (`op_host_capacity`.`capacity_type` IN (3 , 9)))))
|
||||
LEFT JOIN `async_job` ON (((`async_job`.`instance_id` = `storage_pool`.`id`)
|
||||
AND (`async_job`.`instance_type` = 'StoragePool')
|
||||
AND (`async_job`.`job_status` = 0))));
|
||||
|
||||
ALTER TABLE `cloud`.`image_store` ADD COLUMN `readonly` boolean DEFAULT false COMMENT 'defines status of image store';
|
||||
|
||||
ALTER VIEW `cloud`.`image_store_view` AS
|
||||
|
||||
@ -20,6 +20,7 @@ package com.cloud.hypervisor.vmware;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ImportVsphereStoragePoliciesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.UpdateVmwareDcCmd;
|
||||
@ -38,4 +39,6 @@ public interface VmwareDatacenterService extends PluggableService {
|
||||
boolean removeVmwareDatacenter(RemoveVmwareDcCmd cmd) throws IllegalArgumentException, ResourceInUseException;
|
||||
|
||||
List<? extends VmwareDatacenter> listVmwareDatacenters(ListVmwareDcsCmd cmd) throws IllegalArgumentException, CloudRuntimeException;
|
||||
|
||||
List<? extends VsphereStoragePolicy> importVsphereStoragePolicies(ImportVsphereStoragePoliciesCmd cmd);
|
||||
}
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
// 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 com.cloud.hypervisor.vmware;
|
||||
|
||||
import org.apache.cloudstack.api.Identity;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
|
||||
public interface VsphereStoragePolicy extends Identity, InternalIdentity {
|
||||
|
||||
long getZoneId();
|
||||
|
||||
String getPolicyId();
|
||||
|
||||
String getName();
|
||||
|
||||
String getDescription();
|
||||
}
|
||||
@ -0,0 +1,108 @@
|
||||
// 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 com.cloud.hypervisor.vmware;
|
||||
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.GenerationType;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Temporal;
|
||||
import javax.persistence.TemporalType;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
@Table(name = "vsphere_storage_policy")
|
||||
public class VsphereStoragePolicyVO implements VsphereStoragePolicy {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id")
|
||||
private long id;
|
||||
|
||||
@Column(name = "uuid")
|
||||
private String uuid;
|
||||
|
||||
@Column(name = "zone_id")
|
||||
private long zoneId;
|
||||
|
||||
@Column(name = "policy_id")
|
||||
private String policyId;
|
||||
|
||||
@Column(name = "name")
|
||||
private String name;
|
||||
|
||||
@Column(name = "description")
|
||||
private String description;
|
||||
|
||||
@Column(name = "update_time", updatable = true)
|
||||
@Temporal(value = TemporalType.TIMESTAMP)
|
||||
private Date updateTime;
|
||||
|
||||
@Column(name = GenericDao.REMOVED_COLUMN)
|
||||
private Date removed;
|
||||
|
||||
public VsphereStoragePolicyVO(long zoneId, String policyId, String name, String description) {
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.zoneId = zoneId;
|
||||
this.policyId = policyId;
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUuid() {
|
||||
return uuid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPolicyId() {
|
||||
return policyId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public Date getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public Date getRemoved() {
|
||||
return removed;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
// 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 com.cloud.hypervisor.vmware.dao;
|
||||
|
||||
import com.cloud.hypervisor.vmware.VsphereStoragePolicyVO;
|
||||
import com.cloud.utils.db.GenericDao;
|
||||
|
||||
public interface VsphereStoragePolicyDao extends GenericDao<VsphereStoragePolicyVO, Long> {
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
// 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 com.cloud.hypervisor.vmware.dao;
|
||||
|
||||
import com.cloud.hypervisor.vmware.VsphereStoragePolicyVO;
|
||||
import com.cloud.utils.db.GenericDaoBase;
|
||||
|
||||
public class VsphereStoragePolicyDaoImpl extends GenericDaoBase<VsphereStoragePolicyVO, Long> implements VsphereStoragePolicyDao {
|
||||
}
|
||||
@ -38,7 +38,13 @@ import java.util.concurrent.TimeUnit;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import com.cloud.hypervisor.vmware.VsphereStoragePolicy;
|
||||
import com.cloud.hypervisor.vmware.VsphereStoragePolicyVO;
|
||||
import com.cloud.hypervisor.vmware.dao.VsphereStoragePolicyDao;
|
||||
import com.cloud.hypervisor.vmware.mo.PbmProfileManagerMO;
|
||||
import com.vmware.pbm.PbmProfile;
|
||||
import org.apache.cloudstack.api.command.admin.zone.AddVmwareDcCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ImportVsphereStoragePoliciesCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.ListVmwareDcsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.RemoveVmwareDcCmd;
|
||||
import org.apache.cloudstack.api.command.admin.zone.UpdateVmwareDcCmd;
|
||||
@ -208,6 +214,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
private UserVmCloneSettingDao cloneSettingDao;
|
||||
@Inject
|
||||
private TemplateManager templateManager;
|
||||
@Inject
|
||||
private VsphereStoragePolicyDao vsphereStoragePolicyDao;
|
||||
|
||||
private String _mountParent;
|
||||
private StorageLayer _storage;
|
||||
@ -1383,6 +1391,51 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<? extends VsphereStoragePolicy> importVsphereStoragePolicies(ImportVsphereStoragePoliciesCmd cmd) {
|
||||
Long zoneId = cmd.getZoneId();
|
||||
// Validate Id of zone
|
||||
doesZoneExist(zoneId);
|
||||
|
||||
// Get DC associated with this zone
|
||||
VmwareDatacenterVO vmwareDatacenter;
|
||||
String vmwareDcName;
|
||||
String vCenterHost;
|
||||
String userName;
|
||||
String password;
|
||||
DatacenterMO dcMo = null;
|
||||
final VmwareDatacenterZoneMapVO vmwareDcZoneMap = vmwareDatacenterZoneMapDao.findByZoneId(zoneId);
|
||||
// Check if zone is associated with VMware DC
|
||||
if (vmwareDcZoneMap == null) {
|
||||
throw new CloudRuntimeException("Zone " + zoneId + " is not associated with any VMware datacenter.");
|
||||
}
|
||||
|
||||
final long vmwareDcId = vmwareDcZoneMap.getVmwareDcId();
|
||||
vmwareDatacenter = vmwareDcDao.findById(vmwareDcId);
|
||||
vmwareDcName = vmwareDatacenter.getVmwareDatacenterName();
|
||||
vCenterHost = vmwareDatacenter.getVcenterHost();
|
||||
userName = vmwareDatacenter.getUser();
|
||||
password = vmwareDatacenter.getPassword();
|
||||
List<PbmProfile> storageProfiles = null;
|
||||
try {
|
||||
VmwareContext context = VmwareContextFactory.getContext(vCenterHost, userName, password);
|
||||
PbmProfileManagerMO profileManagerMO = new PbmProfileManagerMO(context);
|
||||
storageProfiles = profileManagerMO.getStorageProfiles();
|
||||
} catch (Exception e) {
|
||||
String msg = String.format("Unable to list storage profiles from DC %s due to : %s", vmwareDcName, VmwareHelper.getExceptionMessage(e);
|
||||
s_logger.error(msg);
|
||||
throw new CloudRuntimeException(msg);
|
||||
}
|
||||
|
||||
for (PbmProfile storageProfile : storageProfiles) {
|
||||
VsphereStoragePolicyVO StoragePolicyVO = new VsphereStoragePolicyVO(zoneId, storageProfile.getProfileId().toString(), storageProfile.getName(), storageProfile.getDescription());
|
||||
vsphereStoragePolicyDao.persist(StoragePolicyVO);
|
||||
}
|
||||
|
||||
List<VsphereStoragePolicyVO> storagePolicies = vsphereStoragePolicyDao.listAll();
|
||||
return storagePolicies;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNexusVSM(Long clusterId) {
|
||||
ClusterVSMMapVO vsmMapVo = null;
|
||||
|
||||
@ -0,0 +1,106 @@
|
||||
// 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.cloudstack.api.command.admin.zone;
|
||||
|
||||
import com.cloud.event.EventTypes;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.NetworkRuleConflictException;
|
||||
import com.cloud.exception.ResourceAllocationException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.hypervisor.vmware.VmwareDatacenterService;
|
||||
import com.cloud.hypervisor.vmware.VsphereStoragePolicy;
|
||||
|
||||
import org.apache.cloudstack.acl.RoleType;
|
||||
import org.apache.cloudstack.api.APICommand;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseAsyncCmd;
|
||||
import org.apache.cloudstack.api.BaseCmd;
|
||||
import org.apache.cloudstack.api.Parameter;
|
||||
import org.apache.cloudstack.api.ServerApiException;
|
||||
import org.apache.cloudstack.api.response.ImportVsphereStoragePoliciesResponse;
|
||||
import org.apache.cloudstack.api.response.ListResponse;
|
||||
import org.apache.cloudstack.api.response.RoleResponse;
|
||||
import org.apache.cloudstack.api.response.ZoneResponse;
|
||||
import org.apache.cloudstack.context.CallContext;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@APICommand(name = ImportVsphereStoragePoliciesCmd.APINAME, description = "Import vSphere storage policies",
|
||||
responseObject = ImportVsphereStoragePoliciesResponse.class,
|
||||
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false,
|
||||
authorized = {RoleType.Admin})
|
||||
public class ImportVsphereStoragePoliciesCmd extends BaseAsyncCmd {
|
||||
|
||||
public static final Logger s_logger = Logger.getLogger(ImportVsphereStoragePoliciesCmd.class.getName());
|
||||
|
||||
public static final String APINAME = "importVsphereStoragePolicies";
|
||||
|
||||
@Inject
|
||||
public VmwareDatacenterService _vmwareDatacenterService;
|
||||
|
||||
@Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class,
|
||||
description = "ID of the zone")
|
||||
private Long zoneId;
|
||||
|
||||
@Override
|
||||
public String getEventType() {
|
||||
return EventTypes.EVENT_IMPORT_VCENTER_STORAGE_POLICIES;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getEventDescription() {
|
||||
return "Importing vSphere Storage Policies";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
|
||||
List<? extends VsphereStoragePolicy> storagePolicies = _vmwareDatacenterService.importVsphereStoragePolicies(this);
|
||||
final ListResponse<ImportVsphereStoragePoliciesResponse> responseList = new ListResponse<>();
|
||||
final List<ImportVsphereStoragePoliciesResponse> storagePoliciesResponseList = new ArrayList<>();
|
||||
for (VsphereStoragePolicy storagePolicy : storagePolicies) {
|
||||
final ImportVsphereStoragePoliciesResponse storagePoliciesResponse = new ImportVsphereStoragePoliciesResponse();
|
||||
storagePoliciesResponse.setId(storagePolicy.getUuid());
|
||||
storagePoliciesResponse.setName(storagePolicy.getName());
|
||||
storagePoliciesResponse.setPolicyId(storagePolicy.getPolicyId());
|
||||
storagePoliciesResponse.setDescription(storagePolicy.getDescription());
|
||||
storagePoliciesResponseList.add(storagePoliciesResponse);
|
||||
}
|
||||
responseList.setResponses(storagePoliciesResponseList);
|
||||
responseList.setResponseName(getCommandName());
|
||||
setResponseObject(responseList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCommandName() {
|
||||
return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getEntityOwnerId() {
|
||||
return CallContext.current().getCallingAccountId();
|
||||
}
|
||||
|
||||
public Long getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,89 @@
|
||||
// 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.cloudstack.api.response;
|
||||
|
||||
import com.cloud.hypervisor.vmware.VsphereStoragePolicy;
|
||||
import com.cloud.serializer.Param;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import org.apache.cloudstack.api.ApiConstants;
|
||||
import org.apache.cloudstack.api.BaseResponse;
|
||||
import org.apache.cloudstack.api.EntityReference;
|
||||
|
||||
|
||||
@EntityReference(value = VsphereStoragePolicy.class)
|
||||
public class ImportVsphereStoragePoliciesResponse extends BaseResponse {
|
||||
|
||||
@SerializedName(ApiConstants.ID)
|
||||
@Param(description = "the ID of the Storage Policy")
|
||||
private String id;
|
||||
|
||||
@SerializedName(ApiConstants.ZONE_ID)
|
||||
@Param(description = "the ID of the Zone")
|
||||
private String zoneId;
|
||||
|
||||
@SerializedName(ApiConstants.POLICY_ID)
|
||||
@Param(description = "the identifier of the Storage Policy in vSphere DataCenter")
|
||||
private String policyId;
|
||||
|
||||
@SerializedName(ApiConstants.NAME)
|
||||
@Param(description = "the name of the Storage Policy")
|
||||
private String name;
|
||||
|
||||
@SerializedName(ApiConstants.DESCRIPTION)
|
||||
@Param(description = "the description of the Storage Policy")
|
||||
private String description;
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getZoneId() {
|
||||
return zoneId;
|
||||
}
|
||||
|
||||
public void setZoneId(String zoneId) {
|
||||
this.zoneId = zoneId;
|
||||
}
|
||||
|
||||
public String getPolicyId() {
|
||||
return policyId;
|
||||
}
|
||||
|
||||
public void setPolicyId(String policyId) {
|
||||
this.policyId = policyId;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public void setDescription(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
}
|
||||
@ -44,7 +44,7 @@ public class PbmProfileManagerMO extends BaseMO {
|
||||
super(context, morType, morValue);
|
||||
}
|
||||
|
||||
public List<PbmProfileId> getProfileIds() throws Exception {
|
||||
public List<PbmProfileId> getStorageProfileIds() throws Exception {
|
||||
if (s_logger.isDebugEnabled()) {
|
||||
s_logger.debug("Querying vCenter " + _context.getServerAddress() + " for profiles");
|
||||
}
|
||||
@ -52,8 +52,8 @@ public class PbmProfileManagerMO extends BaseMO {
|
||||
return profileIds;
|
||||
}
|
||||
|
||||
public List<PbmProfile> getProfiles(PbmProfileResourceType pbmResourceType) throws Exception {
|
||||
List<PbmProfileId> profileIds = getProfileIds();
|
||||
public List<PbmProfile> getStorageProfiles() throws Exception {
|
||||
List<PbmProfileId> profileIds = getStorageProfileIds();
|
||||
List<PbmProfile> profiles = _context.getPbmService().pbmRetrieveContent(_mor, profileIds);
|
||||
return profiles;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user