|
176 | 176 | See doc/source/configuration.rst |
177 | 177 | """ |
178 | 178 |
|
| 179 | +VAGRANT_VALID_NETNAMES = ["private_network", "public_network", "forwarded_port"] |
179 | 180 | VAGRANTFILE_TEMPLATE = """ |
180 | 181 | {% macro ruby_format(value) %} |
181 | 182 | {% if value is boolean %} |
|
250 | 251 |
|
251 | 252 | # Network |
252 | 253 | {% for n in instance.networks %} |
253 | | - c.vm.network "{{ n.name }}", {{ dict2args(n.options) | trim }} |
| 254 | + c.vm.network "{{ n.name }}"{% if 'options' in n %}, {{ dict2args(n.options) | trim }}{% endif %} |
254 | 255 | {% endfor %} |
255 | 256 | {% endif %} |
256 | 257 | {% if instance.instance_raw_config_args is not none %} |
@@ -618,10 +619,19 @@ def _get_instance_vagrant_config_dict(self, instance): |
618 | 619 | networks = [] |
619 | 620 | if "interfaces" in instance: |
620 | 621 | for iface in instance["interfaces"]: |
621 | | - net = {} |
622 | | - net["name"] = iface["network_name"] |
623 | | - iface.pop("network_name") |
624 | | - net["options"] = iface |
| 622 | + net_name = iface.get("network_name") |
| 623 | + if net_name is None: |
| 624 | + self._module.fail_json( |
| 625 | + msg="Each interface must have a 'network_name' key.", |
| 626 | + ) |
| 627 | + if net_name not in VAGRANT_VALID_NETNAMES: |
| 628 | + self._module.fail_json( |
| 629 | + msg=f"Invalid network_name value {net_name}.", |
| 630 | + ) |
| 631 | + net = {"name": net_name} |
| 632 | + options = {k: v for k, v in iface.items() if k != "network_name"} |
| 633 | + if options: |
| 634 | + net["options"] = options |
625 | 635 | networks.append(net) |
626 | 636 |
|
627 | 637 | # compat |
|
0 commit comments