Reconcile and content assist for ReleaseName references

This commit is contained in:
Kris De Volder
2017-07-18 10:52:33 -07:00
parent 2ffaed4436
commit fc1a0fec46
7 changed files with 154 additions and 25 deletions

View File

@@ -73,6 +73,7 @@ public class BoshDeploymentManifestSchema implements YamlSchema {
private YType t_instance_group_name_def;
private YType t_stemcell_alias_name_def;
private YType t_release_name_def;
private YType t_release_name_ref;
private YType t_var_name_def;
private final ASTTypeCache astTypes;
@@ -114,10 +115,13 @@ public class BoshDeploymentManifestSchema implements YamlSchema {
t_instance_group_name_def = f.yatomic("InstanceGroupName")
.parseWith(ValueParsers.NE_STRING);
t_stemcell_alias_name_def = f.yatomic("StemcellAliasName")
.parseWith(ValueParsers.NE_STRING);
t_release_name_def = f.yatomic("ReleaseName")
.parseWith(ValueParsers.NE_STRING);
t_release_name_ref = f.yenumFromDynamicValues("ReleaseName", (dc) -> astTypes.getDefinedNames(dc, t_release_name_def));
t_var_name_def = f.yatomic("VariableName")
.parseWith(ValueParsers.NE_STRING);
@@ -167,8 +171,9 @@ public class BoshDeploymentManifestSchema implements YamlSchema {
addProp(t_release, "url", t_url);
addProp(t_release, "sha1", t_ne_string);
addProp(v2Schema, "releases", f.yseq(t_release)).isRequired(true);
t_release.require(Constraints.requireAtLeastOneOf("url", "version")); //allthough docs seem to imply you shouldn't define both url and version..
//... it seems bosh tolerates it.
t_release.require(Constraints.requireAtLeastOneOf("url", "version"));
// ^^^^^^^ allthough docs seem to imply you shouldn't
// define both url and version it seems that bosh tolerates it.
t_release.require(BoshConstraints.SHA1_REQUIRED_FOR_HTTP_URL);
YBeanType t_stemcell = f.ybean("Stemcell");
@@ -189,7 +194,7 @@ public class BoshDeploymentManifestSchema implements YamlSchema {
YBeanType t_job = f.ybean("Job");
addProp(t_job, "name", t_ne_string).isRequired(true);
addProp(t_job, "release", t_ne_string).isRequired(true);
addProp(t_job, "release", t_release_name_ref).isRequired(true);
addProp(t_job, "consumes", t_params);
addProp(t_job, "provides", t_params);
addProp(t_job, "properties", t_params);

View File

@@ -739,4 +739,48 @@ public class BoshEditorTest {
);
}
}
@Test public void contentAssistReleaseReference() throws Exception {
Editor editor = harness.newEditor(
"name: foo\n" +
"instance_groups: \n" +
"- name: some-server\n" +
" jobs:\n" +
" - release: <*>\n" +
"releases: \n" +
"- name: some-release\n" +
" url: https://release-hub.info/some-release.tar.gz?version=99.3.2\n" +
" sha1: asddsfsd\n" +
"- name: other-release\n" +
" url: https://release-hub.info/other-release.tar.gz?version=99.3.2\n" +
" sha1: asddsfsd\n"
);
editor.assertContextualCompletions("<*>"
, // ==>
"other-release<*>", "some-release<*>"
);
}
@Test public void reconcileReleaseReference() throws Exception {
Editor editor = harness.newEditor(
"name: foo\n" +
"instance_groups: \n" +
"- name: some-server\n" +
" jobs:\n" +
" - release: some-release\n" +
"- name: some-other-server\n" +
" jobs:\n" +
" - release: bogus-release\n" +
"releases: \n" +
"- name: some-release\n" +
" url: https://release-hub.info/some-release.tar.gz?version=99.3.2\n" +
" sha1: asddsfsd\n" +
"- name: other-release\n" +
" url: https://release-hub.info/other-release.tar.gz?version=99.3.2\n" +
" sha1: asddsfsd\n"
);
editor.ignoreProblem(YamlSchemaProblems.MISSING_PROPERTY);
editor.assertProblems(
"bogus-release|unknown 'ReleaseName'. Valid values are: [other-release, some-release]"
);
}
}