diff --git a/src/main/java/gyro/aws/eks/EksNodegroupResource.java b/src/main/java/gyro/aws/eks/EksNodegroupResource.java index c58c57a46..ebd140dde 100644 --- a/src/main/java/gyro/aws/eks/EksNodegroupResource.java +++ b/src/main/java/gyro/aws/eks/EksNodegroupResource.java @@ -40,6 +40,7 @@ import gyro.core.scope.State; import gyro.core.validation.Required; import gyro.core.validation.ValidStrings; +import gyro.core.validation.ValidationError; import software.amazon.awssdk.services.eks.EksClient; import software.amazon.awssdk.services.eks.model.AMITypes; import software.amazon.awssdk.services.eks.model.CapacityTypes; @@ -533,14 +534,15 @@ public void update( Set taintsToRemove = new HashSet<>(currentTaints); taintsToRemove.removeAll(taints); - // Taint key cannot be in both added and removed, this means it's an update, so remove from remove set. - Set taintKeysToAddOrUpdate = taintsToAddOrUpdate.stream() - .map(Taint::key) - .collect(Collectors.toSet()); + // Detect true updates. + // taint key and effect is the same, but the value is different. Set taintsToUpdate = new HashSet<>(); - for (Taint taint : taintsToRemove) { - if (taintKeysToAddOrUpdate.contains(taint.key())) { - taintsToUpdate.add(taint); + for (Taint taintToBeRemoved : taintsToRemove) { + for (Taint taintToBeAdded : taintsToAddOrUpdate) { + if (taintToBeRemoved.key().equals(taintToBeAdded.key()) && + taintToBeRemoved.effect().equals(taintToBeAdded.effect())) { + taintsToUpdate.add(taintToBeRemoved); + } } } taintsToRemove.removeAll(taintsToUpdate); @@ -596,6 +598,26 @@ public void delete(GyroUI ui, State state) throws Exception { .until(() -> getNodegroup(client) == null); } + @Override + public List validate(Set configuredFields) { + List errors = new ArrayList<>(); + + if (configuredFields.contains("taint")) { + // Key-Effect combination must be unique + Set keyEffect = new HashSet<>(); + for (EksNodegroupTaint taint : getTaint()) { + if (!keyEffect.add(taint.getKey() + taint.getTaintEffect())) { + errors.add(new ValidationError( + this, + "taint", + "Found multiple taints with key '" + taint.getKey() + "' and effect '" + taint.getTaintEffect() + "'")); + } + } + } + + return errors; + } + private Nodegroup getNodegroup(EksClient client) { Nodegroup nodegroup = null;