|
22 | 22 | import eu.cloudnetservice.common.column.RowedFormatter; |
23 | 23 | import eu.cloudnetservice.common.language.I18n; |
24 | 24 | import eu.cloudnetservice.common.resource.ResourceFormatter; |
25 | | -import eu.cloudnetservice.common.tuple.Tuple2; |
26 | 25 | import eu.cloudnetservice.common.util.WildcardUtil; |
27 | 26 | import eu.cloudnetservice.driver.channel.ChannelMessageSender; |
28 | 27 | import eu.cloudnetservice.driver.event.EventListener; |
29 | 28 | import eu.cloudnetservice.driver.event.EventManager; |
30 | 29 | import eu.cloudnetservice.driver.event.events.service.CloudServiceLogEntryEvent; |
31 | 30 | import eu.cloudnetservice.driver.provider.CloudServiceProvider; |
32 | | -import eu.cloudnetservice.driver.provider.SpecificCloudServiceProvider; |
33 | 31 | import eu.cloudnetservice.driver.service.ServiceDeployment; |
34 | 32 | import eu.cloudnetservice.driver.service.ServiceInfoSnapshot; |
35 | 33 | import eu.cloudnetservice.driver.service.ServiceRemoteInclusion; |
|
51 | 49 | import java.util.Objects; |
52 | 50 | import java.util.Set; |
53 | 51 | import java.util.regex.Pattern; |
54 | | -import java.util.stream.Collectors; |
55 | 52 | import java.util.stream.Stream; |
56 | 53 | import lombok.NonNull; |
57 | 54 | import org.incendo.cloud.annotation.specifier.Greedy; |
@@ -203,44 +200,32 @@ public void copyService( |
203 | 200 | @Nullable @Flag("includes") @Quoted String includes, |
204 | 201 | @Flag("case-sensitive") boolean caseSensitive |
205 | 202 | ) { |
206 | | - // associate all services with a template |
207 | | - Collection<Tuple2<SpecificCloudServiceProvider, ServiceTemplate>> targets = services.stream() |
208 | | - .map(service -> { |
209 | | - if (template != null) { |
210 | | - return new Tuple2<>(service.provider(), template); |
211 | | - } else { |
212 | | - // find a matching template |
213 | | - return service.configuration().templates().stream() |
214 | | - .filter(st -> st.prefix().equalsIgnoreCase(service.serviceId().taskName())) |
215 | | - .filter(st -> st.name().equalsIgnoreCase("default")) |
216 | | - .map(st -> new Tuple2<>(service.provider(), st)) |
217 | | - .findFirst() |
218 | | - .orElse(null); |
219 | | - } |
220 | | - }) |
221 | | - .collect(Collectors.toSet()); |
222 | | - // check if we found a result |
223 | | - if (targets.isEmpty()) { |
224 | | - source.sendMessage(I18n.trans("command-service-copy-no-default-template")); |
225 | | - return; |
| 203 | + var service = services.iterator().next(); |
| 204 | + var serviceProvider = service.provider(); |
| 205 | + if (template == null) { |
| 206 | + template = serviceProvider.installedTemplates().stream() |
| 207 | + .filter(st -> st.prefix().equalsIgnoreCase(service.serviceId().taskName())) |
| 208 | + .filter(st -> st.name().equalsIgnoreCase("default")) |
| 209 | + .findFirst() |
| 210 | + .orElse(null); |
| 211 | + |
| 212 | + if (template == null) { |
| 213 | + source.sendMessage(I18n.trans("command-service-copy-no-default-template", service.serviceId().name())); |
| 214 | + return; |
| 215 | + } |
226 | 216 | } |
| 217 | + |
227 | 218 | // split on a semicolon and try to fix the patterns the user entered |
228 | 219 | var parsedExcludes = parseDeploymentPatterns(excludes, caseSensitive); |
229 | 220 | var parsedIncludes = parseDeploymentPatterns(includes, caseSensitive); |
230 | | - for (var target : targets) { |
231 | | - target.first().addServiceDeployment(ServiceDeployment.builder() |
232 | | - .template(target.second()) |
233 | | - .excludes(parsedExcludes) |
234 | | - .includes(parsedIncludes) |
235 | | - .withDefaultExclusions() |
236 | | - .build()); |
237 | | - target.first().removeAndExecuteDeployments(); |
238 | | - // send a message for each service we did copy the template of |
239 | | - //noinspection ConstantConditions |
240 | | - source.sendMessage(I18n.trans("command-service-copy-success", |
241 | | - target.first().serviceInfo().name(), |
242 | | - target.second().toString())); |
243 | | - } |
| 221 | + serviceProvider.addServiceDeployment(ServiceDeployment.builder() |
| 222 | + .template(template) |
| 223 | + .excludes(parsedExcludes) |
| 224 | + .includes(parsedIncludes) |
| 225 | + .withDefaultExclusions() |
| 226 | + .build()); |
| 227 | + serviceProvider.removeAndExecuteDeployments(); |
| 228 | + source.sendMessage(I18n.trans("command-service-copy-success", service.serviceId().name(), template)); |
244 | 229 | } |
245 | 230 |
|
246 | 231 | @Command("service|ser <name> delete|del") |
|
0 commit comments