package io.cattle.platform.docker.storage.dao.impl; import static io.cattle.platform.core.model.tables.ImageTable.*; import static io.cattle.platform.core.model.tables.InstanceTable.*; import io.cattle.platform.core.constants.InstanceConstants; import io.cattle.platform.core.model.Credential; import io.cattle.platform.core.model.Image; import io.cattle.platform.core.model.Instance; import io.cattle.platform.docker.storage.dao.DockerStorageDao; import io.cattle.platform.object.ObjectManager; import io.cattle.platform.object.util.DataAccessor; import io.cattle.platform.storage.ImageCredentialLookup; import io.cattle.platform.storage.service.StorageService; import java.util.List; import javax.inject.Inject; public class DockerStorageDaoImpl implements DockerStorageDao { @Inject ObjectManager objectManager; @Inject StorageService storageService; List<ImageCredentialLookup> imageCredentialLookups; @Override public Image createImageForInstance(Instance instance) { String uuid = (String) DataAccessor.fields(instance).withKey(InstanceConstants.FIELD_IMAGE_UUID).get(); Image image = storageService.registerRemoteImage(uuid); if (image != null) { objectManager.setFields(instance, INSTANCE.IMAGE_ID, image.getId()); long currentAccount = instance.getAccountId(); Long id = instance.getRegistryCredentialId(); image = objectManager.loadResource(Image.class, instance.getImageId()); if (id == null) { for (ImageCredentialLookup imageLookup: imageCredentialLookups){ Credential cred = imageLookup.getDefaultCredential(uuid, currentAccount); if (cred == null){ continue; } if (cred.getId() != null){ objectManager.setFields(instance, INSTANCE.REGISTRY_CREDENTIAL_ID, cred.getId()); break; } } } if (instance.getRegistryCredentialId() != null) { objectManager.setFields(image, IMAGE.REGISTRY_CREDENTIAL_ID, instance.getRegistryCredentialId()); } } return image; } public List<ImageCredentialLookup> getImageCredentialLookups() { return imageCredentialLookups; } @Inject public void setImageCredentialLookups(List<ImageCredentialLookup> imageCredentialLookups) { this.imageCredentialLookups = imageCredentialLookups; } }