From 1564c338b2b44f3ae899acf21f569414b78c68d7 Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Tue, 11 Jul 2017 17:58:27 -0700 Subject: [PATCH] More hoverdocs for nested/nested props of `instance_groups` --- .../bosh/BoshDeploymentManifestSchema.java | 9 ++- .../desc/InstanceGroupEnv/password.md | 1 + .../src/main/resources/desc/Job/consumes.md | 1 + .../src/main/resources/desc/Job/name.md | 1 + .../src/main/resources/desc/Job/properties.md | 1 + .../src/main/resources/desc/Job/provides.md | 1 + .../src/main/resources/desc/Job/release.md | 1 + .../main/resources/desc/Network/default.md | 1 + .../src/main/resources/desc/Network/name.md | 1 + .../main/resources/desc/Network/static_ips.md | 1 + .../ide/vscode/concourse/BoshEditorTest.java | 69 ++++++++++++------- 11 files changed, 62 insertions(+), 25 deletions(-) create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/InstanceGroupEnv/password.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Job/consumes.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Job/name.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Job/properties.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Job/provides.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Job/release.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Network/default.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Network/name.md create mode 100644 headless-services/bosh-language-server/src/main/resources/desc/Network/static_ips.md 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 69354bd12..e5281771d 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 @@ -61,6 +61,9 @@ public class BoshDeploymentManifestSchema implements YamlSchema { "To achieve similar safety make sure to give unique deployment names across environments." ); + YAtomicType t_ip_address = f.yatomic("IPAddress"); //TODO: some kind of checking? + t_ip_address.parseWith(ValueParsers.NE_STRING); + YAtomicType t_network_name = f.yatomic("NetworkName"); //TODO: resolve from 'cloud config' https://www.pivotaltracker.com/story/show/148712155 t_network_name.parseWith(ValueParsers.NE_STRING); @@ -81,9 +84,11 @@ public class BoshDeploymentManifestSchema implements YamlSchema { YBeanType t_network = f.ybean("Network"); addProp(t_network, "name", t_network_name).isRequired(true); + addProp(t_network, "static_ips", f.yseq(t_ip_address)); + addProp(t_network, "default", f.yseq(t_ne_string)); //TODO: Can we determine the set of valid values? How? YBeanType t_instance_group_env = f.ybean("InstanceGroupEnv"); - addProp(t_instance_group_env, "npsh", t_params); + addProp(t_instance_group_env, "bosh", t_params); addProp(t_instance_group_env, "password", t_ne_string); YAtomicType t_version = f.yatomic("Version"); @@ -107,7 +112,7 @@ public class BoshDeploymentManifestSchema implements YamlSchema { addProp(TOPLEVEL_TYPE, "update", t_update).isRequired(true); YBeanType t_job = f.ybean("Job"); - addProp(t_job, "name", t_ne_string).isPrimary(true); + addProp(t_job, "name", t_ne_string).isRequired(true); addProp(t_job, "release", t_ne_string).isRequired(true); addProp(t_job, "consumes", t_params); addProp(t_job, "provides", t_params); diff --git a/headless-services/bosh-language-server/src/main/resources/desc/InstanceGroupEnv/password.md b/headless-services/bosh-language-server/src/main/resources/desc/InstanceGroupEnv/password.md new file mode 100644 index 000000000..72d5ca760 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/InstanceGroupEnv/password.md @@ -0,0 +1 @@ +*Optional*. Crypted password for `vcap/root` user (will be placed into `/etc/shadow` on Linux). \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Job/consumes.md b/headless-services/bosh-language-server/src/main/resources/desc/Job/consumes.md new file mode 100644 index 000000000..b211822d3 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Job/consumes.md @@ -0,0 +1 @@ +*Optional*. Links consumed by the job. [Read more about link configuration](https://bosh.io/docs/links.html#deployment) \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Job/name.md b/headless-services/bosh-language-server/src/main/resources/desc/Job/name.md new file mode 100644 index 000000000..2848e8645 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Job/name.md @@ -0,0 +1 @@ +*Required*. The job name. \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Job/properties.md b/headless-services/bosh-language-server/src/main/resources/desc/Job/properties.md new file mode 100644 index 000000000..fb2ee4d76 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Job/properties.md @@ -0,0 +1 @@ +*Required*. Specifies job properties. Properties allow BOSH to configure jobs to a specific environment. `properties` defined in a Job block are accessible only to that job. Only properties specified here will be provided to the job. \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Job/provides.md b/headless-services/bosh-language-server/src/main/resources/desc/Job/provides.md new file mode 100644 index 000000000..170252147 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Job/provides.md @@ -0,0 +1 @@ +*Optional*. Links provided by the job. [Read more about link configuration](https://bosh.io/docs/links.html#deployment) \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Job/release.md b/headless-services/bosh-language-server/src/main/resources/desc/Job/release.md new file mode 100644 index 000000000..06e99e724 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Job/release.md @@ -0,0 +1 @@ +*Required*. The release where the job exists \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Network/default.md b/headless-services/bosh-language-server/src/main/resources/desc/Network/default.md new file mode 100644 index 000000000..03e0b92e9 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Network/default.md @@ -0,0 +1 @@ +*Optional*. Specifies which network components (DNS, Gateway) BOSH populates by default from this network. This property is required if more than one network is specified. \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Network/name.md b/headless-services/bosh-language-server/src/main/resources/desc/Network/name.md new file mode 100644 index 000000000..d8b6e12b3 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Network/name.md @@ -0,0 +1 @@ +*Required*. A valid network name from the cloud config. \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/main/resources/desc/Network/static_ips.md b/headless-services/bosh-language-server/src/main/resources/desc/Network/static_ips.md new file mode 100644 index 000000000..eaced2217 --- /dev/null +++ b/headless-services/bosh-language-server/src/main/resources/desc/Network/static_ips.md @@ -0,0 +1 @@ +*Optional*. Array of IP addresses reserved for the instances on the network. \ No newline at end of file diff --git a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/concourse/BoshEditorTest.java b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/concourse/BoshEditorTest.java index 0a4d1830f..bf05b89a7 100644 --- a/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/concourse/BoshEditorTest.java +++ b/headless-services/bosh-language-server/src/test/java/org/springframework/ide/vscode/concourse/BoshEditorTest.java @@ -240,20 +240,6 @@ public class BoshEditorTest { editor.assertCompletionLabels("latest"); } - @Test public void temp_instanceGroupsCompletions() throws Exception { - Editor editor = harness.newEditor( - "instance_groups:\n" + - "- name: foo-group\n" + - " job<*>" - ); - editor.assertCompletions( - "instance_groups:\n" + - "- name: foo-group\n" + - " jobs:\n" + - " - name: <*>" - ); - } - @Test public void instanceGroupsCompletions() throws Exception { Editor editor = harness.newEditor( "instance_groups:\n" + @@ -287,7 +273,7 @@ public class BoshEditorTest { "instance_groups:\n" + "- name: foo-group\n" + " jobs:\n" + - " - name: <*>" + " - <*>" , // ============= "instance_groups:\n" + "- name: foo-group\n" + @@ -386,18 +372,55 @@ public class BoshEditorTest { editor.assertHoverContains("env", "Specifies advanced BOSH Agent configuration"); } - @Ignore @Test public void instanceGroups_job_hovers() throws Exception { - //For the nested properties of instance_groups.jobs - throw new IllegalStateException("Implement a test please!"); + @Test public void instanceGroups_job_hovers() throws Exception { + Editor editor = harness.newEditor( + "name: foo\n" + + "instance_groups:\n" + + "- name: foo\n" + + " jobs:\n" + + " - name: the-job\n" + + " release: the-jobs-release\n" + + " properties:\n" + + " blah: blah\n" + + " consumes:\n" + + " blah: blah \n" + + " provides:\n" + + " blah: blah\n" + ); + + editor.assertHoverContains("name", 3, "The job name"); + editor.assertHoverContains("release", "The release where the job exists"); + editor.assertHoverContains("consumes", "Links consumed by the job"); + editor.assertHoverContains("provides", "Links provided by the job"); + editor.assertHoverContains("properties", "Specifies job properties"); } - @Ignore @Test public void instanceGroups_network_hovers() throws Exception { - //For the nested properties of instance_groups.networks - throw new IllegalStateException("Implement a test please!"); + @Test public void instanceGroups_network_hovers() throws Exception { + Editor editor = harness.newEditor( + "name: foo\n" + + "instance_groups:\n" + + "- name: foo\n" + + " networks:\n" + + " - name: the-network\n" + + " static_ips: []\n" + + " default: []\n" + ); + editor.assertHoverContains("name", 3, "A valid network name from the cloud config"); + editor.assertHoverContains("static_ips", "Array of IP addresses"); + editor.assertHoverContains("default", "Specifies which network components"); } - @Ignore @Test public void instanceGroups_env_hovers() throws Exception { - throw new IllegalStateException("Implement a test please!"); + @Test public void instanceGroups_env_hovers() throws Exception { + Editor editor = harness.newEditor( + "name: foo\n" + + "instance_groups:\n" + + "- name: foo\n" + + " env:\n" + + " bosh: {}\n" + + " password: []\n" + ); + editor.assertHoverContains("bosh", "no description"); + editor.assertHoverContains("password", "Crypted password"); } }