mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
api: allow copy tags from template/iso image to VM via deployVM API (#3297)
Support copy tags from template/iso image to VM from deploy vm command. Allow creation of tags from the source template/iso image to vm when deploy vm command creates virtual machine. Fixes: #3048 Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
parent
c93630f125
commit
f1614aa7c2
@ -50,6 +50,7 @@ public class ApiConstants {
|
|||||||
public static final String CERTIFICATE_CHAIN = "certchain";
|
public static final String CERTIFICATE_CHAIN = "certchain";
|
||||||
public static final String CERTIFICATE_FINGERPRINT = "fingerprint";
|
public static final String CERTIFICATE_FINGERPRINT = "fingerprint";
|
||||||
public static final String CERTIFICATE_ID = "certid";
|
public static final String CERTIFICATE_ID = "certid";
|
||||||
|
public static final String COPY_IMAGE_TAGS = "copyimagetags";
|
||||||
public static final String CSR = "csr";
|
public static final String CSR = "csr";
|
||||||
public static final String PRIVATE_KEY = "privatekey";
|
public static final String PRIVATE_KEY = "privatekey";
|
||||||
public static final String DOMAIN_SUFFIX = "domainsuffix";
|
public static final String DOMAIN_SUFFIX = "domainsuffix";
|
||||||
|
|||||||
@ -203,6 +203,9 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd implements SecurityG
|
|||||||
@Parameter(name = ApiConstants.EXTRA_CONFIG, type = CommandType.STRING, since = "4.12", description = "an optional URL encoded string that can be passed to the virtual machine upon successful deployment", length = 5120)
|
@Parameter(name = ApiConstants.EXTRA_CONFIG, type = CommandType.STRING, since = "4.12", description = "an optional URL encoded string that can be passed to the virtual machine upon successful deployment", length = 5120)
|
||||||
private String extraConfig;
|
private String extraConfig;
|
||||||
|
|
||||||
|
@Parameter(name = ApiConstants.COPY_IMAGE_TAGS, type = CommandType.BOOLEAN, since = "4.13", description = "if true the image tags (if any) will be copied to the VM, default value is false")
|
||||||
|
private Boolean copyImageTags;
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////////// Accessors ///////////////////////
|
/////////////////// Accessors ///////////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
@ -489,6 +492,10 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd implements SecurityG
|
|||||||
return extraConfig;
|
return extraConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getCopyImageTags() {
|
||||||
|
return copyImageTags == null ? false : copyImageTags;
|
||||||
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
/////////////// API Implementation///////////////////
|
/////////////// API Implementation///////////////////
|
||||||
/////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////
|
||||||
|
|||||||
@ -223,6 +223,7 @@ import com.cloud.org.Grouping;
|
|||||||
import com.cloud.resource.ResourceManager;
|
import com.cloud.resource.ResourceManager;
|
||||||
import com.cloud.resource.ResourceState;
|
import com.cloud.resource.ResourceState;
|
||||||
import com.cloud.server.ManagementService;
|
import com.cloud.server.ManagementService;
|
||||||
|
import com.cloud.server.ResourceTag;
|
||||||
import com.cloud.service.ServiceOfferingVO;
|
import com.cloud.service.ServiceOfferingVO;
|
||||||
import com.cloud.service.dao.ServiceOfferingDao;
|
import com.cloud.service.dao.ServiceOfferingDao;
|
||||||
import com.cloud.service.dao.ServiceOfferingDetailsDao;
|
import com.cloud.service.dao.ServiceOfferingDetailsDao;
|
||||||
@ -251,6 +252,8 @@ import com.cloud.storage.dao.SnapshotDao;
|
|||||||
import com.cloud.storage.dao.VMTemplateDao;
|
import com.cloud.storage.dao.VMTemplateDao;
|
||||||
import com.cloud.storage.dao.VMTemplateZoneDao;
|
import com.cloud.storage.dao.VMTemplateZoneDao;
|
||||||
import com.cloud.storage.dao.VolumeDao;
|
import com.cloud.storage.dao.VolumeDao;
|
||||||
|
import com.cloud.tags.ResourceTagVO;
|
||||||
|
import com.cloud.tags.dao.ResourceTagDao;
|
||||||
import com.cloud.template.TemplateApiService;
|
import com.cloud.template.TemplateApiService;
|
||||||
import com.cloud.template.TemplateManager;
|
import com.cloud.template.TemplateManager;
|
||||||
import com.cloud.template.VirtualMachineTemplate;
|
import com.cloud.template.VirtualMachineTemplate;
|
||||||
@ -477,6 +480,8 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||||||
private ConfigurationDao _configDao;
|
private ConfigurationDao _configDao;
|
||||||
@Inject
|
@Inject
|
||||||
private DpdkHelper dpdkHelper;
|
private DpdkHelper dpdkHelper;
|
||||||
|
@Inject
|
||||||
|
private ResourceTagDao resourceTagDao;
|
||||||
|
|
||||||
private ScheduledExecutorService _executor = null;
|
private ScheduledExecutorService _executor = null;
|
||||||
private ScheduledExecutorService _vmIpFetchExecutor = null;
|
private ScheduledExecutorService _vmIpFetchExecutor = null;
|
||||||
@ -4958,6 +4963,18 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
|
|||||||
addExtraConfig(vm, caller, extraConfig);
|
addExtraConfig(vm, caller, extraConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cmd.getCopyImageTags()) {
|
||||||
|
VMTemplateVO templateOrIso = _templateDao.findById(templateId);
|
||||||
|
if (templateOrIso != null) {
|
||||||
|
final ResourceTag.ResourceObjectType templateType = (templateOrIso.getFormat() == ImageFormat.ISO) ? ResourceTag.ResourceObjectType.ISO : ResourceTag.ResourceObjectType.Template;
|
||||||
|
final List<? extends ResourceTag> resourceTags = resourceTagDao.listBy(templateId, templateType);
|
||||||
|
for (ResourceTag resourceTag : resourceTags) {
|
||||||
|
final ResourceTagVO copyTag = new ResourceTagVO(resourceTag.getKey(), resourceTag.getValue(), resourceTag.getAccountId(), resourceTag.getDomainId(), vm.getId(), ResourceTag.ResourceObjectType.UserVm, resourceTag.getCustomer(), vm.getUuid());
|
||||||
|
resourceTagDao.persist(copyTag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return vm;
|
return vm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user