http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRuleProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRuleProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRuleProperties.java new file mode 100644 index 0000000..ca90a15 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRuleProperties.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +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 LoadBalancingRuleProperties { + + public enum Protocol { + Tcp("Tcp"), Udp("Udp"), UNRECOGNIZED("Unrecognized"); + + private final String label; + + private Protocol(final String label) { + this.label = label; + } + + public static Protocol fromValue(final String text) { + return (Protocol) GetEnumValue.fromValueOrDefault(text, Protocol.UNRECOGNIZED); + } + + @Override + public String toString() { + return label; + } + } + + public enum LoadDistribution { + Default("Default"), SourceIp("SourceIP"), SourceIPProtocol("SourceIPProtocol"), UNRECOGNIZED("Unrecognized"); + + private final String label; + + private LoadDistribution(final String label) { + this.label = label; + } + + public static LoadDistribution fromValue(final String text) { + return (LoadDistribution) GetEnumValue.fromValueOrDefault(text, LoadDistribution.UNRECOGNIZED); + } + + @Override + public String toString() { + return label; + } + } + + @Nullable + public abstract IdReference frontendIPConfiguration(); + + @Nullable + public abstract IdReference backendAddressPool(); + + public abstract Protocol protocol(); + + public abstract int frontendPort(); + + public abstract int backendPort(); + + @Nullable + public abstract IdReference probe(); + + @Nullable + public abstract Boolean enableFloatingIP(); + + @Nullable + public abstract Integer idleTimeoutInMinutes(); + + @Nullable + public abstract LoadDistribution loadDistribution(); + + @Nullable + public abstract String provisioningState(); + + @SerializedNames({ "frontendIPConfiguration", "backendAddressPool", "protocol", "frontendPort", "backendPort", + "probe", "enableFloatingIP", "idleTimeoutInMinutes", "loadDistribution", "provisioningState" }) + public static LoadBalancingRuleProperties create(final IdReference frontendIPConfiguration, + final IdReference backendAddressPool, final Protocol protocol, final int frontendPort, final int backendPort, + final IdReference probe, final Boolean enableFloatingIP, final Integer idleTimeoutInMinutes, + final LoadDistribution loadDistribution, final String provisioningState) { + return builder().frontendIPConfiguration(frontendIPConfiguration).backendAddressPool(backendAddressPool) + .protocol(protocol).frontendPort(frontendPort).backendPort(backendPort).probe(probe) + .enableFloatingIP(enableFloatingIP).idleTimeoutInMinutes(idleTimeoutInMinutes) + .loadDistribution(loadDistribution).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_LoadBalancingRuleProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder frontendIPConfiguration(IdReference frontendIPConfiguration); + + public abstract Builder backendAddressPool(IdReference backendAddressPool); + + public abstract Builder protocol(Protocol protocol); + + public abstract Builder frontendPort(int frontendPort); + + public abstract Builder backendPort(int backendPort); + + public abstract Builder probe(IdReference probe); + + public abstract Builder enableFloatingIP(Boolean enableFloatingIP); + + public abstract Builder idleTimeoutInMinutes(Integer idleTimeoutInMinutes); + + public abstract Builder loadDistribution(LoadDistribution loadDistribution); + + public abstract Builder provisioningState(String provisioningState); + + public abstract LoadBalancingRuleProperties build(); + } +}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java index 8b19493..d1976f1 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkInterfaceCardProperties.java @@ -24,7 +24,7 @@ import org.jclouds.json.SerializedNames; import java.util.List; @AutoValue -public abstract class NetworkInterfaceCardProperties { +public abstract class NetworkInterfaceCardProperties implements Provisionable { @Nullable public abstract String provisioningState(); @@ -52,6 +52,8 @@ public abstract class NetworkInterfaceCardProperties { return builder.build(); } + + public abstract Builder toBuilder(); public static Builder builder() { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkProfile.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkProfile.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkProfile.java index ffcf9ee..b26305f 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkProfile.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkProfile.java @@ -18,6 +18,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; + import org.jclouds.json.SerializedNames; import java.util.List; @@ -34,6 +35,8 @@ public abstract class NetworkProfile { public static NetworkProfile create(final List<IdReference> networkInterfaces) { return builder().networkInterfaces(networkInterfaces).build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_NetworkProfile.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java index f81ab0f..bbc2746 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityGroupProperties.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; import com.google.common.collect.ImmutableList; @@ -24,7 +25,7 @@ import com.google.common.collect.ImmutableList; import java.util.List; @AutoValue -public abstract class NetworkSecurityGroupProperties { +public abstract class NetworkSecurityGroupProperties implements Provisionable { @Nullable public abstract List<NetworkSecurityRule> securityRules(); @@ -60,6 +61,8 @@ public abstract class NetworkSecurityGroupProperties { .provisioningState(provisioningState) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_NetworkSecurityGroupProperties.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java index 0710503..e93107e 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/NetworkSecurityRuleProperties.java @@ -17,6 +17,7 @@ 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; @@ -112,6 +113,8 @@ public abstract class NetworkSecurityRuleProperties { .direction(direction) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_NetworkSecurityRuleProperties.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSDisk.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSDisk.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSDisk.java index 0be43bf..9cdee44 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSDisk.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSDisk.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -70,6 +71,8 @@ public abstract class OSDisk { .image(image) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_OSDisk.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSProfile.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSProfile.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSProfile.java index 9240824..5592b4c 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSProfile.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/OSProfile.java @@ -18,6 +18,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -212,6 +213,8 @@ public abstract class OSProfile { .windowsConfiguration(windowsConfiguration) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_OSProfile.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Probe.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Probe.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Probe.java new file mode 100644 index 0000000..e523984 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Probe.java @@ -0,0 +1,42 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class Probe { + @Nullable + public abstract String name(); + + @Nullable + public abstract String id(); + + @Nullable + public abstract ProbeProperties properties(); + + @Nullable + public abstract String etag(); + + @SerializedNames({ "name", "id", "properties", "etag" }) + public static Probe create(final String name, final String id, final ProbeProperties properties, final String etag) { + return new AutoValue_Probe(name, id, properties, etag); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ProbeProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ProbeProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ProbeProperties.java new file mode 100644 index 0000000..6fe273e --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ProbeProperties.java @@ -0,0 +1,91 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +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 ProbeProperties implements Provisionable { + public enum Protocol { + Tcp("Tcp"), Http("Http"), UNRECOGNIZED("Unrecognized"); + + private final String label; + + private Protocol(final String label) { + this.label = label; + } + + public static Protocol fromValue(final String text) { + return (Protocol) GetEnumValue.fromValueOrDefault(text, Protocol.UNRECOGNIZED); + } + + @Override + public String toString() { + return label; + } + } + + @Nullable + public abstract Protocol protocol(); + + public abstract int port(); + + @Nullable + public abstract String requestPath(); + + public abstract int intervalInSeconds(); + + public abstract int numberOfProbes(); + + @Nullable + public abstract String provisioningState(); + + @SerializedNames({ "protocol", "port", "requestPath", "intervalInSeconds", "numberOfProbes", "provisioningState" }) + public static ProbeProperties create(final Protocol protocol, final int port, final String requestPath, + final int intervalInSeconds, final int numberOfProbes, final String provisioningState) { + return builder().protocol(protocol).port(port).requestPath(requestPath).intervalInSeconds(intervalInSeconds) + .numberOfProbes(numberOfProbes).provisioningState(provisioningState).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_ProbeProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder protocol(Protocol protocol); + + public abstract Builder port(int port); + + public abstract Builder requestPath(String requestPath); + + public abstract Builder intervalInSeconds(int intervalInSeconds); + + public abstract Builder numberOfProbes(int numberOfProbes); + + public abstract Builder provisioningState(String provisioningState); + + public abstract ProbeProperties build(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Provisionable.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Provisionable.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Provisionable.java new file mode 100644 index 0000000..f400e93 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Provisionable.java @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +public interface Provisionable { + + String provisioningState(); +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/PublicIPAddressProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/PublicIPAddressProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/PublicIPAddressProperties.java index 2fc7fb5..af7da0d 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/PublicIPAddressProperties.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/PublicIPAddressProperties.java @@ -17,11 +17,12 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @AutoValue -public abstract class PublicIPAddressProperties { +public abstract class PublicIPAddressProperties implements Provisionable { @Nullable // needs to be nullable to create the payload for create request public abstract String provisioningState(); @@ -58,6 +59,8 @@ public abstract class PublicIPAddressProperties { .dnsSettings(dnsSettings) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_PublicIPAddressProperties.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceDefinition.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceDefinition.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceDefinition.java index 7c68e80..1b51375 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceDefinition.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceDefinition.java @@ -20,6 +20,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -67,6 +68,8 @@ public abstract class ResourceDefinition { return builder.build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_ResourceDefinition.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceGroup.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceGroup.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceGroup.java index 936b813..51bea9e 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceGroup.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceGroup.java @@ -27,7 +27,7 @@ import com.google.common.collect.ImmutableMap; public abstract class ResourceGroup { @AutoValue - public abstract static class ResourceGroupProperties{ + public abstract static class ResourceGroupProperties implements Provisionable { @Nullable public abstract String provisioningState(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceProviderMetaData.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceProviderMetaData.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceProviderMetaData.java index 84526b9..e919f02 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceProviderMetaData.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ResourceProviderMetaData.java @@ -18,6 +18,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; + import org.jclouds.json.SerializedNames; import java.util.List; @@ -40,6 +41,8 @@ public abstract class ResourceProviderMetaData { return builder.build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_ResourceProviderMetaData.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Status.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Status.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Status.java new file mode 100644 index 0000000..780877b --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Status.java @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import java.util.Date; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class Status { + + @Nullable + public abstract String code(); + + @Nullable + public abstract String level(); + + @Nullable + public abstract String displayStatus(); + + @Nullable + public abstract String message(); + + @Nullable + public abstract Date time(); + + @SerializedNames({ "code", "level", "displayStatus", "message", "time" }) + public static Status create(final String code, final String level, final String displayStatus, final String message, + final Date time) { + return new AutoValue_Status(code, level, displayStatus, message, time); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageProfile.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageProfile.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageProfile.java index bcb62ee..a65ffd7 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageProfile.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageProfile.java @@ -18,6 +18,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -53,6 +54,8 @@ public abstract class StorageProfile { return builder.build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_StorageProfile.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageService.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageService.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageService.java index a97117f..0f5dbe5 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageService.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageService.java @@ -22,7 +22,6 @@ import java.util.Map; import com.google.common.collect.ImmutableMap; import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; - import org.jclouds.azurecompute.arm.util.GetEnumValue; @AutoValue @@ -150,6 +149,9 @@ public abstract class StorageService { return builder.build(); } + + public abstract Builder toBuilder(); + public static Builder builder() { return new AutoValue_StorageService_StorageServiceProperties.Builder(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java index e4024df..6830438 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java @@ -21,6 +21,7 @@ import static com.google.common.collect.ImmutableList.copyOf; import java.util.List; import com.google.common.collect.ImmutableList; + import org.jclouds.javax.annotation.Nullable; import com.google.auto.value.AutoValue; import org.jclouds.json.SerializedNames; @@ -40,7 +41,7 @@ public abstract class Subnet { } @AutoValue - public abstract static class SubnetProperties { + public abstract static class SubnetProperties implements Provisionable { @Nullable public abstract String provisioningState(); @@ -59,6 +60,8 @@ public abstract class Subnet { .ipConfigurations(ipConfigurations != null ? copyOf(ipConfigurations) : null) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_Subnet_SubnetProperties.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VHD.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VHD.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VHD.java index 3b1421a..7e6b387 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VHD.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VHD.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.json.SerializedNames; @AutoValue @@ -31,6 +32,8 @@ public abstract class VHD { public static VHD create(final String uri) { return builder().uri(uri).build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_VHD.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java index b08355e..04863ad 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java @@ -111,6 +111,8 @@ public abstract class VMImage { return new AutoValue_VMImage.Builder().globallyAvailable(false).custom(true); } + public abstract Builder toBuilder(); + @AutoValue.Builder public abstract static class Builder { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java index 65a389c..86810e5 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachine.java @@ -74,6 +74,8 @@ public abstract class VirtualMachine { .build(); } + public abstract Builder toBuilder(); + public static Builder builder() { return new AutoValue_VirtualMachine.Builder(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java index 1c11e4d..66ef283 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineInstance.java @@ -21,10 +21,8 @@ import static com.google.common.collect.Iterables.getFirst; import static com.google.common.collect.Iterables.transform; import static org.jclouds.util.Predicates2.startsWith; -import java.util.Date; import java.util.List; -import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState; import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties.ProvisioningState; import org.jclouds.azurecompute.arm.util.GetEnumValue; import org.jclouds.javax.annotation.Nullable; @@ -40,42 +38,19 @@ import com.google.common.collect.ImmutableList; @AutoValue public abstract class VirtualMachineInstance { - @com.google.auto.value.AutoValue - public abstract static class VirtualMachineStatus { - - public static final String PROVISIONING_STATE_PREFIX = "ProvisioningState/"; - public static final String POWER_STATE_PREFIX = "PowerState/"; - - public enum PowerState { - RUNNING, - STOPPED, - UNRECOGNIZED; - - public static PowerState fromValue(final String text) { - return (PowerState) GetEnumValue.fromValueOrDefault(text, PowerState.UNRECOGNIZED); - } - } - - @Nullable - public abstract String code(); - - @Nullable - public abstract String level(); - - @Nullable - public abstract String displayStatus(); - - @Nullable - public abstract Date time(); - - @SerializedNames({"code", "level", "displayStatus", "time"}) - public static VirtualMachineStatus create(final String code, final String level, final String displayStatus, - final Date time) { + public static final String PROVISIONING_STATE_PREFIX = "ProvisioningState/"; + public static final String POWER_STATE_PREFIX = "PowerState/"; + + public enum PowerState { + RUNNING, + STOPPED, + UNRECOGNIZED; - return new AutoValue_VirtualMachineInstance_VirtualMachineStatus(code, level, displayStatus, time); + public static PowerState fromValue(final String text) { + return (PowerState) GetEnumValue.fromValueOrDefault(text, PowerState.UNRECOGNIZED); } } - + @Nullable public abstract String platformUpdateDomain(); @@ -83,19 +58,19 @@ public abstract class VirtualMachineInstance { public abstract String platformFaultDomain(); @Nullable - public abstract List<VirtualMachineStatus> statuses(); + public abstract List<Status> statuses(); public ProvisioningState provisioningState() { - return ProvisioningState.fromValue(firstStatus(VirtualMachineStatus.PROVISIONING_STATE_PREFIX)); + return ProvisioningState.fromValue(firstStatus(PROVISIONING_STATE_PREFIX)); } public PowerState powerState() { - return PowerState.fromValue(firstStatus(VirtualMachineStatus.POWER_STATE_PREFIX)); + return PowerState.fromValue(firstStatus(POWER_STATE_PREFIX)); } private String firstStatus(final String type) { - return getFirst(transform(filter(transform(statuses(), new Function<VirtualMachineStatus, String>() { - @Override public String apply(VirtualMachineStatus input) { + return getFirst(transform(filter(transform(statuses(), new Function<Status, String>() { + @Override public String apply(Status input) { return input.code(); } }), startsWith(type)), new Function<String, String>() { @@ -108,7 +83,7 @@ public abstract class VirtualMachineInstance { @SerializedNames({"platformUpdateDomain", "platformFaultDomain", "statuses"}) public static VirtualMachineInstance create(final String platformUpdateDomain, final String platformFaultDomain, - final List<VirtualMachineStatus> statuses) { + final List<Status> statuses) { return new AutoValue_VirtualMachineInstance(platformUpdateDomain, platformFaultDomain, statuses == null ? null : ImmutableList.copyOf(statuses)); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java index eb9520a..732da5c 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualMachineProperties.java @@ -61,7 +61,7 @@ public abstract class VirtualMachineProperties { * The availability set of the virtual machine */ @Nullable - public abstract AvailabilitySet availabilitySet(); + public abstract IdReference availabilitySet(); /** * The hardware Profile of the virtual machine . @@ -103,7 +103,7 @@ public abstract class VirtualMachineProperties { "networkProfile", "diagnosticsProfile", "provisioningState"}) public static VirtualMachineProperties create(final String vmId, final String licenseType, - final AvailabilitySet availabilitySet, + final IdReference availabilitySet, final HardwareProfile hardwareProfile, final StorageProfile storageProfile, final OSProfile osProfile, @@ -122,6 +122,8 @@ public abstract class VirtualMachineProperties { .provisioningState(provisioningState) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_VirtualMachineProperties.Builder(); @@ -133,7 +135,7 @@ public abstract class VirtualMachineProperties { public abstract Builder licenseType(String licenseType); - public abstract Builder availabilitySet(AvailabilitySet availabilitySet); + public abstract Builder availabilitySet(IdReference availabilitySet); public abstract Builder hardwareProfile(HardwareProfile hardwareProfile); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java index d5eddf0..a0f5c3e 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableList; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableMap; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -42,7 +43,7 @@ public abstract class VirtualNetwork { } @AutoValue - public abstract static class VirtualNetworkProperties { + public abstract static class VirtualNetworkProperties implements Provisionable { @Nullable public abstract String provisioningState(); @@ -65,6 +66,8 @@ public abstract class VirtualNetwork { .subnets(subnets != null ? copyOf(subnets) : null) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_VirtualNetwork_VirtualNetworkProperties.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApi.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApi.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApi.java new file mode 100644 index 0000000..30456d4 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApi.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.features; + +import java.io.Closeable; +import java.net.URI; +import java.util.List; +import java.util.Map; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet.AvailabilitySetProperties; +import org.jclouds.azurecompute.arm.filters.ApiVersionFilter; +import org.jclouds.azurecompute.arm.functions.URIParser; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.filters.OAuthFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SelectJson; +import org.jclouds.rest.binders.BindToJsonPayload; + +@Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Compute/availabilitySets") +@RequestFilters({ OAuthFilter.class, ApiVersionFilter.class }) +@Consumes(MediaType.APPLICATION_JSON) +public interface AvailabilitySetApi extends Closeable { + + @Named("availabilityset:list") + @GET + @SelectJson("value") + @Fallback(EmptyListOnNotFoundOr404.class) + List<AvailabilitySet> list(); + + @Named("availabilityset:get") + @Path("/{name}") + @GET + @Fallback(NullOnNotFoundOr404.class) + AvailabilitySet get(@PathParam("name") String name); + + @Named("availabilityset:createOrUpdate") + @Path("/{name}") + @PUT + @MapBinder(BindToJsonPayload.class) + @Produces(MediaType.APPLICATION_JSON) + AvailabilitySet createOrUpdate(@PathParam("name") String name, + @PayloadParam("location") String location, @Nullable @PayloadParam("tags") Map<String, String> tags, + @PayloadParam("properties") AvailabilitySetProperties properties); + + @Named("availabilityset:delete") + @Path("/{name}") + @DELETE + @ResponseParser(URIParser.class) + @Fallback(NullOnNotFoundOr404.class) + URI delete(@PathParam("name") String name); + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java new file mode 100644 index 0000000..f0ea900 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/LoadBalancerApi.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.features; + +import java.net.URI; +import java.util.List; +import java.util.Map; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.azurecompute.arm.domain.LoadBalancer; +import org.jclouds.azurecompute.arm.domain.LoadBalancerProperties; +import org.jclouds.azurecompute.arm.filters.ApiVersionFilter; +import org.jclouds.azurecompute.arm.functions.URIParser; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.filters.OAuthFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SelectJson; +import org.jclouds.rest.binders.BindToJsonPayload; + +@Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/loadBalancers") +@RequestFilters({ OAuthFilter.class, ApiVersionFilter.class }) +@Consumes(MediaType.APPLICATION_JSON) +public interface LoadBalancerApi { + + @Named("loadbalancer:list") + @GET + @SelectJson("value") + @Fallback(EmptyListOnNotFoundOr404.class) + List<LoadBalancer> list(); + + @Named("loadbalancer:get") + @Path("/{loadbalancername}") + @GET + @Fallback(NullOnNotFoundOr404.class) + LoadBalancer get(@PathParam("loadbalancername") String lbName); + + @Named("loadbalancer:createOrUpdate") + @Path("/{loadbalancername}") + @PUT + @MapBinder(BindToJsonPayload.class) + @Produces(MediaType.APPLICATION_JSON) + LoadBalancer createOrUpdate(@PathParam("loadbalancername") String lbName, + @PayloadParam("location") String location, @Nullable @PayloadParam("tags") Map<String, String> tags, + @PayloadParam("properties") LoadBalancerProperties properties); + + @Named("loadbalancer:delete") + @Path("/{loadbalancername}") + @DELETE + @ResponseParser(URIParser.class) + @Fallback(NullOnNotFoundOr404.class) + URI delete(@PathParam("loadbalancername") String lbName); + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApi.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApi.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApi.java index c135e9e..5d2773f 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApi.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApi.java @@ -35,6 +35,7 @@ import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard; import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties; import org.jclouds.azurecompute.arm.filters.ApiVersionFilter; import org.jclouds.azurecompute.arm.functions.URIParser; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.oauth.v2.filters.OAuthFilter; import org.jclouds.rest.annotations.Fallback; import org.jclouds.rest.annotations.MapBinder; @@ -60,9 +61,9 @@ public interface NetworkInterfaceCardApi { @MapBinder(BindToJsonPayload.class) @PUT NetworkInterfaceCard createOrUpdate(@PathParam("networkinterfacecardname") String networkinterfacecardname, - @PayloadParam("location") String location, - @PayloadParam("properties") NetworkInterfaceCardProperties properties, - @PayloadParam("tags") Map<String, String> tags); + @PayloadParam("location") String location, + @PayloadParam("properties") NetworkInterfaceCardProperties properties, + @Nullable @PayloadParam("tags") Map<String, String> tags); @Named("networkinterfacecard:get") @Path("/{networkinterfacecardname}") http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java index 784f007..9c2427c 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java @@ -20,7 +20,9 @@ import static org.jclouds.compute.options.TemplateOptions.Builder.authorizePubli import java.util.Properties; +import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata; +import org.jclouds.azurecompute.arm.domain.ResourceGroup; import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; @@ -33,9 +35,13 @@ import org.jclouds.scriptbuilder.domain.Statements; import org.jclouds.scriptbuilder.statements.java.InstallJDK; import org.jclouds.scriptbuilder.statements.login.AdminAccess; import org.jclouds.sshj.config.SshjSshClientModule; +import org.testng.annotations.AfterClass; import org.testng.annotations.Test; +import com.google.common.cache.LoadingCache; +import com.google.inject.Key; import com.google.inject.Module; +import com.google.inject.TypeLiteral; /** * Live tests for the {@link org.jclouds.compute.ComputeService} integration. @@ -43,11 +49,37 @@ import com.google.inject.Module; @Test(groups = "live", singleThreaded = true, testName = "AzureComputeServiceLiveTest") public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest { + private LoadingCache<String, ResourceGroup> resourceGroupMap; + public AzureComputeServiceLiveTest() { provider = "azurecompute-arm"; } @Override + public void initializeContext() { + super.initializeContext(); + resourceGroupMap = context.utils().injector() + .getInstance(Key.get(new TypeLiteral<LoadingCache<String, ResourceGroup>>() { + })); + } + + @Override + @AfterClass(groups = "live", alwaysRun = true) + protected void tearDownContext() { + try { + if (template != null) { + ResourceGroup rg = resourceGroupMap.getIfPresent(template.getLocation().getId()); + if (rg != null) { + AzureComputeApi api = view.unwrapApi(AzureComputeApi.class); + api.getResourceGroupApi().delete(rg.name()); + } + } + } finally { + super.tearDownContext(); + } + } + + @Override protected LoggingModule getLoggingModule() { return new SLF4JLoggingModule(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java index 8939eb1..a6d19fa 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java @@ -21,16 +21,23 @@ import static org.jclouds.compute.options.TemplateOptions.Builder.authorizePubli import java.util.Map; import java.util.Properties; +import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata; +import org.jclouds.azurecompute.arm.domain.ResourceGroup; import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils; import org.jclouds.compute.ComputeTestUtils; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.extensions.internal.BaseImageExtensionLiveTest; +import org.jclouds.domain.Location; import org.jclouds.providers.ProviderMetadata; import org.jclouds.sshj.config.SshjSshClientModule; +import org.testng.annotations.AfterClass; import org.testng.annotations.Test; +import com.google.common.cache.LoadingCache; +import com.google.inject.Key; import com.google.inject.Module; +import com.google.inject.TypeLiteral; /** * Live tests for the {@link org.jclouds.compute.extensions.ImageExtension} @@ -38,12 +45,37 @@ import com.google.inject.Module; */ @Test(groups = "live", singleThreaded = true, testName = "AzureComputeImageExtensionLiveTest") public class AzureComputeImageExtensionLiveTest extends BaseImageExtensionLiveTest { + + public static final String NAME_PREFIX = "%s"; + + private LoadingCache<String, ResourceGroup> resourceGroupMap; public AzureComputeImageExtensionLiveTest() { provider = "azurecompute-arm"; } - public static String NAME_PREFIX = "%s"; + @Override + public void initializeContext() { + super.initializeContext(); + resourceGroupMap = context.utils().injector() + .getInstance(Key.get(new TypeLiteral<LoadingCache<String, ResourceGroup>>() { + })); + } + + @Override + @AfterClass(groups = "live", alwaysRun = true) + protected void tearDownContext() { + try { + Location location = getNodeTemplate().build().getLocation(); + ResourceGroup rg = resourceGroupMap.getIfPresent(location.getId()); + if (rg != null) { + AzureComputeApi api = view.unwrapApi(AzureComputeApi.class); + api.getResourceGroupApi().delete(rg.name()); + } + } finally { + super.tearDownContext(); + } + } @Override protected Module getSshModule() { http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java index cb13c7b..2aa012a 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtensionLiveTest.java @@ -29,8 +29,8 @@ import java.util.Properties; import java.util.Set; import java.util.concurrent.ExecutionException; +import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata; -import org.jclouds.azurecompute.arm.compute.strategy.CleanupResources; import org.jclouds.azurecompute.arm.domain.ResourceGroup; import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils; import org.jclouds.compute.ComputeService; @@ -60,7 +60,6 @@ public class AzureComputeSecurityGroupExtensionLiveTest extends BaseSecurityGrou private LoadingCache<String, ResourceGroup> resourceGroupMap; private ResourceGroup testResourceGroup; - private CleanupResources cleanupResources; public AzureComputeSecurityGroupExtensionLiveTest() { provider = "azurecompute-arm"; @@ -72,8 +71,7 @@ public class AzureComputeSecurityGroupExtensionLiveTest extends BaseSecurityGrou resourceGroupMap = context.utils().injector() .getInstance(Key.get(new TypeLiteral<LoadingCache<String, ResourceGroup>>() { })); - cleanupResources = context.utils().injector().getInstance(CleanupResources.class); - createResourceGroupIfMissing(); + createResourceGroup(); } @Test(groups = { "integration", "live" }, dependsOnMethods = "testCreateSecurityGroup") @@ -118,8 +116,11 @@ public class AzureComputeSecurityGroupExtensionLiveTest extends BaseSecurityGrou @AfterClass(groups = { "integration", "live" }) @Override protected void tearDownContext() { - super.tearDownContext(); - cleanupResources.deleteResourceGroupIfEmpty(testResourceGroup.name()); + try { + view.unwrapApi(AzureComputeApi.class).getResourceGroupApi().delete(testResourceGroup.name()); + } finally { + super.tearDownContext(); + } } @Override @@ -135,7 +136,7 @@ public class AzureComputeSecurityGroupExtensionLiveTest extends BaseSecurityGrou return AzureComputeProviderMetadata.builder().build(); } - private void createResourceGroupIfMissing() { + private void createResourceGroup() { Location location = getNodeTemplate().getLocation(); testResourceGroup = resourceGroupMap.getUnchecked(location.getId()); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiLiveTest.java new file mode 100644 index 0000000..6e9e1e7 --- /dev/null +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiLiveTest.java @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.features; + +import static com.google.common.collect.Iterables.any; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + +import java.net.URI; +import java.util.UUID; + +import org.jclouds.azurecompute.arm.domain.AvailabilitySet; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet.AvailabilitySetProperties; +import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableMap; + +@Test(groups = "live", testName = "AvailabilitySetApiLiveTest", singleThreaded = true) +public class AvailabilitySetApiLiveTest extends BaseAzureComputeApiLiveTest { + + private String asName; + + @BeforeClass + @Override + public void setup() { + super.setup(); + createTestResourceGroup(); + asName = "jclouds-" + RAND; + } + + @Test + public void deleteAvailabilitySetDoesNotExist() { + assertNull(api().delete(UUID.randomUUID().toString())); + } + + @Test + public void createAvailabilitySet() { + AvailabilitySetProperties props = AvailabilitySetProperties.builder().platformUpdateDomainCount(2) + .platformFaultDomainCount(3).build(); + AvailabilitySet as = api().createOrUpdate(asName, LOCATION, null, props); + + assertNotNull(as); + assertEquals(as.name(), asName); + } + + @Test(dependsOnMethods = "createAvailabilitySet") + public void getAvailabilitySet() { + assertNotNull(api().get(asName)); + } + + @Test(dependsOnMethods = "createAvailabilitySet") + public void listAvailabilitySet() { + assertTrue(any(api().list(), new Predicate<AvailabilitySet>() { + @Override + public boolean apply(AvailabilitySet input) { + return asName.equals(input.name()); + } + })); + } + + @Test(dependsOnMethods = "createAvailabilitySet") + public void updateAvailabilitySet() { + AvailabilitySet as = api().get(asName); + as = api().createOrUpdate(asName, LOCATION, ImmutableMap.of("foo", "bar"), as.properties()); + + assertNotNull(as); + assertTrue(as.tags().containsKey("foo")); + assertEquals(as.tags().get("foo"), "bar"); + } + + @Test(dependsOnMethods = { "getAvailabilitySet", "listAvailabilitySet", "updateAvailabilitySet" }) + public void deleteAvailabilitySet() { + URI uri = api().delete(asName); + assertResourceDeleted(uri); + } + + private AvailabilitySetApi api() { + return api.getAvailabilitySetApi(resourceGroupName); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java new file mode 100644 index 0000000..db9a7ed --- /dev/null +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/AvailabilitySetApiMockTest.java @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.features; + +import static com.google.common.collect.Iterables.isEmpty; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + +import java.net.URI; +import java.util.List; + +import org.jclouds.azurecompute.arm.domain.AvailabilitySet; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet.AvailabilitySetProperties; +import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest; +import org.testng.annotations.Test; + +@Test(groups = "unit", testName = "AvailabilitySetApiMockTest", singleThreaded = true) +public class AvailabilitySetApiMockTest extends BaseAzureComputeApiMockTest { + + private final String subscriptionid = "SUBSCRIPTIONID"; + private final String resourcegroup = "myresourcegroup"; + private final String asName = "myas"; + private final String apiVersion = "api-version=2016-03-30"; + + public void createAvailabilitySet() throws InterruptedException { + + server.enqueue(jsonResponse("/availabilitysetcreate.json").setResponseCode(200)); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + AvailabilitySetProperties props = AvailabilitySetProperties.builder().platformUpdateDomainCount(2) + .platformFaultDomainCount(3).build(); + AvailabilitySet as = asApi.createOrUpdate(asName, "westeurope", null, props); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets/%s?%s", subscriptionid, + resourcegroup, asName, apiVersion); + String json = "{\"location\":\"westeurope\",\"properties\":{\"platformUpdateDomainCount\":2,\"platformFaultDomainCount\":3}}"; + assertSent(server, "PUT", path, json); + + assertEquals(as.name(), asName); + assertEquals(as.properties().platformUpdateDomainCount(), 2); + assertEquals(as.properties().platformFaultDomainCount(), 3); + } + + public void getAvailabilitySet() throws InterruptedException { + + server.enqueue(jsonResponse("/availabilitysetget.json").setResponseCode(200)); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + AvailabilitySet as = asApi.get(asName); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets/%s?%s", subscriptionid, + resourcegroup, asName, apiVersion); + assertSent(server, "GET", path); + + assertEquals(as.name(), asName); + } + + public void getAvailabilitySet404() throws InterruptedException { + server.enqueue(response404()); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + AvailabilitySet as = asApi.get(asName); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets/%s?%s", subscriptionid, + resourcegroup, asName, apiVersion); + assertSent(server, "GET", path); + + assertNull(as); + } + + public void listAvailabilitySets() throws InterruptedException { + + server.enqueue(jsonResponse("/availabilitysetlist.json").setResponseCode(200)); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + List<AvailabilitySet> asList = asApi.list(); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets?%s", subscriptionid, + resourcegroup, apiVersion); + assertSent(server, "GET", path); + + assertTrue(asList.size() > 0); + } + + public void listAvailabilitySets404() throws InterruptedException { + server.enqueue(response404()); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + List<AvailabilitySet> asList = asApi.list(); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets?%s", subscriptionid, + resourcegroup, apiVersion); + assertSent(server, "GET", path); + + assertTrue(isEmpty(asList)); + } + + public void deleteAvailabilitySet() throws InterruptedException { + + server.enqueue(response202WithHeader()); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + URI uri = asApi.delete(asName); + assertNotNull(uri); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets/%s?%s", subscriptionid, + resourcegroup, asName, apiVersion); + assertSent(server, "DELETE", path); + } + + public void deleteSubnetResourceDoesNotExist() throws InterruptedException { + + server.enqueue(response204()); + + AvailabilitySetApi asApi = api.getAvailabilitySetApi(resourcegroup); + + URI uri = asApi.delete(asName); + assertNull(uri); + + String path = String.format( + "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/availabilitySets/%s?%s", subscriptionid, + resourcegroup, asName, apiVersion); + assertSent(server, "DELETE", path); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java index 42116c2..b485dc2 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java @@ -31,7 +31,6 @@ import org.jclouds.azurecompute.arm.domain.VirtualNetwork; import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest; import org.jclouds.util.Predicates2; import org.testng.Assert; -import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -41,7 +40,6 @@ import com.google.common.net.UrlEscapers; @Test(testName = "DeploymentApiLiveTest", singleThreaded = true) public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest { - private String resourceGroupName; private String deploymentName; private String subnetId; @@ -52,8 +50,7 @@ public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest { @Override public void setup() { super.setup(); - resourceGroupName = String.format("rg-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); - assertNotNull(createResourceGroup(resourceGroupName)); + createTestResourceGroup(); deploymentName = "jc" + System.currentTimeMillis(); String virtualNetworkName = String.format("vn-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); String storageAccountName = String.format("st%s%s", System.getProperty("user.name"), RAND); @@ -77,14 +74,6 @@ public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest { subnetId = subnet.id(); } - @AfterClass - @Override - protected void tearDown() { - super.tearDown(); - URI uri = api.getResourceGroupApi().delete(resourceGroupName); - assertResourceDeleted(uri); - } - private String getPutBody(String template, String mode, String parameters) { String body = "{ " + "\"properties\" : " +
