This is an automated email from the ASF dual-hosted git repository.
nacx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git
The following commit(s) were added to refs/heads/master by this push:
new e1c6424 Checks provisioning state in Rule resource instead of Group
(#30)
e1c6424 is described below
commit e1c64244cbf46e7316a6d08eb2fd6ae637c36d88
Author: Daniel Estévez <[email protected]>
AuthorDate: Fri May 17 02:59:01 2019 -0400
Checks provisioning state in Rule resource instead of Group (#30)
* Checks provisioning state in Rule resource instead of Group
* comments by @nacx to proper check and delete rules
* Fixes log message deleting rule
---
.../arm/compute/config/AzurePredicatesModule.java | 35 ++++++++++++++++++++++
.../AzureComputeSecurityGroupExtension.java | 23 +++++++-------
.../arm/domain/NetworkSecurityRuleProperties.java | 18 +++++++----
.../features/NetworkSecurityGroupApiMockTest.java | 1 +
.../features/NetworkSecurityRuleApiMockTest.java | 1 +
.../test/resources/networksecurityrulecreate.json | 5 ++--
6 files changed, 64 insertions(+), 19 deletions(-)
diff --git
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java
index 01650de..80e1a6e 100644
---
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java
+++
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java
@@ -45,6 +45,7 @@ import org.jclouds.azurecompute.arm.domain.Image;
import org.jclouds.azurecompute.arm.domain.Key.DeletedKeyBundle;
import org.jclouds.azurecompute.arm.domain.Key.KeyBundle;
import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule;
import org.jclouds.azurecompute.arm.domain.Provisionable;
import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
import org.jclouds.azurecompute.arm.domain.Secret.DeletedSecretBundle;
@@ -123,6 +124,12 @@ public class AzurePredicatesModule extends AbstractModule {
}
@Provides
+ protected SecurityGroupRuleAvailablePredicateFactory
provideSecurityGroupRuleAvailablePredicate(final AzureComputeApi api,
+ Predicate<Supplier<Provisionable>> resourceAvailable) {
+ return new SecurityGroupRuleAvailablePredicateFactory(api,
resourceAvailable);
+ }
+
+ @Provides
protected ImageAvailablePredicateFactory
provideImageAvailablePredicate(final AzureComputeApi api,
final ComputeServiceConstants.Timeouts timeouts, final PollPeriod
pollPeriod) {
return new ImageAvailablePredicateFactory(api, retry(new
ResourceInStatusPredicate("Succeeded"),
@@ -292,6 +299,34 @@ public class AzurePredicatesModule extends AbstractModule {
}
}
+ public static class SecurityGroupRuleAvailablePredicateFactory {
+ private final AzureComputeApi api;
+ private final Predicate<Supplier<Provisionable>> resourceAvailable;
+
+ SecurityGroupRuleAvailablePredicateFactory(final AzureComputeApi api,
Predicate<Supplier<Provisionable>> resourceAvailable) {
+ this.api = checkNotNull(api, "api cannot be null");
+ this.resourceAvailable = resourceAvailable;
+ }
+
+ public Predicate<String> create(final String resourceGroup, final String
securityGroupName) {
+ checkNotNull(resourceGroup, "resourceGroup cannot be null");
+ checkNotNull(securityGroupName, "securityGroupName cannot be null");
+ return new Predicate<String>() {
+ @Override
+ public boolean apply(final String name) {
+ checkNotNull(name, "name cannot be null");
+ return resourceAvailable.apply(new Supplier<Provisionable>() {
+ @Override
+ public Provisionable get() {
+ NetworkSecurityRule securityRule =
api.getNetworkSecurityRuleApi(resourceGroup, securityGroupName).get(name);
+ return securityRule == null ? null :
securityRule.properties();
+ }
+ });
+ }
+ };
+ }
+ }
+
public static class NetworkAvailablePredicateFactory {
private final AzureComputeApi api;
private final Predicate<Supplier<Provisionable>> resourceAvailable;
diff --git
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
index b85628c..bfbd595 100644
---
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
+++
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
@@ -30,13 +30,13 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
import org.jclouds.azurecompute.arm.AzureComputeApi;
import
org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.SecurityGroupAvailablePredicateFactory;
+import
org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.SecurityGroupRuleAvailablePredicateFactory;
import org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndName;
import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
import org.jclouds.azurecompute.arm.domain.NetworkProfile.NetworkInterface;
@@ -78,20 +78,21 @@ public class AzureComputeSecurityGroupExtension implements
SecurityGroupExtensio
private final AzureComputeApi api;
private final Function<NetworkSecurityGroup, SecurityGroup>
securityGroupConverter;
private final SecurityGroupAvailablePredicateFactory securityGroupAvailable;
+ private final SecurityGroupRuleAvailablePredicateFactory
securityGroupRuleAvailable;
private final Predicate<URI> resourceDeleted;
private final LoadingCache<String, ResourceGroup> defaultResourceGroup;
private final Supplier<Set<String>> regionIds;
@Inject
- AzureComputeSecurityGroupExtension(AzureComputeApi api,
- Function<NetworkSecurityGroup, SecurityGroup> groupConverter,
- SecurityGroupAvailablePredicateFactory securityRuleAvailable,
+ AzureComputeSecurityGroupExtension(AzureComputeApi api,
Function<NetworkSecurityGroup, SecurityGroup> groupConverter,
+ SecurityGroupAvailablePredicateFactory securityGroupAvailable,
SecurityGroupRuleAvailablePredicateFactory securityGroupRuleAvailable,
@Named(TIMEOUT_RESOURCE_DELETED) Predicate<URI> resourceDeleted,
LoadingCache<String, ResourceGroup> defaultResourceGroup,
@Region Supplier<Set<String>> regionIds) {
this.api = api;
this.securityGroupConverter = groupConverter;
- this.securityGroupAvailable = securityRuleAvailable;
+ this.securityGroupAvailable = securityGroupAvailable;
+ this.securityGroupRuleAvailable = securityGroupRuleAvailable;
this.resourceDeleted = resourceDeleted;
this.defaultResourceGroup = defaultResourceGroup;
this.regionIds = regionIds;
@@ -252,8 +253,7 @@ public class AzureComputeSecurityGroupExtension implements
SecurityGroupExtensio
ruleApi.createOrUpdate(ruleName, properties);
- checkState(
-
securityGroupAvailable.create(resourceGroupAndName.resourceGroup()).apply(networkSecurityGroup.name()),
+
checkState(securityGroupRuleAvailable.create(resourceGroupAndName.resourceGroup(),
networkSecurityGroup.name()).apply(ruleName),
"Security group was not updated in the configured timeout");
}
@@ -294,10 +294,11 @@ public class AzureComputeSecurityGroupExtension
implements SecurityGroupExtensio
for (NetworkSecurityRule matchingRule : rules) {
logger.debug(">> deleting network security rule %s from %s...",
matchingRule.name(), group.getName());
- ruleApi.delete(matchingRule.name());
- checkState(
-
securityGroupAvailable.create(resourceGroupAndName.resourceGroup()).apply(networkSecurityGroup.name()),
- "Security group was not updated in the configured timeout");
+ URI uri = ruleApi.delete(matchingRule.name());
+ if (uri != null) {
+ checkState(resourceDeleted.apply(uri), "Rule %s could not be
deleted in the configured timeout", matchingRule.id());
+ }
+
}
return getSecurityGroupById(group.getId());
diff --git
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java
index e93107e..d52c7fc 100644
---
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java
+++
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java
@@ -16,14 +16,14 @@
*/
package org.jclouds.azurecompute.arm.domain;
-import com.google.auto.value.AutoValue;
-
import org.jclouds.azurecompute.arm.util.GetEnumValue;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
+import com.google.auto.value.AutoValue;
+
@AutoValue
-public abstract class NetworkSecurityRuleProperties {
+public abstract class NetworkSecurityRuleProperties implements Provisionable {
public enum Protocol {
// * is an allowed value, will handle in
Tcp("Tcp"),
@@ -91,7 +91,10 @@ public abstract class NetworkSecurityRuleProperties {
public abstract Direction direction();
- @SerializedNames({"description", "protocol", "sourcePortRange",
"destinationPortRange", "sourceAddressPrefix", "destinationAddressPrefix",
"access", "priority", "direction"})
+ @Nullable
+ public abstract String provisioningState();
+
+ @SerializedNames({ "description", "protocol", "sourcePortRange",
"destinationPortRange", "sourceAddressPrefix", "destinationAddressPrefix",
"access", "priority", "direction", "provisioningState" })
public static NetworkSecurityRuleProperties create(final String description,
final Protocol protocol,
final String
sourcePortRange,
@@ -100,7 +103,8 @@ public abstract class NetworkSecurityRuleProperties {
final String
destinationAddressPrefix,
final Access access,
final Integer priority,
- final Direction
direction) {
+ final Direction
direction,
+ final String
provisioningState) {
return builder()
.description(description)
.protocol(protocol)
@@ -110,7 +114,7 @@ public abstract class NetworkSecurityRuleProperties {
.destinationAddressPrefix(destinationAddressPrefix)
.access(access)
.priority(priority)
- .direction(direction)
+ .direction(direction).provisioningState(provisioningState)
.build();
}
@@ -140,6 +144,8 @@ public abstract class NetworkSecurityRuleProperties {
public abstract Builder direction(Direction direction);
+ public abstract Builder provisioningState(String provisioningState);
+
public abstract NetworkSecurityRuleProperties build();
}
}
diff --git
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiMockTest.java
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiMockTest.java
index 3dc0e4a..4f51954 100644
---
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiMockTest.java
+++
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiMockTest.java
@@ -54,6 +54,7 @@ public class NetworkSecurityGroupApiMockTest extends
BaseAzureComputeApiMockTest
.access(NetworkSecurityRuleProperties.Access.Deny)
.priority(4095)
.direction(NetworkSecurityRuleProperties.Direction.Outbound)
+ .provisioningState("Succeeded")
.build());
ArrayList<NetworkSecurityRule> ruleList = new
ArrayList<NetworkSecurityRule>();
ruleList.add(rule);
diff --git
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiMockTest.java
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiMockTest.java
index 1ca4284..bb5f57c 100644
---
a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiMockTest.java
+++
b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiMockTest.java
@@ -52,6 +52,7 @@ public class NetworkSecurityRuleApiMockTest extends
BaseAzureComputeApiMockTest
.access(NetworkSecurityRuleProperties.Access.Allow)
.priority(4094)
.direction(NetworkSecurityRuleProperties.Direction.Inbound)
+ .provisioningState("Succeeded")
.build());
return rule;
}
diff --git
a/providers/azurecompute-arm/src/test/resources/networksecurityrulecreate.json
b/providers/azurecompute-arm/src/test/resources/networksecurityrulecreate.json
index c09bf08..bb71460 100644
---
a/providers/azurecompute-arm/src/test/resources/networksecurityrulecreate.json
+++
b/providers/azurecompute-arm/src/test/resources/networksecurityrulecreate.json
@@ -12,6 +12,7 @@
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 4094,
- "direction": "Inbound"
+ "direction": "Inbound",
+ "provisioningState": "Succeeded"
}
-}
\ No newline at end of file
+}