diff --git a/storage/src/main/java/org/zstack/storage/volume/InstantiateVolumeForNewCreatedVmExtension.java b/storage/src/main/java/org/zstack/storage/volume/InstantiateVolumeForNewCreatedVmExtension.java index 926063df1eb..b165106d351 100755 --- a/storage/src/main/java/org/zstack/storage/volume/InstantiateVolumeForNewCreatedVmExtension.java +++ b/storage/src/main/java/org/zstack/storage/volume/InstantiateVolumeForNewCreatedVmExtension.java @@ -208,9 +208,12 @@ public void preInstantiateVmResource(VmInstanceSpec spec, Completion completion) } else if (image.getInventory() != null && ImageMediaType.RootVolumeTemplate.toString().equals(image.getInventory().getMediaType())) { InstantiateVolumeMsg rmsg = fillMsg(new InstantiateRootVolumeMsg(), spec.getDestRootVolume(), spec); ((InstantiateRootVolumeMsg) rmsg).setTemplateSpec(image); + rmsg.setSystemTags(spec.getRootVolumeSystemTags()); msgs.add(rmsg); } else { - msgs.add(fillMsg(new InstantiateVolumeMsg(), spec.getDestRootVolume(), spec)); + InstantiateVolumeMsg rmsg = fillMsg(new InstantiateVolumeMsg(), spec.getDestRootVolume(), spec); + rmsg.setSystemTags(spec.getRootVolumeSystemTags()); + msgs.add(rmsg); } if (spec.getDataVolumeTemplateUuids() != null) { diff --git a/tag/src/main/java/org/zstack/tag/EphemeralPatternSystemTag.java b/tag/src/main/java/org/zstack/tag/EphemeralPatternSystemTag.java new file mode 100644 index 00000000000..9ba80b05b51 --- /dev/null +++ b/tag/src/main/java/org/zstack/tag/EphemeralPatternSystemTag.java @@ -0,0 +1,13 @@ +package org.zstack.tag; + +import org.zstack.header.tag.TagConstant; + +public class EphemeralPatternSystemTag extends PatternedSystemTag { + public EphemeralPatternSystemTag(String tagFormat, Class resourceClass) { + super(String.format("%s::%s", TagConstant.EPHEMERAL_TAG_PREFIX, tagFormat), resourceClass); + } + + public String getTagFormatWithoutEphemeralPrefix() { + return tagFormat.substring(String.format("%s::", TagConstant.EPHEMERAL_TAG_PREFIX).length()); + } +} diff --git a/tag/src/main/java/org/zstack/tag/TagManagerImpl.java b/tag/src/main/java/org/zstack/tag/TagManagerImpl.java index e7c8a49e3cc..bd9da27ed57 100755 --- a/tag/src/main/java/org/zstack/tag/TagManagerImpl.java +++ b/tag/src/main/java/org/zstack/tag/TagManagerImpl.java @@ -95,7 +95,13 @@ private void initSystemTags() throws IllegalAccessException { f.getDeclaringClass(), f.getName())); } - if (PatternedSystemTag.class.isAssignableFrom(f.getType())) { + if (EphemeralPatternSystemTag.class.isAssignableFrom(f.getType())) { + EphemeralPatternSystemTag ptag = new EphemeralPatternSystemTag(((EphemeralPatternSystemTag) stag).getTagFormatWithoutEphemeralPrefix(), stag.getResourceClass()); + ptag.setValidators(stag.getValidators()); + f.set(null, ptag); + systemTags.add(ptag); + stag = ptag; + } else if (PatternedSystemTag.class.isAssignableFrom(f.getType())) { PatternedSystemTag ptag = new PatternedSystemTag(stag.getTagFormat(), stag.getResourceClass()); ptag.setValidators(stag.getValidators()); f.set(null, ptag);