Skip to content
Snippets Groups Projects
Verified Commit d83bd2e0 authored by Martin Weise's avatar Martin Weise
Browse files

Updated registry

parent c8f736a5
No related branches found
No related tags found
2 merge requests!163Relase 1.3.0,!162Resolve "Improve Semantic Service handling"
Showing
with 79 additions and 62 deletions
DBREPO_CLIENT_SECRET=MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG
RABBITMQ_CLIENT_SECRET=JEC2FexxrX4N65fLeDGukAl6R3Lc9y0u
JWT_ISSUER=http://localhost/realms/dbrepo
JWT_PUBKEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB
JWT_CERT=MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk=
DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG"
JWT_ISSUER="http://localhost/realms/dbrepo"
JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
JWT_CERT="MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk="
SHARED_FILESYSTEM=/tmp
LOG_LEVEL=trace
ELASTIC_PASSWORD=elastic
......
......@@ -13,8 +13,8 @@ COPY ./rabbitmq.conf /etc/rabbitmq/rabbitmq.conf
WORKDIR /app
ENV JWT_PUBKEY=public-key
ENV JWT_CERT=cert
ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
ENV JWT_CERT="MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk="
COPY ./init.sh ./init.sh
COPY ./service_ready /usr/bin/service_ready
......
from py_eureka_client import eureka_client
import py_eureka_client.logger as logger
import datetime
logger.set_level("ERROR")
def register():
eureka_client.init(eureka_server="http://discovery-service:9090/eureka/",
app_name="broker-service",
instance_ip="broker-service",
instance_host="broker-service",
instance_port=15672)
if __name__ == "__main__":
register()
......@@ -33,10 +33,10 @@ ENV BROKER_PASSWORD=fda
ENV SHARED_FILESYSTEM=/tmp
ENV USER_NETWORK=userdb
ENV LOG_LEVEL=debug
ENV DBREPO_CLIENT_SECRET=client-secret
ENV CLIENT_ID=dbrepo-client
ENV JWT_ISSUER=http://localhost/realms/dbrepo
ENV JWT_PUBKEY=public-key
ENV CLIENT_ID="dbrepo-client"
ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG"
ENV JWT_ISSUER="http://localhost/realms/dbrepo"
ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
WORKDIR /app
......
# Container Service
## Actuator
## Actuator Endpoints
- Actuator Info: http://localhost:9091/actuator/info
- Actuator Health: http://localhost:9091/actuator/health
......
......@@ -65,10 +65,10 @@ public class ContainerEndpointIntegrationTest extends BaseUnitTest {
DockerConfig.createAllNetworks();
/* metadata database */
realmRepository.save(REALM_DBREPO);
userRepository.save(USER_1_SIMPLE);
userRepository.save(USER_2_SIMPLE);
userRepository.save(USER_3_SIMPLE);
imageRepository.save(IMAGE_1);
userRepository.save(USER_1);
userRepository.save(USER_2);
userRepository.save(USER_3);
}
@AfterEach
......
......@@ -268,6 +268,7 @@ public class ImageEndpointUnitTest extends BaseUnitTest {
@WithMockUser(username = USER_2_USERNAME, authorities = {"modify-image"})
public void modify_hasRole_succeeds() throws ImageNotFoundException {
final ImageChangeDto request = ImageChangeDto.builder()
.registry(IMAGE_1_REGISTRY)
.defaultPort(IMAGE_1_PORT)
.dialect(IMAGE_1_DIALECT)
.jdbcMethod(IMAGE_1_JDBC)
......
......@@ -9,7 +9,9 @@ import at.tuwien.repository.jpa.ImageRepository;
import at.tuwien.repository.jpa.UserRepository;
import at.tuwien.service.impl.ImageServiceImpl;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.RandomUtils;
import org.apache.http.auth.BasicUserPrincipal;
import org.apache.tomcat.util.buf.HexUtils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
......@@ -54,6 +56,7 @@ public class ImageServiceIntegrationTest extends BaseUnitTest {
public void create_succeeds()
throws ImageAlreadyExistsException, DockerClientException, ImageNotFoundException, UserNotFoundException {
final ImageCreateDto request = ImageCreateDto.builder()
.registry(IMAGE_2_REGISTRY)
.repository(IMAGE_2_REPOSITORY)
.tag(IMAGE_2_TAG)
.jdbcMethod(IMAGE_2_JDBC)
......@@ -134,10 +137,12 @@ public class ImageServiceIntegrationTest extends BaseUnitTest {
@Test
public void pull_fails() {
final String repository = HexUtils.toHexString(RandomUtils.nextBytes(16));
final String tag = HexUtils.toHexString(RandomUtils.nextBytes(16));
/* test */
assertThrows(ImageNotFoundException.class, () -> {
imageService.pull("un1c0rn", "v420.420");
imageService.pull("docker.io/library", repository, tag);
});
}
......
......@@ -102,6 +102,7 @@ public class ImageServiceUnitTest extends BaseUnitTest {
@Test
public void update_succeeds() throws ImageNotFoundException {
final ImageChangeDto request = ImageChangeDto.builder()
.registry(IMAGE_1_REGISTRY)
.environment(IMAGE_1_ENV_DTO)
.defaultPort(IMAGE_1_PORT)
.build();
......@@ -121,6 +122,7 @@ public class ImageServiceUnitTest extends BaseUnitTest {
@Test
public void update_port_succeeds() throws ImageNotFoundException {
final ImageChangeDto request = ImageChangeDto.builder()
.registry(IMAGE_1_REGISTRY)
.environment(IMAGE_1_ENV_DTO)
.defaultPort(9999)
.build();
......
......@@ -18,6 +18,7 @@ import java.io.IOException;
public class ReadyConfig {
private final ImageService imageService;
private final static String registry = "docker.io/library";
private final static String imageRepository = "mariadb";
private final static String imageTag = "10.5";
......@@ -32,12 +33,12 @@ public class ReadyConfig {
@EventListener(ApplicationReadyEvent.class)
public void init() throws IOException, ImageNotFoundException {
if (!imageService.exists(imageRepository, imageTag)) {
log.debug("image {}:{} is not present on the host", imageRepository, imageTag);
log.debug("pulling image {}:{}", imageRepository, imageTag);
imageService.pull(imageRepository, imageTag);
log.debug("image {}/{}:{} is not present on the host", registry, imageRepository, imageTag);
log.debug("pulling image {}/{}:{}", registry, imageRepository, imageTag);
imageService.pull(registry, imageRepository, imageTag);
} else {
log.debug("image {}:{} is present on the host", imageRepository, imageTag);
log.trace("skip pulling image {}:{}", imageRepository, imageTag);
log.debug("image {}/{}:{} is present on the host", registry, imageRepository, imageTag);
log.trace("skip pulling image {}/{}:{}", registry, imageRepository, imageTag);
}
Files.touch(new File(readyPath));
log.info("Service is ready");
......
......@@ -71,11 +71,12 @@ public interface ImageService {
boolean exists(String repository, String tag);
/**
* Pulls a container image by given repository and tag.
* Pulls a container image by given registry, repository and tag.
*
* @param registry The registry.
* @param repository The repository.
* @param tag The tag.
* @throws ImageNotFoundException The image was not found.
*/
void pull(String repository, String tag) throws ImageNotFoundException;
void pull(String registry, String repository, String tag) throws ImageNotFoundException;
}
......@@ -24,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
import jakarta.persistence.EntityNotFoundException;
import jakarta.validation.ConstraintViolationException;
import java.security.Principal;
import java.time.Duration;
import java.time.Instant;
......@@ -73,8 +74,9 @@ public class ImageServiceImpl implements ImageService {
if (imageRepository.findByRepositoryAndTag(createDto.getRepository(), createDto.getTag()).isPresent()) {
log.error("Failed to create image {}:{}, it already exists in the metadata database",
createDto.getRepository(), createDto.getTag());
throw new ImageAlreadyExistsException("Failed to create image");
throw new ImageAlreadyExistsException("Failed to create image " + createDto.getRepository() + ":" + createDto.getTag());
}
image.setRegistry(createDto.getRegistry());
image.setEnvironment(imageMapper.imageEnvironmentItemDtoToEnvironmentItemList(createDto.getEnvironment()));
image.setDefaultPort(createDto.getDefaultPort());
image.setDialect(createDto.getDialect());
......@@ -96,8 +98,6 @@ public class ImageServiceImpl implements ImageService {
@Transactional
public ContainerImage update(Long imageId, ImageChangeDto changeDto) throws ImageNotFoundException {
final ContainerImage image = find(imageId);
/* pull changes */
pull(image.getRepository(), image.getTag());
/* get new infos */
final ContainerImage dockerImage = inspect(image.getRepository(), image.getTag());
if (!changeDto.getDefaultPort().equals(image.getDefaultPort())) {
......@@ -111,12 +111,15 @@ public class ImageServiceImpl implements ImageService {
log.debug("environment changed for image with id {}", imageId);
log.trace("environment changed from {} to {} for image with id {}", env, image.getEnvironment(), imageId);
}
image.setRegistry(changeDto.getRegistry());
image.setCompiled(dockerImage.getCompiled());
image.setHash(dockerImage.getHash());
image.setSize(dockerImage.getSize());
image.setDialect(changeDto.getDialect());
image.setDriverClass(changeDto.getDriverClass());
image.setJdbcMethod(changeDto.getJdbcMethod());
/* pull changes */
pull(image.getRegistry(), image.getRepository(), image.getTag());
/* update metadata db */
final ContainerImage out = imageRepository.save(image);
log.info("Updated image with id {}", out.getId());
......@@ -171,21 +174,21 @@ public class ImageServiceImpl implements ImageService {
}
@Override
public void pull(String repository, String tag) throws ImageNotFoundException {
log.debug("pulling image {}:{}", repository, tag);
public void pull(String registry, String repository, String tag) throws ImageNotFoundException {
log.debug("pulling image {}/{}:{}", registry, repository, tag);
final ResultCallback.Adapter<PullResponseItem> response;
try {
response = dockerClient.pullImageCmd(repository)
.withRegistry(registry)
.withTag(tag)
.start();
log.trace("pulled image {}", response);
final Instant now = Instant.now();
response.awaitCompletion();
log.info("Pulled image {}:{}", repository, tag);
log.debug("pulled image {}:{} in {} seconds", repository, tag, Duration.between(now, Instant.now()).getSeconds());
log.info("Pulled image {}/{}:{}", registry, repository, tag);
log.debug("pulled image {}/{}:{} in {} seconds", registry, repository, tag, Duration.between(now, Instant.now()).getSeconds());
} catch (NotFoundException | InternalServerErrorException | InterruptedException e) {
log.warn("Failed to pull image {}:{}, reason: {}", repository, tag, e.getMessage());
throw new ImageNotFoundException("Failed to pull image", e);
log.warn("Failed to pull image {}/{}:{}, reason: {}", registry, repository, tag, e.getMessage());
throw new ImageNotFoundException("Failed to pull image " + registry + "/" + repository + ":" + tag, e);
}
}
......
......@@ -30,15 +30,14 @@ ENV METADATA_USERNAME=root
ENV METADATA_PASSWORD=dbrepo
ENV BROKER_USERNAME=fda
ENV BROKER_PASSWORD=fda
ENV SEARCH_ENDPOINT=search-service
ENV SEARCH_USERNAME=elastic
ENV SEARCH_PASSWORD=elastic
ENV ELASTIC_USERNAME=elastic
ENV ELASTIC_PASSWORD=elastic
ENV GATEWAY_ENDPOINT=http://gateway-service
ENV LOG_LEVEL=debug
ENV DBREPO_CLIENT_SECRET=client-secret
ENV CLIENT_ID=dbrepo-client
ENV JWT_ISSUER=http://localhost/realms/dbrepo
ENV JWT_PUBKEY=public-key
ENV CLIENT_ID="dbrepo-client"
ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG"
ENV JWT_ISSUER="http://localhost/realms/dbrepo"
ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
WORKDIR /app
......
......@@ -29,7 +29,7 @@ spring:
password: "${BROKER_PASSWORD}"
elasticsearch:
password: "${ELASTIC_PASSWORD}"
username: elastic
username: "${ELASTIC_USERNAME}"
uris: http://search-service:9200
management.endpoints.web.exposure.include: health,info,prometheus
server:
......
......@@ -32,10 +32,10 @@ ENV METADATA_PASSWORD=dbrepo
ENV GATEWAY_ENDPOINT=http://gateway-service
ENV WEBSITE=http://localhost
ENV LOG_LEVEL=debug
ENV DBREPO_CLIENT_SECRET=client-secret
ENV CLIENT_ID=dbrepo-client
ENV JWT_ISSUER=http://localhost/realms/dbrepo
ENV JWT_PUBKEY=public-key
ENV CLIENT_ID="dbrepo-client"
ENV DBREPO_CLIENT_SECRET="MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG"
ENV JWT_ISSUER="http://localhost/realms/dbrepo"
ENV JWT_PUBKEY="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB"
WORKDIR /app
......
......@@ -19,6 +19,10 @@ public class ImageBriefDto {
@NotNull
private Long id;
@NotBlank
@Schema(example = "docker.io/library")
private String registry;
@NotBlank
@Schema(example = "mariadb")
private String repository;
......
......@@ -20,6 +20,10 @@ import java.util.List;
@ToString
public class ImageChangeDto {
@NotBlank
@Schema(example = "docker.io/library")
private String registry;
@Min(value = 1024, message = "only user ports are allowed 1024-65535")
@Max(value = 65535, message = "only user ports are allowed 1024-65535")
@Schema(example = "5432")
......
......@@ -3,6 +3,8 @@ package at.tuwien.api.container.image;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import lombok.*;
import jakarta.validation.constraints.NotBlank;
......@@ -20,6 +22,10 @@ import java.util.List;
@ToString
public class ImageCreateDto {
@NotBlank
@Schema(example = "docker.io/library")
private String registry;
@NotBlank
@Schema(example = "mariadb")
private String repository;
......@@ -44,6 +50,8 @@ public class ImageCreateDto {
@NotNull
@JsonProperty("default_port")
@Min(value = 1024, message = "only user ports are allowed 1024-65535")
@Max(value = 65535, message = "only user ports are allowed 1024-65535")
@Parameter(required = true, example = "3006")
private Integer defaultPort;
......
......@@ -26,6 +26,10 @@ public class ImageDto {
@NotNull
private Long id;
@NotBlank
@Schema(example = "docker.io/library")
private String registry;
@NotBlank
@Schema(example = "mariadb")
private String repository;
......
......@@ -32,6 +32,9 @@ public class ContainerImage {
@Column(nullable = false)
private String repository;
@Column(nullable = false, columnDefinition = "TEXT default 'docker.io/library'")
private String registry;
@Column(nullable = false)
private String tag;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment