package io.cattle.platform.servicediscovery.api.resource; import io.cattle.platform.core.constants.InstanceConstants; import io.cattle.platform.core.constants.LoadBalancerConstants; import io.cattle.platform.core.constants.ServiceConstants; import io.cattle.platform.core.model.Service; import io.cattle.platform.docker.constants.DockerInstanceConstants; import io.cattle.platform.util.type.NamedUtils; import java.util.ArrayList; import java.util.List; public class ServiceDiscoveryConfigItem { /** * * Unsupported docker compose variables - build - env_file - net - might add * support for that before the feature goes out - environment - don't * support the case when only key is specified, but no value - can't extract * local machine info here * */ // COMPOSE PARAMETERS private static List<ServiceDiscoveryConfigItem> supportedServiceConfigItems = new ArrayList<>(); public static final ServiceDiscoveryConfigItem IMAGE = new ServiceDiscoveryConfigItem( InstanceConstants.FIELD_IMAGE_UUID, "image", false); public static final ServiceDiscoveryConfigItem COMMAND = new ServiceDiscoveryConfigItem("command", "command", false); public static final ServiceDiscoveryConfigItem PORTS = new ServiceDiscoveryConfigItem("ports", "ports", false); public static final ServiceDiscoveryConfigItem VOLUMES = new ServiceDiscoveryConfigItem("dataVolumes", "volumes", false); public static final ServiceDiscoveryConfigItem VOLUMESFROM = new ServiceDiscoveryConfigItem("dataVolumesFrom", "volumes_from", false); public static final ServiceDiscoveryConfigItem ENVIRONMENT = new ServiceDiscoveryConfigItem("environment", "environment", false); public static final ServiceDiscoveryConfigItem DNS = new ServiceDiscoveryConfigItem("dns", "dns", false); public static final ServiceDiscoveryConfigItem CAPADD = new ServiceDiscoveryConfigItem("capAdd", "cap_add", false); public static final ServiceDiscoveryConfigItem CAPDROP = new ServiceDiscoveryConfigItem("capDrop", "cap_drop", false); public static final ServiceDiscoveryConfigItem DNSSEARCH = new ServiceDiscoveryConfigItem("dnsSearch", "dns_search", false); public static final ServiceDiscoveryConfigItem WORKINGDIR = new ServiceDiscoveryConfigItem("workingDir", "working_dir", false); public static final ServiceDiscoveryConfigItem ENTRYPOINT = new ServiceDiscoveryConfigItem("entryPoint", "entrypoint", false); public static final ServiceDiscoveryConfigItem USER = new ServiceDiscoveryConfigItem("user", "user", false); public static final ServiceDiscoveryConfigItem HOSTNAME = new ServiceDiscoveryConfigItem("hostname", "hostname", false); public static final ServiceDiscoveryConfigItem DOMAINNAME = new ServiceDiscoveryConfigItem("domainName", "domainname", false); public static final ServiceDiscoveryConfigItem MEMLIMIT = new ServiceDiscoveryConfigItem("memory", "mem_limit", false); public static final ServiceDiscoveryConfigItem MEMRESERVATION = new ServiceDiscoveryConfigItem("memoryReservation", "mem_reservation", false); public static final ServiceDiscoveryConfigItem PRIVILEGED = new ServiceDiscoveryConfigItem("privileged", "privileged", false); public static final ServiceDiscoveryConfigItem RESTART = new ServiceDiscoveryConfigItem("restartPolicy", "restart", false); public static final ServiceDiscoveryConfigItem STDINOPEN = new ServiceDiscoveryConfigItem("stdinOpen", "stdin_open", false); public static final ServiceDiscoveryConfigItem SYSCTLS = new ServiceDiscoveryConfigItem("sysctls", "sysctls", false); public static final ServiceDiscoveryConfigItem SECRETS = new ServiceDiscoveryConfigItem("secrets", "secrets", false); public static final ServiceDiscoveryConfigItem TTY = new ServiceDiscoveryConfigItem("tty", "tty", false); public static final ServiceDiscoveryConfigItem CPUSHARES = new ServiceDiscoveryConfigItem("cpuShares", "cpu_shares", false); public static final ServiceDiscoveryConfigItem BLKIOWEIGHT = new ServiceDiscoveryConfigItem("blkioWeight", "blkio_weight", false); public static final ServiceDiscoveryConfigItem CGROUPPARENT = new ServiceDiscoveryConfigItem("cgroupParent", "cgroup_parent", false); public static final ServiceDiscoveryConfigItem CPUPERIOD = new ServiceDiscoveryConfigItem("cpuPeriod", "cpu_period", false); public static final ServiceDiscoveryConfigItem CPUQUOTA = new ServiceDiscoveryConfigItem("cpuQuota", "cpu_quota", false); public static final ServiceDiscoveryConfigItem DNSOPT = new ServiceDiscoveryConfigItem("dnsOpt", "dns_opt", false); public static final ServiceDiscoveryConfigItem GROUPADD = new ServiceDiscoveryConfigItem("groupAdd", "group_add", false); public static final ServiceDiscoveryConfigItem EXTRAHOSTS = new ServiceDiscoveryConfigItem("extraHosts", "extra_hosts", false); public static final ServiceDiscoveryConfigItem SECURITYOPT = new ServiceDiscoveryConfigItem("securityOpt", "security_opt", false); public static final ServiceDiscoveryConfigItem READONLY = new ServiceDiscoveryConfigItem("readOnly", "read_only", false); public static final ServiceDiscoveryConfigItem MEMORYSWAPPINESS = new ServiceDiscoveryConfigItem("memorySwappiness", "mem_swappiness", false); public static final ServiceDiscoveryConfigItem OOMKILLDISABLE = new ServiceDiscoveryConfigItem("oomKillDisable", "oom_kill_disable", false); public static final ServiceDiscoveryConfigItem SHMSIZE = new ServiceDiscoveryConfigItem("shmSize", "shm_size", false); public static final ServiceDiscoveryConfigItem UTS = new ServiceDiscoveryConfigItem("uts", "uts", false); public static final ServiceDiscoveryConfigItem STOPSIGNAL = new ServiceDiscoveryConfigItem("stopSignal", "stop_signal", false); public static final ServiceDiscoveryConfigItem OOMSCOREADJ = new ServiceDiscoveryConfigItem("oomScoreAdj", "oom_score_adj", false); public static final ServiceDiscoveryConfigItem IPCMODE = new ServiceDiscoveryConfigItem("ipcMode", "ipc", false); public static final ServiceDiscoveryConfigItem ISOLATION = new ServiceDiscoveryConfigItem("isolation", "isolation", false); public static final ServiceDiscoveryConfigItem MILLICPURESERVATION = new ServiceDiscoveryConfigItem( "milliCpuReservation", "milli_cpu_reservation", true, false, false); public static final ServiceDiscoveryConfigItem VOLUME_DRIVER = new ServiceDiscoveryConfigItem("volumeDriver", "volume_driver", false); public static final ServiceDiscoveryConfigItem EXPOSE = new ServiceDiscoveryConfigItem("expose", "expose", false); public static final ServiceDiscoveryConfigItem EXTERNALLINKS = new ServiceDiscoveryConfigItem("instanceLinks", "external_links", false); public static final ServiceDiscoveryConfigItem LINKS = new ServiceDiscoveryConfigItem(null, "links", false, true, false); public static final ServiceDiscoveryConfigItem NETWORKMODE = new ServiceDiscoveryConfigItem( DockerInstanceConstants.FIELD_NETWORK_MODE, NamedUtils.toUnderscoreSeparated(DockerInstanceConstants.FIELD_NETWORK_MODE), false); public static final ServiceDiscoveryConfigItem CPUSET = new ServiceDiscoveryConfigItem("cpuSet", "cpuset", false); public static final ServiceDiscoveryConfigItem LABELS = new ServiceDiscoveryConfigItem( InstanceConstants.FIELD_LABELS, InstanceConstants.FIELD_LABELS, false); public static final ServiceDiscoveryConfigItem MEMSWAPLIMIT = new ServiceDiscoveryConfigItem( DockerInstanceConstants.FIELD_MEMORY_SWAP, "memswap_limit", false); public static final ServiceDiscoveryConfigItem PIDMODE = new ServiceDiscoveryConfigItem( DockerInstanceConstants.FIELD_PID_MODE, "pid", false); public static final ServiceDiscoveryConfigItem DEVICES = new ServiceDiscoveryConfigItem( DockerInstanceConstants.FIELD_DEVICES, DockerInstanceConstants.FIELD_DEVICES, false); // CATTLE PARAMETERS public static final ServiceDiscoveryConfigItem SCALE = new ServiceDiscoveryConfigItem("scale", "scale", false, false, false); public static final ServiceDiscoveryConfigItem STARTONCREATE = new ServiceDiscoveryConfigItem(ServiceConstants.FIELD_START_ON_CREATE, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_START_ON_CREATE), true, false, false); public static final ServiceDiscoveryConfigItem HEALTHCHECK = new ServiceDiscoveryConfigItem( InstanceConstants.FIELD_HEALTH_CHECK, NamedUtils.toUnderscoreSeparated(InstanceConstants.FIELD_HEALTH_CHECK), true, false, false); public static final ServiceDiscoveryConfigItem LB_CONGFIG = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_LOAD_BALANCER_CONFIG, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_LOAD_BALANCER_CONFIG), false, false, false); public static final ServiceDiscoveryConfigItem EXTERNAL_IPS = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_EXTERNALIPS, "external_ips", false, false, false); public static final ServiceDiscoveryConfigItem DEFAULT_CERTIFICATE = new ServiceDiscoveryConfigItem( LoadBalancerConstants.FIELD_LB_DEFAULT_CERTIFICATE_ID, "default_cert", false, false, false); public static final ServiceDiscoveryConfigItem SERVICE_TYPE = new ServiceDiscoveryConfigItem("kind", "type", false, false, false); public static final ServiceDiscoveryConfigItem CERTIFICATES = new ServiceDiscoveryConfigItem( LoadBalancerConstants.FIELD_LB_CERTIFICATE_IDS, "certs", false, false, false); public static final ServiceDiscoveryConfigItem METADATA = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_METADATA, ServiceConstants.FIELD_METADATA, false, false, false); public static final ServiceDiscoveryConfigItem RETAIN_IP = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_SERVICE_RETAIN_IP, "retain_ip", false, false, false); public static final ServiceDiscoveryConfigItem SCALE_POLICY = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_SCALE_POLICY, "scale_policy", false, false, false); public static final ServiceDiscoveryConfigItem LB_CONFIG = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_LB_CONFIG, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_LB_CONFIG), false, false, false); public static final ServiceDiscoveryConfigItem NETWORK_DRIVER = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_NETWORK_DRIVER, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_NETWORK_DRIVER), false, false, false); public static final ServiceDiscoveryConfigItem STORAGE_DRIVER = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_STORAGE_DRIVER, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_STORAGE_DRIVER), false, false, false); // VOLUME parameter private static List<ServiceDiscoveryConfigItem> supportedVolumeConfigItems = new ArrayList<>(); public static final ServiceDiscoveryConfigItem DRIVER = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_VOLUME_DRIVER, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_VOLUME_DRIVER), true); public static final ServiceDiscoveryConfigItem DRIVER_OPTS = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_VOLUME_DRIVER_OPTS, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_VOLUME_DRIVER_OPTS), true); public static final ServiceDiscoveryConfigItem EXTERNAL = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_VOLUME_EXTERNAL, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_VOLUME_EXTERNAL), true); public static final ServiceDiscoveryConfigItem PER_CONTAINER = new ServiceDiscoveryConfigItem( ServiceConstants.FIELD_VOLUME_PER_CONTAINER, NamedUtils.toUnderscoreSeparated(ServiceConstants.FIELD_VOLUME_PER_CONTAINER), true); /** * Name as it appears in docker-compose file */ private String dockerName; /** * Name as it appears in cattle (can be diff from what defined in a config) */ private String cattleName; /** * Defines whether the property is the launch config property */ private boolean isLaunchConfigItem; private boolean isDockerComposeProperty; private boolean isVolume; public ServiceDiscoveryConfigItem(String cattleName, String dockerName, boolean isLaunchConfigItem, boolean isDockerComposeProperty, boolean isVolume) { super(); this.cattleName = cattleName; this.dockerName = dockerName; this.isLaunchConfigItem = isLaunchConfigItem; this.isDockerComposeProperty = isDockerComposeProperty; if (isVolume) { supportedVolumeConfigItems.add(this); } else { supportedServiceConfigItems.add(this); } } public ServiceDiscoveryConfigItem() { } public ServiceDiscoveryConfigItem(String cattleName, String dockerName, boolean isVolume) { this(cattleName, dockerName, true, true, isVolume); } public static List<ServiceDiscoveryConfigItem> getSupportedLaunchConfigItems() { return supportedServiceConfigItems; } public String getDockerName() { return dockerName; } public boolean isLaunchConfigItem() { return isLaunchConfigItem; } public String getCattleName() { return cattleName; } public boolean isDockerComposeProperty() { return isDockerComposeProperty; } public boolean isVolume() { return isVolume; } public static ServiceDiscoveryConfigItem getServiceConfigItemByCattleName(String internalName, Service service, boolean isVolume) { List<ServiceDiscoveryConfigItem> items = new ArrayList<>(); if (isVolume) { items = supportedVolumeConfigItems; } else { items = supportedServiceConfigItems; } for (ServiceDiscoveryConfigItem serviceItem : items) { if (serviceItem.getCattleName() != null && serviceItem.getCattleName().equalsIgnoreCase(internalName)) { // special handling for external service hostname if (!isVolume && service.getKind().equalsIgnoreCase(ServiceConstants.KIND_EXTERNAL_SERVICE) && serviceItem.getCattleName().equalsIgnoreCase(HOSTNAME.cattleName)) { return new ServiceDiscoveryConfigItem(serviceItem.getCattleName(), serviceItem.getDockerName(), false, false, false); } return serviceItem; } } return null; } }