From 9c43c54acf62c1301bb8e87735e3cf9b1ad7c726 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Thu, 20 Jul 2017 11:11:02 -0700 Subject: [PATCH] Dynamic CA and reconcile for vm_extensions --- .../bosh/BoshDeploymentManifestSchema.java | 6 +--- .../BoshCommandCloudConfigProvider.java | 21 ++++++++---- .../vscode/bosh/models/CloudConfigModel.java | 5 +-- .../ide/vscode/bosh/BoshEditorTest.java | 32 +++++++++++++++++++ 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java index bd7383605..880c5e0e4 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/BoshDeploymentManifestSchema.java @@ -144,12 +144,8 @@ public class BoshDeploymentManifestSchema implements YamlSchema { t_url.parseWith(BoshValueParsers.url("http", "https", "file")); YAtomicType t_network_name = f.yenumFromDynamicValues("NetworkName", (dc) -> cloudConfigProvider.getModel(dc).getNetworkNames()); - YAtomicType t_disk_type = f.yenumFromDynamicValues("DiskType", (dc) -> cloudConfigProvider.getModel(dc).getDiskTypes()); - - YAtomicType t_vm_extension = f.yatomic("VMExtension"); //TODO: resolve dynamically from 'cloud config' ? https://www.pivotaltracker.com/story/show/148703877 - t_vm_extension.parseWith(ValueParsers.NE_STRING); - + YAtomicType t_vm_extension = f.yenumFromDynamicValues("VMExtension", (dc) -> cloudConfigProvider.getModel(dc).getVMExtensions()); YAtomicType t_vm_type = f.yenumFromDynamicValues("VMType", (dc) -> cloudConfigProvider.getModel(dc).getVMTypes()); YAtomicType t_az = f.yenumFromDynamicValues("AvailabilityZone", (dc) -> cloudConfigProvider.getModel(dc).getAvailabilityZones()); diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandCloudConfigProvider.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandCloudConfigProvider.java index 96f1536bb..0d2021751 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandCloudConfigProvider.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/BoshCommandCloudConfigProvider.java @@ -70,29 +70,31 @@ public class BoshCommandCloudConfigProvider implements DynamicModelProvider getVMExtensions() { + return getNames(VM_EXTENSIONS); + } + private Collection getNames(YamlTraversal namesPath) { return namesPath.traverseAmbiguously(ast) .flatMap(nameNode -> { diff --git a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/CloudConfigModel.java b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/CloudConfigModel.java index f596cac32..0d0f5ab7f 100644 --- a/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/CloudConfigModel.java +++ b/headless-services/bosh-language-server/src/main/java/org/springframework/ide/vscode/bosh/models/CloudConfigModel.java @@ -18,6 +18,7 @@ import java.util.Collection; public interface CloudConfigModel { Collection getVMTypes(); Collection getNetworkNames(); - Collection getAvailabilityZones(); - Collection getDiskTypes(); + Collection getAvailabilityZones(); + Collection getDiskTypes(); + Collection getVMExtensions(); } diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java index 44a97e9b1..071b916d4 100644 --- a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/bosh/BoshEditorTest.java @@ -43,6 +43,7 @@ public class BoshEditorTest { } @Test public void toplevelV2PropertyNamesKnown() throws Exception { + cloudConfigProvider.readWith(() -> { throw new IOException("Can't read cloud config"); }); Editor editor = harness.newEditor( "name: some-name\n" + "director_uuid: cf8dc1fc-9c42-4ffc-96f1-fbad983a6ce6\n" + @@ -1030,6 +1031,37 @@ public class BoshEditorTest { editor.assertProblems("bogus|unknown 'DiskType'. Valid values are: [small-disk, large-disk]"); } + @Test public void reconcileVMExtensions() throws Exception { + Editor editor = harness.newEditor( + "name: my-first-deployment\n" + + "instance_groups:\n" + + "- name: my-server\n" + + " vm_extensions:\n" + + " - blah" + ); + editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY); + editor.assertProblems("blah|unknown 'VMExtension'. Valid values are: []"); + } + + @Test public void reconcileVMExtensions2() throws Exception { + cloudConfigProvider.readWith(() -> + "vm_extensions:\n" + + "- name: pub-lbs\n" + + " cloud_properties:\n" + + " elbs: [main]" + ); + Editor editor = harness.newEditor( + "name: my-first-deployment\n" + + "instance_groups:\n" + + "- name: my-server\n" + + " vm_extensions:\n" + + " - pub-lbs\n" + + " - bogus" + ); + editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY); + editor.assertProblems("bogus|unknown 'VMExtension'. Valid values are: [pub-lbs]"); + } + @Test public void gotoReleaseDefinition() throws Exception { Editor editor = harness.newEditor( "name: foo\n" +