You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2018/01/08 14:53:07 UTC

[46/50] [abbrv] jclouds git commit: Add Azure KeyVault support

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Certificate.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Certificate.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Certificate.java
new file mode 100644
index 0000000..65de40c
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Certificate.java
@@ -0,0 +1,638 @@
+/*
+ * 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.Map;
+import java.util.List;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+
+@AutoValue
+public abstract class Certificate {
+   @AutoValue
+   public abstract static class CertificateAttributes {
+      @Nullable
+      public abstract Integer created();
+
+      public abstract boolean enabled();
+
+      @Nullable
+      public abstract Integer expiry();
+
+      @Nullable
+      public abstract Integer notBefore();
+
+      @Nullable
+      public abstract String recoveryLevel();
+
+      @Nullable
+      public abstract Integer updated();
+
+      @SerializedNames({"created", "enabled", "exp", "nbf", "recoveryLevel", "updated"})
+      public static CertificateAttributes create(final Integer created,
+                                                 final boolean enabled,
+                                                 final Integer expiry,
+                                                 final Integer notBefore,
+                                                 final String recoveryLevel,
+                                                 final Integer updated) {
+         return new AutoValue_Certificate_CertificateAttributes(created, enabled, expiry, notBefore, recoveryLevel, updated);
+      }
+   }
+
+   @AutoValue
+   public abstract static class IssuerParameters {
+      @Nullable
+      public abstract String certType();
+
+      @Nullable
+      public abstract String name();
+
+      @SerializedNames({"cty", "name"})
+      public static IssuerParameters create(final String certType,
+                                            final String name) {
+         return new AutoValue_Certificate_IssuerParameters(certType, name);
+      }
+   }
+
+   @AutoValue
+   public abstract static class KeyProperties {
+      @Nullable
+      public abstract Boolean exportable();
+
+      @Nullable
+      public abstract Integer keySize();
+
+      @Nullable
+      public abstract String keyType();
+
+      @Nullable
+      public abstract Boolean reuseKey();
+
+      @SerializedNames({"exportable", "key_size", "kty", "reuse_key"})
+      public static KeyProperties create(final boolean exportable,
+                                         final Integer keySize,
+                                         final String keyType,
+                                         final boolean reuseKey) {
+         return new AutoValue_Certificate_KeyProperties(exportable, keySize, keyType, reuseKey);
+      }
+   }
+
+   @AutoValue
+   public abstract static class LifetimeActionTrigger {
+      @Nullable
+      public abstract Integer daysBeforeExpiry();
+
+      @Nullable
+      public abstract Integer lifetimePercentage();
+
+      @SerializedNames({"days_before_expiry", "lifetime_percentage"})
+      public static LifetimeActionTrigger create(final Integer daysBeforeExpiry,
+                                                 final Integer lifetimePercentage) {
+         return new AutoValue_Certificate_LifetimeActionTrigger(daysBeforeExpiry, lifetimePercentage);
+      }
+   }
+
+   @AutoValue
+   public abstract static class LifetimeActionAction {
+      public abstract String actionType();
+
+      @SerializedNames({"action_type"})
+      public static LifetimeActionAction create(final String actionType) {
+         return new AutoValue_Certificate_LifetimeActionAction(actionType);
+      }
+   }
+
+   @AutoValue
+   public abstract static class LifetimeAction {
+      public abstract LifetimeActionAction action();
+
+      public abstract LifetimeActionTrigger trigger();
+
+      @SerializedNames({"action", "trigger"})
+      public static LifetimeAction create(final LifetimeActionAction action,
+                                          final LifetimeActionTrigger trigger) {
+         return new AutoValue_Certificate_LifetimeAction(action, trigger);
+      }
+   }
+
+   @AutoValue
+   public abstract static class SecretProperties {
+      public abstract String contentType();
+
+      @SerializedNames({"contentType"})
+      public static SecretProperties create(final String contentType) {
+         return new AutoValue_Certificate_SecretProperties(contentType);
+      }
+   }
+
+   @AutoValue
+   public abstract static class SubjectAlternativeNames {
+      public abstract List<String> dnsNames();
+
+      public abstract List<String> emails();
+
+      public abstract List<String> upns();
+
+      @SerializedNames({"dns_names", "emails", "upns"})
+      public static SubjectAlternativeNames create(final List<String> dnsNames,
+                                                   final List<String> emails,
+                                                   final List<String> upns) {
+         return new AutoValue_Certificate_SubjectAlternativeNames(
+                 dnsNames != null ? ImmutableList.copyOf(dnsNames) : ImmutableList.<String> of(),
+                 emails != null ? ImmutableList.copyOf(emails) : ImmutableList.<String> of(),
+                 upns != null ? ImmutableList.copyOf(upns) : ImmutableList.<String> of()
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class X509CertificateProperties {
+      public abstract List<String> enhancedKeyUsage();
+
+      public abstract List<String> keyUsage();
+
+      @Nullable
+      public abstract SubjectAlternativeNames subjectAltNames();
+
+      @Nullable
+      public abstract String subject();
+
+      @Nullable
+      public abstract Integer validityMonths();
+
+      @SerializedNames({"ekus", "key_usage", "sans", "subject", "validity_months"})
+      public static X509CertificateProperties create(final List<String> enhancedKeyUsage,
+                                                     final List<String> keyUsage,
+                                                     final SubjectAlternativeNames subjectAltNames,
+                                                     final String subject,
+                                                     final Integer validityMonths) {
+         return new AutoValue_Certificate_X509CertificateProperties(
+                 enhancedKeyUsage != null ? ImmutableList.copyOf(enhancedKeyUsage) : ImmutableList.<String> of(),
+                 keyUsage != null ? ImmutableList.copyOf(keyUsage) : ImmutableList.<String> of(),
+                 subjectAltNames,
+                 subject,
+                 validityMonths
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class CertificatePolicy {
+      @Nullable
+      public abstract CertificateAttributes attributes();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract IssuerParameters issuer();
+
+      @Nullable
+      public abstract KeyProperties keyProps();
+
+      public abstract List<LifetimeAction> lifetimeActions();
+
+      @Nullable
+      public abstract SecretProperties secretProps();
+
+      @Nullable
+      public abstract X509CertificateProperties x509props();
+
+      @SerializedNames({"attributes", "id", "issuer", "key_props", "lifetime_actions", "secret_props", "x509_props"})
+      public static CertificatePolicy create(final CertificateAttributes attributes,
+                                             final String id,
+                                             final IssuerParameters issuer,
+                                             final KeyProperties keyProps,
+                                             final List<LifetimeAction> lifetimeActions,
+                                             final SecretProperties secretProperties,
+                                             final X509CertificateProperties x509Props) {
+         return new AutoValue_Certificate_CertificatePolicy(
+                 attributes,
+                 id,
+                 issuer,
+                 keyProps,
+                 lifetimeActions != null ? ImmutableList.copyOf(lifetimeActions) : ImmutableList.<LifetimeAction>of(),
+                 secretProperties,
+                 x509Props
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class CertificateError {
+      @Nullable
+      public abstract String code();
+
+      @Nullable
+      public abstract String message();
+
+      @SerializedNames({"code", "message"})
+      public static CertificateError create(final String code,
+                                            final String message) {
+         return new AutoValue_Certificate_CertificateError(code, message);
+      }
+   }
+
+   @AutoValue
+   public abstract static class CertificateOperation {
+      @Nullable
+      public abstract Boolean cancellationRequested();
+
+      @Nullable
+      public abstract String csr();
+
+      @Nullable
+      public abstract CertificateError error();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract IssuerParameters issuer();
+
+      @Nullable
+      public abstract String requestId();
+
+      @Nullable
+      public abstract String status();
+
+      @Nullable
+      public abstract String statusDetails();
+
+      @Nullable
+      public abstract String target();
+
+      @SerializedNames({"cancellation_requested", "csr", "error", "id", "issuer", "request_id", "status", "status_details", "target"})
+      public static CertificateOperation create(final boolean cancellationRequested,
+                                                final String csr,
+                                                final CertificateError error,
+                                                final String id,
+                                                final IssuerParameters issuer,
+                                                final String requestId,
+                                                final String status,
+                                                final String statusDetails,
+                                                final String target) {
+         return new AutoValue_Certificate_CertificateOperation(
+                 cancellationRequested,
+                 csr,
+                 error,
+                 id,
+                 issuer,
+                 requestId,
+                 status,
+                 statusDetails,
+                 target);
+      }
+   }
+
+   @AutoValue
+   public abstract static class CertificateBundle {
+      @Nullable
+      public abstract CertificateAttributes attributes();
+
+      @Nullable
+      public abstract String certificate();
+
+      @Nullable
+      public abstract String contentType();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract String keyId();
+
+      @Nullable
+      public abstract CertificatePolicy policy();
+
+      @Nullable
+      public abstract String secretId();
+
+      @Nullable
+      public abstract Map<String, String> tags();
+
+      @Nullable
+      public abstract String thumbprint();
+
+      @SerializedNames({"attributes", "cer", "contentType", "id", "kid", "policy", "sid", "tags", "x5t"})
+      public static CertificateBundle create(final CertificateAttributes attributes,
+                                             final String certificate,
+                                             final String contentType,
+                                             final String id,
+                                             final String keyId,
+                                             final CertificatePolicy policy,
+                                             final String secretId,
+                                             final Map<String, String> tags,
+                                             final String thumbprint) {
+         return new AutoValue_Certificate_CertificateBundle(attributes,
+                 certificate,
+                 contentType,
+                 id,
+                 keyId,
+                 policy,
+                 secretId,
+                 tags != null ? ImmutableMap.copyOf(tags) : null,
+                 thumbprint
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class CertificateIssuer {
+      public abstract String id();
+
+      public abstract String provider();
+
+      @SerializedNames({"id", "provider"})
+      public static CertificateIssuer create(final String id,
+                                             final String provider) {
+         return new AutoValue_Certificate_CertificateIssuer(id, provider);
+      }
+   }
+
+   @AutoValue
+   public abstract static class IssuerAttributes {
+      @Nullable
+      public abstract Integer created();
+
+      @Nullable
+      public abstract Boolean enabled();
+
+      @Nullable
+      public abstract Integer updated();
+
+      @SerializedNames({"created", "enabled", "updated"})
+      public static IssuerAttributes create(final Integer created,
+                                            final Boolean enabled,
+                                            final Integer updated) {
+         return new AutoValue_Certificate_IssuerAttributes(created, enabled, updated);
+      }
+   }
+
+   @AutoValue
+   public abstract static class IssuerCredentials {
+      @Nullable
+      public abstract String accountId();
+
+      @Nullable
+      public abstract String password();
+
+      @SerializedNames({"account_id", "pwd"})
+      public static IssuerCredentials create(final String accountId,
+                                             final String password) {
+         return new AutoValue_Certificate_IssuerCredentials(accountId, password);
+      }
+   }
+
+   @AutoValue
+   public abstract static class OrganizationDetails {
+      public abstract List<AdministrationDetails> adminDetails();
+
+      @Nullable
+      public abstract String id();
+
+      @SerializedNames({"admin_details", "id"})
+      public static OrganizationDetails create(final List<AdministrationDetails> adminDetails,
+                                               final String id) {
+         return new AutoValue_Certificate_OrganizationDetails(
+                 adminDetails != null ? ImmutableList.copyOf(adminDetails) : ImmutableList.<AdministrationDetails> of(),
+                 id
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class AdministrationDetails {
+      @Nullable
+      public abstract String email();
+
+      @Nullable
+      public abstract String firstName();
+
+      @Nullable
+      public abstract String lastName();
+
+      @Nullable
+      public abstract String phoneNumber();
+
+      @SerializedNames({"email", "first_name", "last_name", "phone"})
+      public static AdministrationDetails create(final String email,
+                                                 final String firstName,
+                                                 final String lastName,
+                                                 final String phoneNumber) {
+         return new AutoValue_Certificate_AdministrationDetails(email, firstName, lastName, phoneNumber);
+      }
+   }
+
+   @AutoValue
+   public abstract static class IssuerBundle {
+      @Nullable
+      public abstract IssuerAttributes attributes();
+
+      @Nullable
+      public abstract IssuerCredentials credentials();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract OrganizationDetails organizationDetails();
+
+      @Nullable
+      public abstract String provider();
+
+      @SerializedNames({"attributes", "credentials", "id", "org_details", "provider"})
+      public static IssuerBundle create(final IssuerAttributes attributes,
+                                        final IssuerCredentials credentials,
+                                        final String id,
+                                        final OrganizationDetails orgDetails,
+                                        final String provider) {
+         return new AutoValue_Certificate_IssuerBundle(attributes, credentials, id, orgDetails, provider);
+      }
+   }
+
+   @AutoValue
+   public abstract static class Contact {
+      @Nullable
+      public abstract String email();
+
+      @Nullable
+      public abstract String name();
+
+      @Nullable
+      public abstract String phone();
+
+      @SerializedNames({"email", "name", "phone"})
+      public static Contact create(final String email,
+                                   final String name,
+                                   final String phone) {
+         return new AutoValue_Certificate_Contact(email, name, phone);
+      }
+   }
+
+   @AutoValue
+   public abstract static class Contacts {
+      public abstract List<Contact> contacts();
+
+      @Nullable
+      public abstract String id();
+
+      @SerializedNames({"contacts", "id"})
+      public static Contacts create(final List<Contact> contacts,
+                                    final String id) {
+         return new AutoValue_Certificate_Contacts(
+                 contacts != null ? ImmutableList.copyOf(contacts) : ImmutableList.<Contact> of(),
+                 id
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class DeletedCertificateBundle {
+      @Nullable
+      public abstract CertificateAttributes attributes();
+
+      @Nullable
+      public abstract String bytes();
+
+      @Nullable
+      public abstract Integer deletedDate();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract String keyId();
+
+      @Nullable
+      public abstract String recoveryId();
+
+      @Nullable
+      public abstract Integer scheduledPurgeDate();
+
+      @Nullable
+      public abstract String secredId();
+
+      @Nullable
+      public abstract Map<String, String> tags();
+
+      @Nullable
+      public abstract String thumbprint();
+
+      @SerializedNames({"attributes", "cer", "deletedDate", "id", "kid", "recoveryId", "scheduledPurgeDate", "sid", "tags", "x5t"})
+      public static DeletedCertificateBundle create(final CertificateAttributes attributes,
+                                                    final String bytes,
+                                                    final Integer deletedDate,
+                                                    final String id,
+                                                    final String keyId,
+                                                    final String recoveryId,
+                                                    final Integer scheduledPurgeDate,
+                                                    final String secretId,
+                                                    final Map<String, String> tags,
+                                                    final String thumbprint) {
+         return new AutoValue_Certificate_DeletedCertificateBundle(
+                 attributes,
+                 bytes,
+                 deletedDate,
+                 id,
+                 keyId,
+                 recoveryId,
+                 scheduledPurgeDate,
+                 secretId,
+                 tags != null ? ImmutableMap.copyOf(tags) : null,
+                 thumbprint
+         );
+      }
+   }
+
+   @AutoValue
+   public abstract static class DeletedCertificate {
+      @Nullable
+      public abstract CertificateAttributes attributes();
+
+      @Nullable
+      public abstract Integer deletedDate();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract String recoveryId();
+
+      @Nullable
+      public abstract Integer scheduledPurgeDate();
+
+      @Nullable
+      public abstract Map<String, String> tags();
+
+      @Nullable
+      public abstract String thumbprint();
+
+      @SerializedNames({"attributes", "deletedDate", "id", "recoveryId", "scheduledPurgeDate", "tags", "x5t"})
+      public static DeletedCertificate create(final CertificateAttributes attributes,
+                                              final Integer deletedDate,
+                                              final String id,
+                                              final String recoveryId,
+                                              final Integer scheduledPurgeDate,
+                                              final Map<String, String> tags,
+                                              final String thumbprint) {
+         return new AutoValue_Certificate_DeletedCertificate(
+                 attributes,
+                 deletedDate,
+                 id,
+                 recoveryId,
+                 scheduledPurgeDate,
+                 tags != null ? ImmutableMap.copyOf(tags) : null,
+                 thumbprint
+         );
+      }
+   }
+
+   @Nullable
+   public abstract CertificateAttributes attributes();
+
+   @Nullable
+   public abstract String id();
+
+   @Nullable
+   public abstract Map<String, String> tags();
+
+   @Nullable
+   public abstract String thumbprint();
+
+   @SerializedNames({"attributes", "id", "tags", "x5t"})
+   public static Certificate create(final CertificateAttributes attributes,
+                                    final String id,
+                                    final Map<String, String> tags,
+                                    final String thumbprint) {
+      return new AutoValue_Certificate(
+              attributes,
+              id,
+              tags != null ? ImmutableMap.copyOf(tags) : null,
+              thumbprint
+      );
+   }
+
+   Certificate() {
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Key.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Key.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Key.java
new file mode 100644
index 0000000..ed9b778
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Key.java
@@ -0,0 +1,229 @@
+/*
+ * 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.Map;
+import java.util.List;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class Key {
+    @AutoValue
+    public abstract static class JsonWebKey {
+        @Nullable
+        public abstract String crv();
+
+        @Nullable
+        public abstract String d();
+
+        @Nullable
+        public abstract String dp();
+
+        @Nullable
+        public abstract String dq();
+
+        @Nullable
+        public abstract String e();
+
+        @Nullable
+        public abstract String k();
+
+        @Nullable
+        public abstract String keyHsm();
+
+        public abstract List<String> keyOps();
+
+        @Nullable
+        public abstract String kid();
+
+        @Nullable
+        public abstract String kty();
+
+        @Nullable
+        public abstract String n();
+
+        @Nullable
+        public abstract String p();
+
+        @Nullable
+        public abstract String q();
+
+        @Nullable
+        public abstract String qi();
+
+        @Nullable
+        public abstract String x();
+
+        @Nullable
+        public abstract String y();
+
+        @SerializedNames({"crv", "d", "dp", "dq", "e", "k", "key_hsm", "key_ops", "kid", "kty", "n", "p", "q", "qi", "x", "y"})
+        public static JsonWebKey create(final String crv, final String d, final String dp, final String dq,
+                                        final String e, final String k, final String keyHsm, final List<String> keyOps,
+                                        final String kid, final String kty, final String n, final String p,
+                                        final String q, final String qi, final String x, final String y) {
+            return new AutoValue_Key_JsonWebKey(
+                    crv, d, dp, dq, e, k, keyHsm,
+                    keyOps != null ? ImmutableList.copyOf(keyOps) : ImmutableList.<String> of(),
+                    kid, kty, n, p, q, qi, x, y);
+        }
+    }
+
+    @AutoValue
+    public abstract static class KeyAttributes {
+        @Nullable
+        public abstract Boolean enabled();
+
+        @Nullable
+        public abstract Integer created();
+
+        @Nullable
+        public abstract Integer expires();
+
+        @Nullable
+        public abstract Integer notBefore();
+
+        @Nullable
+        public abstract String recoveryLevel();
+
+        @Nullable
+        public abstract Integer updated();
+
+        @SerializedNames({"enabled", "created", "expires", "notBefore", "recoveryLevel", "updated"})
+        public static KeyAttributes create(final Boolean enabled,
+                                           final Integer created,
+                                           final Integer expires,
+                                           final Integer notBefore,
+                                           final String recoveryLevel,
+                                           final Integer updated) {
+            return new AutoValue_Key_KeyAttributes(enabled, created, expires, notBefore, recoveryLevel, updated);
+        }
+
+        KeyAttributes() {
+        }
+    }
+
+    @AutoValue
+    public abstract static class KeyBundle {
+        @Nullable
+        public abstract KeyAttributes attributes();
+
+        @Nullable
+        public abstract JsonWebKey key();
+
+        @Nullable
+        public abstract Boolean managed();
+
+        @Nullable
+        public abstract Map<String, String> tags();
+
+        @SerializedNames({"attributes", "key", "managed", "tags"})
+        public static KeyBundle create(final KeyAttributes attributes, final JsonWebKey key, final boolean managed, final Map<String, String> tags) {
+            return new AutoValue_Key_KeyBundle(
+                    attributes,
+                    key,
+                    managed,
+                    tags != null ? ImmutableMap.copyOf(tags) : null
+            );
+        }
+    }
+
+    @AutoValue
+    public abstract static class DeletedKeyBundle {
+        @Nullable
+        public abstract KeyAttributes attributes();
+
+        @Nullable
+        public abstract String deletedDate();
+
+        @Nullable
+        public abstract JsonWebKey key();
+
+        @Nullable
+        public abstract Boolean managed();
+
+        @Nullable
+        public abstract String recoveryId();
+
+        @Nullable
+        public abstract String scheduledPurgeDate();
+
+        @Nullable
+        public abstract Map<String, String> tags();
+
+        @SerializedNames({"attributes", "deletedDate", "key", "managed", "recoveryId", "scheduledPurgeDate", "tags"})
+        public static DeletedKeyBundle create(final KeyAttributes attributes, final String deletedDate, final JsonWebKey key, final boolean managed, final String recoveryId, final String scheduledPurgeDate, final Map<String, String> tags) {
+            return new AutoValue_Key_DeletedKeyBundle(
+                    attributes,
+                    deletedDate,
+                    key,
+                    managed,
+                    recoveryId,
+                    scheduledPurgeDate,
+                    tags != null ? ImmutableMap.copyOf(tags) : null
+
+            );
+        }
+    }
+
+    @AutoValue
+    public abstract static class KeyOperationResult {
+        @Nullable
+        public abstract String keyId();
+
+        @Nullable
+        public abstract String value();
+
+        @SerializedNames({"kid", "value"})
+        public static KeyOperationResult create(final String keyId, final String value) {
+            return new AutoValue_Key_KeyOperationResult(
+                    keyId,
+                    value
+            );
+        }
+    }
+
+    @Nullable
+    public abstract String kid();
+
+    public abstract KeyAttributes attributes();
+
+    @Nullable
+    public abstract Boolean managed();
+
+    @Nullable
+    public abstract Map<String, String> tags();
+
+    @SerializedNames({"kid", "attributes", "managed", "tags"})
+    public static Key create(final String kid, final KeyAttributes attributes, final boolean managed, final Map<String, String> tags) {
+        return new AutoValue_Key(
+                kid,
+                attributes,
+                managed,
+                tags != null ? ImmutableMap.copyOf(tags) : null
+        );
+    }
+
+    Key() {
+    }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/SKU.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/SKU.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/SKU.java
index 4c414e5..6af4406 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/SKU.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/SKU.java
@@ -16,36 +16,25 @@
  */
 package org.jclouds.azurecompute.arm.domain;
 
-import com.google.auto.value.AutoValue;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
-/**
- * SKU
- */
+import com.google.auto.value.AutoValue;
+
 @AutoValue
 public abstract class SKU {
-   /**
-    * The location of the SKU
-    */
    @Nullable
    public abstract String location();
-
-   /**
-    * The name of the SKU
-    */
    @Nullable
    public abstract String name();
-
-   /**
-    * The id of the SKU
-    */
    @Nullable
    public abstract String id();
+   @Nullable
+   public abstract String family();
+   
+   @SerializedNames({"location", "name", "id", "family"})
+   public static SKU create(final String location, final String name, final String id, final String family) {
 
-   @SerializedNames({"location", "name", "id"})
-   public static SKU create(final String location, final String name, final String id) {
-
-      return new AutoValue_SKU(location, name, id);
+      return new AutoValue_SKU(location, name, id, family);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Secret.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Secret.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Secret.java
new file mode 100644
index 0000000..789a71c
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Secret.java
@@ -0,0 +1,186 @@
+/*
+ * 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 com.google.common.collect.ImmutableMap;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import java.util.Map;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class Secret {
+
+   @AutoValue
+   public abstract static class SecretAttributes {
+      @Nullable
+      public abstract Boolean enabled();
+
+      @Nullable
+      public abstract Integer created();
+
+      @Nullable
+      public abstract Integer expires();
+
+      @Nullable
+      public abstract Integer notBefore();
+
+      @Nullable
+      public abstract String recoveryLevel();
+
+      @Nullable
+      public abstract Integer updated();
+
+      @SerializedNames({"enabled", "created", "expires", "notBefore", "recoveryLevel", "updated"})
+      public static SecretAttributes create(final Boolean enabled,
+                                            final Integer created,
+                                            final Integer expires,
+                                            final Integer notBefore,
+                                            final String recoveryLevel,
+                                            final Integer updated) {
+         return new AutoValue_Secret_SecretAttributes(enabled, created, expires, notBefore, recoveryLevel, updated);
+      }
+
+      SecretAttributes() {
+      }
+   }
+
+   @AutoValue
+   public abstract static class DeletedSecretBundle {
+      @Nullable
+      public abstract SecretAttributes attributes();
+
+      @Nullable
+      public abstract String contentType();
+
+      @Nullable
+      public abstract String deletedDate();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract String kid();
+
+      @Nullable
+      public abstract Boolean managed();
+
+      @Nullable
+      public abstract String recoveryId();
+
+      @Nullable
+      public abstract String scheduledPurgeDate();
+
+      @Nullable
+      public abstract Map<String, String> tags();
+
+      @Nullable
+      public abstract String value();
+
+      @SerializedNames({"attributes", "contentType", "deletedDate", "id", "kid", "managed", "recoveryId", "scheduledPurgeDate", "tags", "value"})
+      public static DeletedSecretBundle create(final SecretAttributes attributes,
+                                               final String contentType,
+                                               final String deletedDate,
+                                               final String id,
+                                               final String kid,
+                                               final Boolean managed,
+                                               final String recoveryId,
+                                               final String scheduledPurgeDate,
+                                               final Map<String, String> tags,
+                                               String value) {
+         return new AutoValue_Secret_DeletedSecretBundle(
+                 attributes, contentType, deletedDate,
+                 id, kid, managed, recoveryId, scheduledPurgeDate,
+                 tags != null ? ImmutableMap.copyOf(tags) : null,
+                 value);
+      }
+   }
+
+   @AutoValue
+   public abstract static class SecretBundle {
+      @Nullable
+      public abstract SecretAttributes attributes();
+
+      @Nullable
+      public abstract String contentType();
+
+      @Nullable
+      public abstract String id();
+
+      @Nullable
+      public abstract String kid();
+
+      @Nullable
+      public abstract Boolean managed();
+
+      @Nullable
+      public abstract Map<String, String> tags();
+
+      @Nullable
+      public abstract String value();
+
+      @SerializedNames({"attributes", "contentType", "id", "kid", "managed", "tags", "value"})
+      public static SecretBundle create(final SecretAttributes attributes,
+                                        final String contentType,
+                                        final String id,
+                                        final String kid,
+                                        final Boolean managed,
+                                        final Map<String, String> tags,
+                                        String value) {
+         return new AutoValue_Secret_SecretBundle(
+                 attributes, contentType, id,
+                 kid, managed,
+                 tags != null ? ImmutableMap.copyOf(tags) : null,
+                 value);
+      }
+   }
+
+   @Nullable
+   public abstract SecretAttributes attributes();
+
+   @Nullable
+   public abstract String contentType();
+
+   @Nullable
+   public abstract String id();
+
+   @Nullable
+   public abstract Boolean managed();
+
+   @Nullable
+   public abstract Map<String, String> tags();
+
+   @SerializedNames({"attributes", "contentType", "id", "managed", "tags"})
+   public static Secret create(final SecretAttributes attributes,
+                               final String contentType,
+                               final String id,
+                               final Boolean managed,
+                               final Map<String, String> tags) {
+      return new AutoValue_Secret(
+              attributes,
+              contentType,
+              id,
+              managed,
+              tags != null ? ImmutableMap.copyOf(tags) : null
+      );
+   }
+
+   Secret() {
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Vault.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Vault.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Vault.java
new file mode 100644
index 0000000..3683df6
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Vault.java
@@ -0,0 +1,112 @@
+/*
+ * 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 java.util.Map;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableMap;
+
+@AutoValue
+public abstract class Vault {
+
+   @AutoValue
+   public abstract static class DeletedVault {
+      @Nullable public abstract String id();
+      @Nullable public abstract String name();
+      @Nullable public abstract String type();
+      @Nullable public abstract DeletedVaultProperties properties();
+
+      @SerializedNames({"id", "name", "type", "properties"})
+      public static DeletedVault create(final String id, final String name,
+                                        final String type, final DeletedVaultProperties properties) {
+         return new AutoValue_Vault_DeletedVault(id, name, type, properties);
+      }
+   }
+
+   @AutoValue
+   public abstract static class DeletedVaultProperties {
+      @Nullable public abstract Date deletionDate();
+      @Nullable public abstract String location();
+      @Nullable public abstract Date scheduledPurgeDate();
+      @Nullable public abstract Map<String, String> tags();
+      @Nullable public abstract String vaultId();
+
+      @SerializedNames({"deletionDate", "location", "scheduledPurgeDate", "tags", "vaultId"})
+      public static DeletedVaultProperties create (final Date deletionDate, final String location,
+                                           final Date scheduledPurgeDate, final Map<String, String> tags,
+                                           final String vaultId) {
+         return new AutoValue_Vault_DeletedVaultProperties(
+                 deletionDate,
+                 location,
+                 scheduledPurgeDate,
+                 tags != null ? ImmutableMap.copyOf(tags) : null,
+                 vaultId
+         );
+      }
+   }
+
+   @Nullable public abstract String id();
+   @Nullable public abstract String type();
+   public abstract String location();
+   @Nullable public abstract Map<String, String> tags();
+   @Nullable public abstract String name();
+   public abstract VaultProperties properties();
+
+   @SerializedNames({"id", "name", "type", "location", "properties", "tags"})
+   public static Vault create(final String id, final String name, final String type,
+                              final String location,
+                              final VaultProperties properties, final Map<String, String> tags) {
+      return builder()
+              .id(id)
+              .name(name)
+              .type(type)
+              .location(location)
+              .properties(properties)
+              .tags(tags != null ? ImmutableMap.copyOf(tags) : null)
+              .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_Vault.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder id(String id);
+      public abstract Builder name(String name);
+      public abstract Builder type(String type);
+      public abstract Builder location(String location);
+      public abstract Builder properties(VaultProperties properties);
+      public abstract Builder tags(Map<String, String> tags);
+
+      abstract Map<String, String> tags();
+      abstract Vault autoBuild();
+
+      public Vault build() {
+         tags(tags() != null ? ImmutableMap.copyOf(tags()) : null);
+         return autoBuild();
+      }
+      
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VaultProperties.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VaultProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VaultProperties.java
new file mode 100644
index 0000000..5e97cf3
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VaultProperties.java
@@ -0,0 +1,131 @@
+/*
+ * 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.net.URI;
+import java.util.List;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+import com.google.common.collect.ImmutableList;
+
+@AutoValue
+public abstract class VaultProperties {
+
+   @AutoValue
+   public abstract static class Permissions {
+
+      public abstract List<String> certificates();
+      public abstract List<String> keys();
+      public abstract List<String> secrets();
+      public abstract List<String> storage();
+
+      @SerializedNames({ "certificates", "keys", "secrets", "storage"})
+      public static Permissions create(final List<String> certificates, final List<String> keys, final List<String> secrets, final List<String> storage) {
+         return new AutoValue_VaultProperties_Permissions(
+                 certificates != null ? ImmutableList.copyOf(certificates) : ImmutableList.<String> of(),
+                 keys != null ? ImmutableList.copyOf(keys) : ImmutableList.<String> of(),
+                 secrets != null ? ImmutableList.copyOf(secrets) : ImmutableList.<String> of(),
+                 storage != null ? ImmutableList.copyOf(storage) : ImmutableList.<String> of()
+         );
+      }
+
+      Permissions() {
+
+      }
+   }
+   
+   @AutoValue
+   public abstract static class AccessPolicyEntry {
+
+      @Nullable public abstract String applicationId();
+      public abstract String objectId();
+      public abstract String tenantId();
+      @Nullable public abstract Permissions permissions();
+
+      @SerializedNames({"applicationId", "objectId", "tenantId", "permissions"})
+      public static AccessPolicyEntry create(final String applicationId, final String objectId, final String tenantId, final Permissions permissions) {
+         return new AutoValue_VaultProperties_AccessPolicyEntry(applicationId, objectId, tenantId, permissions);
+      }
+
+      AccessPolicyEntry() {
+
+      }
+   }
+   
+   @Nullable
+   public abstract String tenantId();
+   @Nullable
+   public abstract URI vaultUri();
+   @Nullable
+   public abstract Boolean enabledForDeployment();
+   @Nullable
+   public abstract Boolean enabledForTemplateDeployment();
+   @Nullable
+   public abstract Boolean enableSoftDelete();
+   @Nullable
+   public abstract String createMode();
+   @Nullable
+   public abstract SKU sku();
+   @Nullable
+   public abstract List<AccessPolicyEntry> accessPolicies();
+
+   @SerializedNames({"tenantId", "vaultUri", "enabledForDeployment", "enabledForTemplateDeployment", "enableSoftDelete", "createMode", "sku", "accessPolicies" })
+   public static VaultProperties create(final String tenantId, final URI vaultUri, final Boolean enabledForDeployment, final Boolean enabledForTemplateDeployment, final Boolean enableSoftDelete, final String createMode,
+                                        final SKU sku, final List<AccessPolicyEntry> accessPolicies) {
+      return builder()
+              .tenantId(tenantId)
+              .vaultUri(vaultUri)
+              .enabledForDeployment(enabledForDeployment)
+              .enabledForTemplateDeployment(enabledForTemplateDeployment)
+              .enableSoftDelete(enableSoftDelete)
+              .createMode(createMode)
+              .sku(sku)
+              .accessPolicies(accessPolicies)
+              .build();
+   }
+
+   public abstract Builder toBuilder();
+
+   public static Builder builder() {
+      return new AutoValue_VaultProperties.Builder();
+   }
+
+   @AutoValue.Builder
+   public abstract static class Builder {
+      public abstract Builder tenantId(String tenantId);
+      public abstract Builder vaultUri(URI vaultUri);
+      public abstract Builder enabledForDeployment(Boolean enabledForDeployment);
+      public abstract Builder enabledForTemplateDeployment(Boolean enabledForTemplateDeployment);
+      public abstract Builder enableSoftDelete(Boolean enableSoftDelete);
+      public abstract Builder createMode(String createMode);
+      public abstract Builder sku(SKU sku);
+      public abstract Builder accessPolicies(List<AccessPolicyEntry> accessPolicies);
+      
+      abstract List<AccessPolicyEntry> accessPolicies();
+
+      abstract VaultProperties autoBuild();
+
+      public VaultProperties build() {
+         return accessPolicies(accessPolicies() != null ? ImmutableList.copyOf(accessPolicies()) : ImmutableList.<AccessPolicyEntry>of())
+                 .autoBuild();
+      }
+
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VaultApi.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VaultApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VaultApi.java
new file mode 100644
index 0000000..5ae39ba
--- /dev/null
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VaultApi.java
@@ -0,0 +1,635 @@
+/*
+ * 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.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.MediaType;
+
+import com.google.common.base.Function;
+
+import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
+import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.azurecompute.arm.config.OAuthResource;
+import org.jclouds.azurecompute.arm.domain.Certificate;
+import org.jclouds.azurecompute.arm.domain.Certificate.CertificateAttributes;
+import org.jclouds.azurecompute.arm.domain.Certificate.CertificateBundle;
+import org.jclouds.azurecompute.arm.domain.Certificate.CertificateIssuer;
+import org.jclouds.azurecompute.arm.domain.Certificate.CertificateOperation;
+import org.jclouds.azurecompute.arm.domain.Certificate.CertificatePolicy;
+import org.jclouds.azurecompute.arm.domain.Certificate.Contact;
+import org.jclouds.azurecompute.arm.domain.Certificate.Contacts;
+import org.jclouds.azurecompute.arm.domain.Certificate.DeletedCertificate;
+import org.jclouds.azurecompute.arm.domain.Certificate.DeletedCertificateBundle;
+import org.jclouds.azurecompute.arm.domain.Certificate.IssuerAttributes;
+import org.jclouds.azurecompute.arm.domain.Certificate.IssuerBundle;
+import org.jclouds.azurecompute.arm.domain.Certificate.IssuerCredentials;
+import org.jclouds.azurecompute.arm.domain.Certificate.IssuerParameters;
+import org.jclouds.azurecompute.arm.domain.Certificate.KeyProperties;
+import org.jclouds.azurecompute.arm.domain.Certificate.LifetimeAction;
+import org.jclouds.azurecompute.arm.domain.Certificate.OrganizationDetails;
+import org.jclouds.azurecompute.arm.domain.Certificate.SecretProperties;
+import org.jclouds.azurecompute.arm.domain.Certificate.X509CertificateProperties;
+import org.jclouds.azurecompute.arm.domain.Key;
+import org.jclouds.azurecompute.arm.domain.Key.DeletedKeyBundle;
+import org.jclouds.azurecompute.arm.domain.Key.JsonWebKey;
+import org.jclouds.azurecompute.arm.domain.Key.KeyAttributes;
+import org.jclouds.azurecompute.arm.domain.Key.KeyBundle;
+import org.jclouds.azurecompute.arm.domain.Key.KeyOperationResult;
+import org.jclouds.azurecompute.arm.domain.Secret;
+import org.jclouds.azurecompute.arm.domain.Secret.DeletedSecretBundle;
+import org.jclouds.azurecompute.arm.domain.Secret.SecretAttributes;
+import org.jclouds.azurecompute.arm.domain.Secret.SecretBundle;
+import org.jclouds.azurecompute.arm.domain.Vault;
+import org.jclouds.azurecompute.arm.domain.Vault.DeletedVault;
+import org.jclouds.azurecompute.arm.domain.VaultProperties;
+import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.oauth.v2.filters.OAuthFilter;
+import org.jclouds.rest.annotations.EndpointParam;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.MapBinder;
+import org.jclouds.rest.annotations.PATCH;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.SelectJson;
+import org.jclouds.rest.binders.BindToJsonPayload;
+import org.jclouds.rest.annotations.ParamParser;
+
+@RequestFilters({ OAuthFilter.class, ApiVersionFilter.class })
+@Consumes(MediaType.APPLICATION_JSON)
+public interface VaultApi {
+   static class PrependSlashOrEmptyString implements Function<Object, String> {
+      public String apply(Object from) {
+         if ((from == null) || (from.toString().length() == 0)) {
+            return "";
+         } else {
+            return "/" + from.toString();
+         }
+      }
+   }
+
+   // Vault operations
+   @Named("vault:list")
+   @SelectJson("value")
+   @GET
+   @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.KeyVault/vaults")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   List<Vault> listVaults();
+
+   @Named("vault:create_or_update")
+   @PUT
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.KeyVault/vaults/{vaultName}")
+   Vault createOrUpdateVault(@PathParam("vaultName") String vaultName, @PayloadParam("location") String location,
+         @PayloadParam("properties") VaultProperties properties, @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("vault:get")
+   @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.KeyVault/vaults/{vaultName}")
+   @GET
+   @Fallback(NullOnNotFoundOr404.class)
+   Vault getVault(@PathParam("vaultName") String vaultName);
+
+   @Named("vault:delete")
+   @Path("/resourcegroups/{resourcegroup}/providers/Microsoft.KeyVault/vaults/{vaultName}")
+   @DELETE
+   @Fallback(FalseOnNotFoundOr404.class)
+   boolean deleteVault(@PathParam("vaultName") String vaultName);
+
+   @Named("vault:list_deleted_vaults")
+   @Path("/providers/Microsoft.KeyVault/deletedVaults")
+   @GET
+   @SelectJson("value")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   List<DeletedVault> listDeletedVaults();
+
+   @Named("vault:get_deleted")
+   @GET
+   @Path("/providers/Microsoft.KeyVault/locations/{location}/deletedVaults/{vaultName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   DeletedVault getDeletedVault(@PathParam("location") String location, @PathParam("vaultName") String vaultName);
+
+   @Named("vault:purge")
+   @POST
+   @Fallback(FalseOnNotFoundOr404.class)
+   @Path("/providers/Microsoft.KeyVault/locations/{location}/deletedVaults/{vaultName}/purge")
+   boolean purgeVault(@PathParam("location") String location, @PathParam("vaultName") String vaultName);
+
+   // Key operations
+   @Named("key:list")
+   @SelectJson("value")
+   @GET
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @Path("/keys")
+   @OAuthResource("https://vault.azure.net")
+   List<Key> listKeys(@EndpointParam URI keyVaultUri);
+
+   @Named("key:create")
+   @POST
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/keys/{keyName}/create")
+   @OAuthResource("https://vault.azure.net")
+   KeyBundle createKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName,
+         @Nullable @PayloadParam("attributes") KeyAttributes attributes,
+         @Nullable @PayloadParam("crv") String curveName, @Nullable @PayloadParam("key_ops") List<String> keyOps,
+         @PayloadParam("key_size") int keySize, @PayloadParam("kty") String keyType,
+         @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("key:import")
+   @PUT
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/keys/{keyName}")
+   @OAuthResource("https://vault.azure.net")
+   KeyBundle importKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName,
+         @PayloadParam("Hsm") boolean hsm, @Nullable @PayloadParam("attributes") KeyAttributes attributes,
+         @Nullable @PayloadParam("key") JsonWebKey key, @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("key:get")
+   @GET
+   @Path("/keys/{keyName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   KeyBundle getKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   @Named("key:delete")
+   @DELETE
+   @Path("/keys/{keyName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   DeletedKeyBundle deleteKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   @Named("key:get_versions")
+   @GET
+   @SelectJson("value")
+   @Path("/keys/{keyName}/versions")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<Key> getKeyVersions(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   @Named("key:update")
+   @PATCH
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/keys/{keyName}{keyVersion}")
+   @OAuthResource("https://vault.azure.net")
+   KeyBundle updateKey(@EndpointParam URI vaultBaseUrl,
+                       @PathParam("keyName") String keyName,
+                       @Nullable @PathParam("keyVersion") @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                       @Nullable @PayloadParam("attributes") KeyAttributes attributes,
+                       @Nullable @PayloadParam("key_ops") List<String> keyOps,
+                       @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("key:backup")
+   @POST
+   @SelectJson("value")
+   @Path("/keys/{keyName}/backup")
+   @OAuthResource("https://vault.azure.net")
+   String backupKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   @Named("key:restore")
+   @POST
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/keys/restore")
+   @OAuthResource("https://vault.azure.net")
+   KeyBundle restoreKey(@EndpointParam URI vaultBaseUrl, @PayloadParam("value") String keyInfo);
+
+   // Soft-delete key operations
+   @Named("key:list_deleted")
+   @GET
+   @SelectJson("value")
+   @Path("/deletedkeys")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<DeletedKeyBundle> listDeletedKeys(@EndpointParam URI vaultBaseUrl);
+
+   @Named("key:get_deleted")
+   @GET
+   @Path("/deletedkeys/{keyName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   DeletedKeyBundle getDeletedKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   @Named("key:recover_deleted")
+   @POST
+   @Path("/deletedkeys/{keyName}/recover")
+   @OAuthResource("https://vault.azure.net")
+   KeyBundle recoverDeletedKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   @Named("key:purge_deleted")
+   @DELETE
+   @Path("/deletedkeys/{keyName}")
+   @Fallback(FalseOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   boolean purgeDeletedKey(@EndpointParam URI vaultBaseUrl, @PathParam("keyName") String keyName);
+
+   // Key cryptographic operations
+   @Named("key:crypto_encrypt")
+   @POST
+   @Path("/keys/{keyName}{keyVersion}/encrypt")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   KeyOperationResult encrypt(@EndpointParam URI vaultBaseUrl,
+                              @PathParam("keyName") String keyName,
+                              @Nullable @PathParam("keyVersion") @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                              @PayloadParam("alg") String algorithm,
+                              @PayloadParam("value") String value);
+
+   @Named("key:crypto_decrypt")
+   @POST
+   @Path("/keys/{keyName}{keyVersion}/decrypt")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   KeyOperationResult decrypt(@EndpointParam URI vaultBaseUrl,
+                              @PathParam("keyName") String keyName,
+                              @Nullable @PathParam("keyVersion") @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                              @PayloadParam("alg") String algorithm,
+                              @PayloadParam("value") String value);
+
+   @Named("key:crypto_sign")
+   @POST
+   @Path("/keys/{keyName}{keyVersion}/sign")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   KeyOperationResult sign(@EndpointParam URI vaultBaseUrl,
+                           @PathParam("keyName") String keyName,
+                           @Nullable @PathParam("keyVersion") @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                           @PayloadParam("alg") String algorithm,
+                           @PayloadParam("value") String value);
+
+   @Named("key:crypto_verify")
+   @POST
+   @Path("/keys/{keyName}{keyVersion}/verify")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   boolean verify(@EndpointParam URI vaultBaseUrl,
+                  @PathParam("keyName") String keyName,
+                  @Nullable @PathParam("keyVersion")  @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                  @PayloadParam("alg") String algorithm,
+                  @PayloadParam("digest") String digest,
+                  @PayloadParam("value") String value);
+
+   @Named("key:crypto_wrap")
+   @POST
+   @Path("/keys/{keyName}{keyVersion}/wrapkey")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   KeyOperationResult wrap(@EndpointParam URI vaultBaseUrl,
+                           @PathParam("keyName") String keyName,
+                           @Nullable @PathParam("keyVersion") @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                           @PayloadParam("alg") String algorithm,
+                           @PayloadParam("value") String value);
+
+   @Named("key:crypto_unwrap")
+   @POST
+   @Path("/keys/{keyName}{keyVersion}/unwrapkey")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   KeyOperationResult unwrap(@EndpointParam URI vaultBaseUrl,
+                             @PathParam("keyName") String keyName,
+                             @Nullable @PathParam("keyVersion") @ParamParser(PrependSlashOrEmptyString.class) String keyVersion,
+                             @PayloadParam("alg") String algorithm,
+                             @PayloadParam("value") String value);
+
+   // Secret operations
+   @Named("secret:list")
+   @SelectJson("value")
+   @GET
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @Path("/secrets")
+   @OAuthResource("https://vault.azure.net")
+   List<Secret> listSecrets(@EndpointParam URI keyVaultUri);
+
+   @Named("secret:set")
+   @PUT
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/secrets/{secretName}")
+   @OAuthResource("https://vault.azure.net")
+   SecretBundle setSecret(@EndpointParam URI keyVaultUri, @PathParam("secretName") String secretName,
+         @Nullable @PayloadParam("attributes") SecretAttributes attributes,
+         @Nullable @PayloadParam("contentType") String contentType,
+         @Nullable @PayloadParam("tags") Map<String, String> tags, @PayloadParam("value") String value);
+
+   @Named("secret:get")
+   @GET
+   @Path("/secrets/{secretName}{secretVersion}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   SecretBundle getSecret(@EndpointParam URI vaultBaseUrl,
+                          @PathParam("secretName") String secretName,
+                          @Nullable @PathParam("secretVersion") @ParamParser(PrependSlashOrEmptyString.class) String secretVersion);
+
+   @Named("secret:delete")
+   @DELETE
+   @Path("/secrets/{secretName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   DeletedSecretBundle deleteSecret(@EndpointParam URI vaultBaseUrl, @PathParam("secretName") String secretName);
+
+   @Named("secret:get_versions")
+   @GET
+   @SelectJson("value")
+   @Path("/secrets/{secretName}/versions")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<Secret> getSecretVersions(@EndpointParam URI vaultBaseUrl, @PathParam("secretName") String secretName);
+
+   @Named("secret:update")
+   @PATCH
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/secrets/{secretName}{secretVersion}")
+   @OAuthResource("https://vault.azure.net")
+   SecretBundle updateSecret(@EndpointParam URI vaultBaseUrl,
+                             @PathParam("secretName") String secretName,
+                             @Nullable @PathParam("secretVersion") @ParamParser(PrependSlashOrEmptyString.class) String secretVersion,
+                             @Nullable @PayloadParam("attributes") SecretAttributes attributes,
+                             @Nullable @PayloadParam("contentType") String contentType,
+                             @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("secret:backup")
+   @POST
+   @SelectJson("value")
+   @Path("/secrets/{secretName}/backup")
+   @OAuthResource("https://vault.azure.net")
+   String backupSecret(@EndpointParam URI vaultBaseUrl, @PathParam("secretName") String secretName);
+
+   @Named("secret:restore")
+   @POST
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/secrets/restore")
+   @OAuthResource("https://vault.azure.net")
+   SecretBundle restoreSecret(@EndpointParam URI vaultBaseUrl, @PayloadParam("value") String secretInfo);
+
+   // Soft-delete secret operations
+   @Named("secret:list_deleted")
+   @GET
+   @SelectJson("value")
+   @Path("/deletedsecrets")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<DeletedSecretBundle> listDeletedSecrets(@EndpointParam URI vaultBaseUrl);
+
+   @Named("secret:get_deleted")
+   @GET
+   @Path("/deletedsecrets/{secretName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   DeletedSecretBundle getDeletedSecret(@EndpointParam URI vaultBaseUrl, @PathParam("secretName") String secretName);
+
+   @Named("secret:recover_deleted")
+   @POST
+   @Path("/deletedsecrets/{secretName}/recover")
+   @OAuthResource("https://vault.azure.net")
+   SecretBundle recoverDeletedSecret(@EndpointParam URI vaultBaseUrl, @PathParam("secretName") String secretName);
+
+   @Named("secret:purge_deleted")
+   @DELETE
+   @Path("/deletedsecrets/{secretName}")
+   @Fallback(FalseOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   boolean purgeDeletedSecret(@EndpointParam URI vaultBaseUrl, @PathParam("secretName") String secretName);
+
+   // Certificate operations
+   @Named("certificate:create")
+   @POST
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/certificates/{certificateName}/create")
+   @OAuthResource("https://vault.azure.net")
+   CertificateOperation createCertificate(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName,
+         @Nullable @PayloadParam("attributes") CertificateAttributes attributes,
+         @Nullable @PayloadParam("policy") CertificatePolicy policy,
+         @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("certificate:get")
+   @GET
+   @Path("/certificates/{certificateName}{certificateVersion}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   CertificateBundle getCertificate(@EndpointParam URI vaultBaseUrl,
+                                    @PathParam("certificateName") String certificateName,
+                                    @Nullable @PathParam("certificateVersion") @ParamParser(PrependSlashOrEmptyString.class) String certificateVersion);
+
+   @Named("certificate:delete")
+   @DELETE
+   @Path("/certificates/{certificateName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   DeletedCertificateBundle deleteCertificate(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:list")
+   @GET
+   @SelectJson("value")
+   @Path("/certificates")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<Certificate> getCertificates(@EndpointParam URI vaultBaseUrl);
+
+   @Named("certificate:list_deleted")
+   @GET
+   @SelectJson("value")
+   @Path("/deletedcertificates")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<DeletedCertificate> getDeletedCertificates(@EndpointParam URI vaultBaseUrl);
+
+   @Named("certificate:get_deleted")
+   @GET
+   @Path("/deletedcertificates/{certificateName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   DeletedCertificateBundle getDeletedCertificate(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:recover_deleted")
+   @POST
+   @Path("/deletedcertificates/{certificateName}/recover")
+   @OAuthResource("https://vault.azure.net")
+   CertificateBundle recoverDeletedCertificate(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:purge_deleted")
+   @DELETE
+   @Path("/deletedcertificates/{certificateName}")
+   @Fallback(FalseOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   boolean purgeDeletedCertificate(@EndpointParam URI vaultBaseUrl, @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:get_versions")
+   @GET
+   @SelectJson("value")
+   @Path("/certificates/{certificateName}/versions")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<Certificate> getCertificateVersions(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:update")
+   @PATCH
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/certificates/{certificateName}{certificateVersion}")
+   @OAuthResource("https://vault.azure.net")
+   CertificateBundle updateCertificate(@EndpointParam URI vaultBaseUrl,
+                                       @PathParam("certificateName") String certificateName,
+                                       @Nullable @PathParam("certificateVersion") @ParamParser(PrependSlashOrEmptyString.class) String certificateVersion,
+                                       @Nullable @PayloadParam("attributes") CertificateAttributes attributes,
+                                       @Nullable @PayloadParam("policy") CertificatePolicy policy,
+                                       @Nullable @PayloadParam("tags") Map<String, String> tags);
+
+   @Named("certificate:import")
+   @POST
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/certificates/{certificateName}/import")
+   @OAuthResource("https://vault.azure.net")
+   CertificateBundle importCertificate(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName,
+         @Nullable @PayloadParam("attributes") CertificateAttributes attributes,
+         @Nullable @PayloadParam("policy") CertificatePolicy policy, @Nullable @PayloadParam("pwd") String password,
+         @Nullable @PayloadParam("tags") Map<String, String> tags, @PayloadParam("value") String value);
+
+   @Named("certificate:merge")
+   @POST
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/certificates/{certificateName}/pending/merge")
+   @OAuthResource("https://vault.azure.net")
+   CertificateBundle mergeCertificate(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName,
+         @Nullable @PayloadParam("attributes") CertificateAttributes attributes,
+         @Nullable @PayloadParam("tags") Map<String, String> tags, @PayloadParam("x5c") List<String> value);
+
+   @Named("certificate:get_operation")
+   @GET
+   @Path("/certificates/{certificateName}/pending")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   CertificateOperation getCertificateOperation(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:update_operation")
+   @PATCH
+   @Path("/certificates/{certificateName}/pending")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   CertificateOperation updateCertificateOperation(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName,
+         @PayloadParam("cancellation_requested") boolean cancellationRequested);
+
+   @Named("certificate:delete_operation")
+   @DELETE
+   @Path("/certificates/{certificateName}/pending")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   CertificateOperation deleteCertificateOperation(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:set_issuer")
+   @PUT
+   @Path("/certificates/issuers/{issuerName}")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   IssuerBundle setCertificateIssuer(@EndpointParam URI vaultBaseUrl, @PathParam("issuerName") String issuerName,
+         @Nullable @PayloadParam("attributes") IssuerAttributes attributes,
+         @Nullable @PayloadParam("credentials") IssuerCredentials credentials,
+         @Nullable @PayloadParam("org_details") OrganizationDetails orgDetails,
+         @PayloadParam("provider") String provider);
+
+   @Named("certificate:get_issuers")
+   @GET
+   @SelectJson("value")
+   @Path("/certificates/issuers")
+   @Fallback(EmptyListOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   List<CertificateIssuer> getCertificateIssuers(@EndpointParam URI vaultBaseUrl);
+
+   @Named("certificate:get_issuer")
+   @GET
+   @Path("/certificates/issuers/{issuerName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   IssuerBundle getCertificateIssuer(@EndpointParam URI vaultBaseUrl, @PathParam("issuerName") String issuerName);
+
+   @Named("certificate:update_issuer")
+   @PATCH
+   @Path("/certificates/issuers/{issuerName}")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   IssuerBundle updateCertificateIssuer(@EndpointParam URI vaultBaseUrl, @PathParam("issuerName") String issuerName,
+         @Nullable @PayloadParam("attributes") IssuerAttributes attributes,
+         @Nullable @PayloadParam("credentials") IssuerCredentials credentials,
+         @Nullable @PayloadParam("org_details") OrganizationDetails orgDetails,
+         @PayloadParam("provider") String provider);
+
+   @Named("certificate:delete_issuer")
+   @DELETE
+   @Path("/certificates/issuers/{issuerName}")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   IssuerBundle deleteCertificateIssuer(@EndpointParam URI vaultBaseUrl, @PathParam("issuerName") String issuerName);
+
+   @Named("certificate:get_contacts")
+   @GET
+   @Path("/certificates/contacts")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   Contacts getCertificateContacts(@EndpointParam URI vaultBaseUrl);
+
+   @Named("certificate:set_contacts")
+   @PUT
+   @Path("/certificates/contacts")
+   @MapBinder(BindToJsonPayload.class)
+   @OAuthResource("https://vault.azure.net")
+   Contacts setCertificateContacts(@EndpointParam URI vaultBaseUrl, @PayloadParam("contacts") List<Contact> contacts);
+
+   @Named("certificate:delete_contacts")
+   @DELETE
+   @Path("/certificates/contacts")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   Contacts deleteCertificateContacts(@EndpointParam URI vaultBaseUrl);
+
+   @Named("certificate:get_policy")
+   @GET
+   @Path("/certificates/{certificateName}/policy")
+   @Fallback(NullOnNotFoundOr404.class)
+   @OAuthResource("https://vault.azure.net")
+   CertificatePolicy getCertificatePolicy(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName);
+
+   @Named("certificate:update_policy")
+   @PATCH
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/certificates/{certificateName}/policy")
+   @OAuthResource("https://vault.azure.net")
+   CertificatePolicy updateCertificatePolicy(@EndpointParam URI vaultBaseUrl,
+         @PathParam("certificateName") String certificateName,
+         @Nullable @PayloadParam("attributes") CertificateAttributes attributes,
+         @Nullable @PayloadParam("issuer") IssuerParameters issuer,
+         @Nullable @PayloadParam("key_props") KeyProperties keyProps,
+         @Nullable @PayloadParam("lifetime_actions") List<LifetimeAction> lifetimeActions,
+         @Nullable @PayloadParam("secret_props") SecretProperties secretProps,
+         @Nullable @PayloadParam("x509_props") X509CertificateProperties x509Props);
+}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a2dee2f8/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java
index 5cf4239..adcde2b 100644
--- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java
+++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LoadBalancerApiLiveTest.java
@@ -39,7 +39,7 @@ import java.util.Properties;
 import java.util.Set;
 
 import org.jclouds.azurecompute.arm.AzureComputeApi;
-import org.jclouds.azurecompute.arm.compute.config.AzureComputeServiceContextModule.PublicIpAvailablePredicateFactory;
+import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.PublicIpAvailablePredicateFactory;
 import org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndName;
 import org.jclouds.azurecompute.arm.domain.AvailabilitySet;
 import org.jclouds.azurecompute.arm.domain.AvailabilitySet.AvailabilitySetProperties;