private <R extends IPResource> void assertLinkToAllNames(Class<R> resourceClass, String linkType, IPResource resourceFrom, String... expectedNames) { IPResourceService resourceService = getCommonServicesContext().getResourceService(); List<String> actualNames = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(resourceFrom, linkType, resourceClass).stream() // .map(it -> it.getResourceName()) // .sorted() // .collect(Collectors.toList()); List<String> eNames = Arrays.asList(expectedNames).stream() // .sorted() // .collect(Collectors.toList()); Assert.assertEquals(eNames, actualNames); }
@Override public void attachTo(AttachablePartContext context) { Optional<EmailRelay> emailRelayOptional = context.getServices().getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.POINTS_TO, EmailRelay.class) .stream().findAny(); if (!emailRelayOptional.isPresent()) { return; } EmailRelay emailRelay = emailRelayOptional.get(); PostfixUtils.addConfigAndServiceForRelay("localhost", emailRelay, context.getApplicationDefinition()); }
@Override public void attachTo(AttachablePartContext context) { List<UnixUser> unixUsers = context.getServices().getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.USES, UnixUser.class); if (unixUsers.size() != 1) { logger.info("Must have a single unix user. Got {}. Skipping", unixUsers.size()); return; } UnixUser unixUser = unixUsers.get(0); Long unixUserId = unixUser.getId(); logger.info("Container user to change id: {} -> {}", usernameInContainer, unixUserId); context.getApplicationDefinition().addContainerUserToChangeId(usernameInContainer, unixUserId); }
protected <T extends Comparable<T> & IPResource> void updateLinksOnResource(CommonServicesContext services, ChangesContext changes, IPResource fromResource, String linkType, Class<T> toResourceClass, List<T> finalTos) { List<T> currentTos; if (fromResource.getInternalId() == null) { currentTos = new ArrayList<>(); } else { currentTos = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(fromResource, linkType, toResourceClass); } Collections.sort(finalTos); Collections.sort(currentTos); IPResource fromDnsPointer = fromResource; ListsComparator.compareLists(finalTos, currentTos, new ListComparatorHandler<T, T>() { @Override public void both(T left, T right) { // Good } @Override public void leftOnly(T left) { // Create changes.linkAdd(fromDnsPointer, linkType, left); } @Override public void rightOnly(T right) { // Remove changes.linkDelete(fromDnsPointer, linkType, right); } }); }
@Override public void attachTo(AttachablePartContext context) { // Get the PostgreSqlServer (fail if more than one) CommonServicesContext services = context.getServices(); List<PostgreSqlServer> servers = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.POINTS_TO, PostgreSqlServer.class); if (servers.size() > 1) { throw new IllegalUpdateException("There cannot be more than 1 PostgreSql Server. Has " + servers.size()); } if (servers.isEmpty()) { return; } PostgreSqlServer server = servers.get(0); // Get the Machines on the PostgreSqlServer List<Machine> machines = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(server, LinkTypeConstants.INSTALLED_ON, Machine.class); if (machines.isEmpty()) { return; } // Add the infra on the Application Machine machine = machines.get(0); context.getApplicationDefinition().addPortRedirect(localPort, machine.getName(), server.getName(), "POSTGRESQL_TCP"); }
@Override public void attachTo(AttachablePartContext context) { // Get the MongoDBServer (fail if more than one) CommonServicesContext services = context.getServices(); List<MongoDBServer> servers = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.POINTS_TO, MongoDBServer.class); if (servers.size() > 1) { throw new IllegalUpdateException("There cannot be more than 1 MongoDB Server. Has " + servers.size()); } if (servers.isEmpty()) { return; } MongoDBServer server = servers.get(0); // Get the Machines on the MongoDBServer List<Machine> machines = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(server, LinkTypeConstants.INSTALLED_ON, Machine.class); if (machines.isEmpty()) { return; } // Add the infra on the Application Machine machine = machines.get(0); context.getApplicationDefinition().addPortRedirect(localPort, machine.getName(), server.getName(), "MONGODB_TCP"); }
protected void manageNeededResourcesNoUpdates(CommonServicesContext services, ChangesContext changes, IPResource resource, List<IPResource> neededManagedResources, List<Class<? extends IPResource>> managedResourceTypes) { IPResourceService resourceService = services.getResourceService(); // Get the currently managed resources List<IPResource> currentlyManagedResources = new ArrayList<>(); for (Class<? extends IPResource> managedResourceType : managedResourceTypes) { currentlyManagedResources.addAll(resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(resource, LinkTypeConstants.MANAGES, managedResourceType)); } // Find or create the needed resources neededManagedResources = neededManagedResources.stream().map(it -> retrieveOrCreateResource(resourceService, changes, it)).collect(Collectors.toList()); // Create the links List<Long> neededManagedResourceIds = new ArrayList<>(); for (IPResource neededManagedResource : neededManagedResources) { changes.linkAdd(resource, LinkTypeConstants.MANAGES, neededManagedResource); if (neededManagedResource.getInternalId() != null) { neededManagedResourceIds.add(neededManagedResource.getInternalId()); } } // Remove the previously no more used links for (IPResource currentlyManagedResource : currentlyManagedResources) { if (!neededManagedResourceIds.contains(currentlyManagedResource.getInternalId())) { removeManagedLinkAndDeleteIfNotManagedByAnyoneElse(resourceService, changes, currentlyManagedResource, resource); } } }
currentToResources = Collections.emptyList(); } else { currentToResources = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(fromResource, linkType, resourceToType);
@Override public void attachTo(AttachablePartContext context) { // Get the MariaDBServer (fail if more than one) CommonServicesContext services = context.getServices(); List<MariaDBServer> servers = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.POINTS_TO, MariaDBServer.class); if (servers.size() > 1) { throw new IllegalUpdateException("There cannot be more than 1 MariaDB Server. Has " + servers.size()); } if (servers.isEmpty()) { return; } MariaDBServer server = servers.get(0); // Get the Machines on the MariaDBServer List<Machine> machines = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(server, LinkTypeConstants.INSTALLED_ON, Machine.class); if (machines.isEmpty()) { return; } // Add the infra on the Application Machine machine = machines.get(0); context.getApplicationDefinition().addPortRedirect(localPort, machine.getName(), server.getName(), DockerContainerEndpoints.MYSQL_TCP); }
List<Machine> machines = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(urlRedirection, LinkTypeConstants.INSTALLED_ON, Machine.class); if (machines.isEmpty()) { logger.info("No machines. Skipping"); List<WebsiteCertificate> websiteCertificates = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(urlRedirection, LinkTypeConstants.USES, WebsiteCertificate.class); if (websiteCertificates.isEmpty()) { logger.info("No website certificate. Skipping");
@Override protected void commonHandlerExecute(CommonServicesContext services, ChangesContext changes, CommonMethodUpdateEventHandlerContext<Website> context) { context.getManagedResourceTypes().add(DnsPointer.class); context.getManagedResourceTypes().add(WebsiteCertificate.class); IPResourceService resourceService = services.getResourceService(); Website resource = context.getResource(); // Create and manage : DnsPointer (attach Machines from the Application) List<Machine> installOnMachines = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(resource, LinkTypeConstants.INSTALLED_ON, Machine.class); for (String domainName : resource.getDomainNames()) { DnsPointer dnsPointer = new DnsPointer(domainName); dnsPointer = retrieveOrCreateResource(resourceService, changes, dnsPointer, DnsPointer.class); updateLinksOnResource(services, changes, dnsPointer, LinkTypeConstants.POINTS_TO, Machine.class, installOnMachines.stream().collect(Collectors.toList())); context.getManagedResources().add(dnsPointer); } }
@Override protected void commonHandlerExecute(CommonServicesContext services, ChangesContext changes, CommonMethodUpdateEventHandlerContext<Website> context) { context.getManagedResourceTypes().add(DnsPointer.class); context.getManagedResourceTypes().add(WebsiteCertificate.class); IPResourceService resourceService = services.getResourceService(); Website resource = context.getResource(); // Create and manage : DnsPointer (attach Machines from the Application) List<Machine> installOnMachines = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(resource, LinkTypeConstants.INSTALLED_ON, Machine.class); for (String domainName : resource.getDomainNames()) { DnsPointer dnsPointer = new DnsPointer(domainName); dnsPointer = retrieveOrCreateResource(resourceService, changes, dnsPointer, DnsPointer.class); updateLinksOnResource(services, changes, dnsPointer, LinkTypeConstants.POINTS_TO, Machine.class, installOnMachines.stream().collect(Collectors.toList())); context.getManagedResources().add(dnsPointer); } }
@Override public void attachTo(AttachablePartContext context) { // Command IPApplicationDefinitionService service = new IPApplicationDefinitionService(name, command); service.setWorkingDirectory(workingDirectory); // Unix user List<UnixUser> unixUsers = context.getServices().getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.RUN_AS, UnixUser.class); if (unixUsers.size() > 1) { throw new IllegalUpdateException("Must have a singe unix user to run as. Got " + unixUsers.size()); } if (!unixUsers.isEmpty()) { service.setRunAs(unixUsers.get(0).getId()); } context.getApplicationDefinition().getServices().add(service); }
@Override protected void commonHandlerExecute(CommonServicesContext services, ChangesContext changes, CommonMethodUpdateEventHandlerContext<DnsPointer> context) { IPResourceService resourceService = services.getResourceService(); DnsPointer resource = context.getResource(); logger.debug("Pointer {}", resource.getName()); context.getManagedResourceTypes().add(DnsEntry.class); // Use a DnsEntry per machine List<Machine> machines = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(resource, LinkTypeConstants.POINTS_TO, Machine.class); logger.debug("{} points to {} machines", resource.getName(), machines.size()); for (Machine machine : machines) { if (Strings.isNullOrEmpty(machine.getPublicIp())) { logger.debug("{} ignoring DnsEntry {} : no public ip", resource.getName(), machine.getName()); } else { logger.debug("{} adding DnsEntry {}", resource.getName(), machine.getPublicIp()); context.getManagedResources().add(new DnsEntry(resource.getName(), DnsEntryType.A, machine.getPublicIp())); } } }
@Override protected void commonHandlerExecute(CommonServicesContext services, ChangesContext changes, CommonMethodUpdateEventHandlerContext<DnsPointer> context) { IPResourceService resourceService = services.getResourceService(); DnsPointer resource = context.getResource(); logger.debug("Pointer {}", resource.getName()); context.getManagedResourceTypes().add(DnsEntry.class); // Use a DnsEntry per machine List<Machine> machines = resourceService.linkFindAllByFromResourceAndLinkTypeAndToResourceClass(resource, LinkTypeConstants.POINTS_TO, Machine.class); logger.debug("{} points to {} machines", resource.getName(), machines.size()); for (Machine machine : machines) { if (Strings.isNullOrEmpty(machine.getPublicIp())) { logger.debug("{} ignoring DnsEntry {} : no public ip", resource.getName(), machine.getName()); } else { logger.debug("{} adding DnsEntry {}", resource.getName(), machine.getPublicIp()); context.getManagedResources().add(new DnsEntry(resource.getName(), DnsEntryType.A, machine.getPublicIp())); } } }
List<EmailServer> emailServers = services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(emailDomain, LinkTypeConstants.INSTALLED_ON, EmailServer.class); logger.debug("Email Domain {} is installed on server {}", emailDomain, emailServers); .flatMap(emailServer -> services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(emailServer, LinkTypeConstants.INSTALLED_ON, Machine.class).stream()) // .forEach(machine -> { logger.debug("On machine {}", machine.getName());
@Override protected void commonHandlerExecute(CommonServicesContext services, ChangesContext changes, CommonMethodUpdateEventHandlerContext<EmailDomain> context) { EmailDomain emailDomain = context.getResource(); // Ensure all account names are unique per account and per redirection (can be shared) Set<String> accountNames = new HashSet<>(); services.getResourceService().linkFindAllByFromResourceClassAndLinkTypeAndToResource(EmailAccount.class, LinkTypeConstants.INSTALLED_ON, emailDomain).forEach(account -> { if (!accountNames.add(account.getAccountName())) { throw new IllegalUpdateException("The email account [" + account.getAccountName() + "@" + emailDomain.getDomainName() + "] exists multiple times"); } }); accountNames.clear(); services.getResourceService().linkFindAllByFromResourceClassAndLinkTypeAndToResource(EmailRedirection.class, LinkTypeConstants.INSTALLED_ON, emailDomain).forEach(redirection -> { if (!accountNames.add(redirection.getAccountName())) { throw new IllegalUpdateException("The email redirection [" + redirection.getAccountName() + "@" + emailDomain.getDomainName() + "] exists multiple times"); } }); // Ensure only linked to one EmailServer if (services.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(emailDomain, LinkTypeConstants.INSTALLED_ON, EmailServer.class).size() > 1) { throw new IllegalUpdateException("The email domain [" + emailDomain.getDomainName() + "] is installed on more than one Email server"); } }
@Override public void attachTo(AttachablePartContext context) { Optional<EmailRelay> emailRelayOptional = context.getServices().getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(this, LinkTypeConstants.POINTS_TO, EmailRelay.class) .stream().findAny(); if (!emailRelayOptional.isPresent()) { return; } // Add configuration EmailRelay emailRelay = emailRelayOptional.get(); MsmtpConfig msmtpConfig = new MsmtpConfig(emailRelay.getHostname(), emailRelay.getPort()); msmtpConfig.setUsername(emailRelay.getUsername()).setPassword(emailRelay.getPassword()); msmtpConfig.setTls(useTls); String configContent = MsmtpConfigOutput.toConfig(msmtpConfig); IPApplicationDefinition applicationDefinition = context.getApplicationDefinition(); applicationDefinition.addAssetContent(configPath, configContent); }
List<L> resources = servicesCtx.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(editedResource, linkType, resourceType); if (!resources.isEmpty()) { if (resources.size() > 1) {
List<L> resources = servicesCtx.getResourceService().linkFindAllByFromResourceAndLinkTypeAndToResourceClass(editedResource, linkType, resourceType); if (!resources.isEmpty()) { pageItem.setValues(resources);