Add disk_types sub-properties to CloudConfig schema
This commit is contained in:
@@ -41,7 +41,9 @@ public class BoshCloudConfigSchema extends SchemaSupport implements YamlSchema {
|
||||
private final YType t_vm_type_ref;
|
||||
private final YType t_vm_type_def;
|
||||
private final YType t_network_ref;
|
||||
private AbstractType t_network_def;
|
||||
private final YType t_network_def;
|
||||
private final YType t_disk_type_def;
|
||||
private final YType t_disk_type_ref;
|
||||
private Collection<YType> definitionTypes;
|
||||
private final Lazy<Collection<Pair<YType, YType>>> defAndRefTypes = new Lazy<>();
|
||||
private AbstractType t_any;
|
||||
@@ -80,6 +82,11 @@ public class BoshCloudConfigSchema extends SchemaSupport implements YamlSchema {
|
||||
t_ip_range = t_ne_string; //TODO? Syntax for ip ranges like 10.10.0.0/22 ?
|
||||
t_ip_address_or_range = t_ne_string; //TODO?
|
||||
|
||||
t_disk_type_def = f.yatomic("DiskTypeName").parseWith(ValueParsers.NE_STRING);
|
||||
t_disk_type_ref = f.yenumFromDynamicValues("DiskTypeName",(dc) -> PartialCollection.compute(() ->
|
||||
models.astTypes.getDefinedNames(dc, t_disk_type_def)
|
||||
));
|
||||
|
||||
YType t_network = createNetworkBlockSchema(models);
|
||||
|
||||
YBeanType t_az = f.ybean("AZ");
|
||||
@@ -97,12 +104,17 @@ public class BoshCloudConfigSchema extends SchemaSupport implements YamlSchema {
|
||||
addProp(t_vm_type, "name", t_vm_type_def).isPrimary(true);
|
||||
addProp(t_vm_type, "cloud_properties", t_params);
|
||||
|
||||
YBeanType t_disk_type = f.ybean("DiskType");
|
||||
addProp(t_disk_type, "name", t_disk_type_def).isPrimary(true);
|
||||
addProp(t_disk_type, "disk_size", t_pos_integer).isRequired(true);
|
||||
addProp(t_disk_type, "cloud_properties", t_params);
|
||||
|
||||
this.toplevelType = f.ybean("CloudConfig");
|
||||
addProp(toplevelType, "azs", f.yseq(t_az)).isRequired(true);
|
||||
addProp(toplevelType, "networks", f.yseq(t_network)).isRequired(true);
|
||||
addProp(toplevelType, "vm_types", f.yseq(t_vm_type)).isRequired(true);
|
||||
addProp(toplevelType, "vm_extensions", t_any);
|
||||
addProp(toplevelType, "disk_types", t_any).isRequired(true);
|
||||
addProp(toplevelType, "vm_extensions", f.yseq(t_any));
|
||||
addProp(toplevelType, "disk_types", f.yseq(t_disk_type)).isRequired(true);
|
||||
addProp(toplevelType, "compilation", t_compilation).isRequired(true);
|
||||
|
||||
ASTTypeCache astTypes = models.astTypes;
|
||||
@@ -186,7 +198,8 @@ public class BoshCloudConfigSchema extends SchemaSupport implements YamlSchema {
|
||||
return defAndRefTypes.load(() -> ImmutableList.of(
|
||||
Pair.of(t_vm_type_def, t_vm_type_ref),
|
||||
Pair.of(t_network_def, t_network_ref),
|
||||
Pair.of(t_az_def, t_az_ref)
|
||||
Pair.of(t_az_def, t_az_ref),
|
||||
Pair.of(t_disk_type_def, t_disk_type_ref)
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
Describes any IaaS-specific properties needed to create disks. Examples: `type`, `iops`. Default is `{}` (empty Hash).
|
||||
|
||||
CPI Specific `cloud_properties`
|
||||
|
||||
- See [AWS CPI disk type cloud properties](https://bosh.io/docs/aws-cpi.html#disk-pools)
|
||||
- See [Azure CPI disk type cloud properties](https://bosh.io/docs/azure-cpi.html#disk-pools)
|
||||
- See [OpenStack CPI disk type cloud properties](https://bosh.io/docs/openstack-cpi.html#disk-pools)
|
||||
- See [Softlayer CPI disk type cloud properties](https://bosh.io/docs/softlayer-cpi.html#disk-pools)
|
||||
- See [Google Cloud Platform CPI disk type cloud properties](https://bosh.io/docs/google-cpi.html#disk-pools)
|
||||
- See [vSphere CPI disk type cloud properties](https://bosh.io/docs/vsphere-cpi.html#disk-pools)
|
||||
- See [vCloud CPI disk type cloud properties](https://bosh.io/docs/vcloud-cpi.html#disk-pools)
|
||||
@@ -0,0 +1 @@
|
||||
*Require*. Specifies the disk size. `disk_size` must be a positive integer. BOSH creates a [persistent disk](https://bosh.io/docs/persistent-disks.html) of that size in megabytes and attaches it to each job instance VM.
|
||||
@@ -0,0 +1 @@
|
||||
*Required*. A unique name used to identify and reference the disk type
|
||||
@@ -2358,7 +2358,7 @@ public class BoshEditorTest {
|
||||
editor.assertProblems("bad-network|unknown 'NetworkName'");
|
||||
}
|
||||
|
||||
@Test public void cloudconfig_network_azs_ca() throws Exception {
|
||||
@Test public void cloudconfig_azs() throws Exception {
|
||||
Editor editor = harness.newEditor(LanguageId.BOSH_CLOUD_CONFIG,
|
||||
"azs:\n" +
|
||||
"- <*>"
|
||||
@@ -2386,4 +2386,40 @@ public class BoshEditorTest {
|
||||
editor.assertHoverContains("cloud_properties", "Describes any IaaS-specific properties needed to associated with AZ");
|
||||
}
|
||||
|
||||
@Test public void cloudconfig_diskt_types() throws Exception {
|
||||
Editor editor = harness.newEditor(LanguageId.BOSH_CLOUD_CONFIG,
|
||||
"disk_types:\n" +
|
||||
"- <*>"
|
||||
);
|
||||
editor.assertContextualCompletions("<*>",
|
||||
//snippet:
|
||||
"name: $1\n" +
|
||||
" disk_size: $2<*>"
|
||||
,
|
||||
//non-snippet:
|
||||
"name: <*>"
|
||||
);
|
||||
|
||||
editor = harness.newEditor(LanguageId.BOSH_CLOUD_CONFIG,
|
||||
"disk_types:\n" +
|
||||
"- name: massive-disk\n" +
|
||||
" <*>"
|
||||
);
|
||||
editor.assertContextualCompletions(PLAIN_COMPLETION, "<*>",
|
||||
"cloud_properties:\n <*>",
|
||||
"disk_size: <*>"
|
||||
);
|
||||
|
||||
editor = harness.newEditor(LanguageId.BOSH_CLOUD_CONFIG,
|
||||
"disk_types:\n" +
|
||||
"- name: default\n" +
|
||||
" disk_size: 2\n" +
|
||||
" cloud_properties:\n" +
|
||||
" type: gp2\n"
|
||||
);
|
||||
editor.assertHoverContains("name", "A unique name used to identify and reference the disk type");
|
||||
editor.assertHoverContains("disk_size", "size in megabytes");
|
||||
editor.assertHoverContains("cloud_properties", "Describes any IaaS-specific properties needed to create disks");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ public class ValueParsers {
|
||||
return new ValueParser() {
|
||||
@Override
|
||||
public Object parse(String str) throws Exception {
|
||||
str = str.replace("_", ""); //Tolerate and ignore underscores in integers.
|
||||
int value = Integer.parseInt(str);
|
||||
if (lowerBound!=null && value<lowerBound) {
|
||||
if (lowerBound==0) {
|
||||
|
||||
Reference in New Issue
Block a user