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 ec7d39942..bd7383605 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 @@ -145,8 +145,7 @@ public class BoshDeploymentManifestSchema implements YamlSchema { YAtomicType t_network_name = f.yenumFromDynamicValues("NetworkName", (dc) -> cloudConfigProvider.getModel(dc).getNetworkNames()); - YAtomicType t_disk_type = f.yatomic("DiskType"); //TODO: resolve from 'cloud config' https://www.pivotaltracker.com/story/show/148704001 - t_disk_type.parseWith(ValueParsers.NE_STRING); + 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); 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 31e55e053..96f1536bb 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 @@ -88,6 +88,12 @@ public class BoshCommandCloudConfigProvider implements DynamicModelProvider getDiskTypes() { + return getNames(DISK_TYPES); + } + 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 a4e6204a8..f596cac32 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 @@ -19,4 +19,5 @@ public interface CloudConfigModel { Collection getVMTypes(); Collection getNetworkNames(); Collection getAvailabilityZones(); + Collection getDiskTypes(); } 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 1a98f5c00..44a97e9b1 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 @@ -70,7 +70,7 @@ public class BoshEditorTest { " vm_type: large\n" + " vm_extensions: [public-lbs]\n" + " stemcell: default\n" + - " persistent_disk_type: medium\n" + + " persistent_disk_type: large\n" + " networks:\n" + " - name: default\n" + "- name: redis-slave\n" + @@ -995,6 +995,41 @@ public class BoshEditorTest { ); } + @Test public void reconcilePersistentDiskType() throws Exception { + Editor editor = harness.newEditor( + "name: my-first-deployment\n" + + "instance_groups:\n" + + "- name: my-server1\n" + + " persistent_disk_type: default\n" + + "- name: my-server2\n" + + " persistent_disk_type: bogus\n" + + "- name: my-server3\n" + + " persistent_disk_type: large\n" + ); + editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY); + editor.assertProblems("bogus|unknown 'DiskType'. Valid values are: [default, large]"); + } + + @Test public void reconcilePersistentDiskType2() throws Exception { + cloudConfigProvider.readWith(() -> + "disk_types:\n" + + "- name: small-disk\n" + + "- name: large-disk\n" + ); + Editor editor = harness.newEditor( + "name: my-first-deployment\n" + + "instance_groups:\n" + + "- name: my-server1\n" + + " persistent_disk_type: small-disk\n" + + "- name: my-server2\n" + + " persistent_disk_type: bogus\n" + + "- name: my-server3\n" + + " persistent_disk_type: large-disk\n" + ); + editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY); + editor.assertProblems("bogus|unknown 'DiskType'. Valid values are: [small-disk, large-disk]"); + } + @Test public void gotoReleaseDefinition() throws Exception { Editor editor = harness.newEditor( "name: foo\n" +