Compute: drive NW configuration via software conf
authorDan Prince <dprince@redhat.com>
Thu, 23 Oct 2014 19:17:49 +0000 (15:17 -0400)
committerDan Prince <dprince@redhat.com>
Sat, 20 Dec 2014 02:24:56 +0000 (21:24 -0500)
This example extends the compute software configuration
so that heat metadata is used to model the os-net-config
YAML (ultimately JSON) directly. The existing
os-net-config element already supports this format.

Configuring the physical network layer in this manner
would supplant the ever growing list of Heat parameters
that we have and is something that could be automatically
generated via tuskar.

The default is to use net-config-noop.yaml which
will pass no config metadata into the os-net-config
element which will essentially disable it in favor
of using parameters w/ init-neutron-ovs.

Change-Id: I30f325b1751caaef5624537e63ee27c2e418d5c8

compute.yaml
net-config-bond.yaml [new file with mode: 0644]
net-config-bridge.yaml [new file with mode: 0644]
net-config-noop.yaml [new file with mode: 0644]
overcloud-resource-registry.yaml

index ae02fef..145b61c 100644 (file)
@@ -246,6 +246,19 @@ resources:
         - network: ctlplane
       user_data_format: SOFTWARE_CONFIG
 
+  NetworkConfig:
+    type: OS::TripleO::Net::SoftwareConfig
+
+  NetworkDeployment:
+    type: OS::TripleO::SoftwareDeployment
+    properties:
+      signal_transport: NO_SIGNAL
+      config: {get_attr: [NetworkConfig, config_id]}
+      server: {get_resource: NovaCompute}
+      input_values:
+        bridge_name: {get_param: NeutronPhysicalBridge}
+        interface_name: {get_param: NeutronPublicInterface}
+
   NovaComputeConfig:
     type: OS::TripleO::Compute::SoftwareConfig
 
diff --git a/net-config-bond.yaml b/net-config-bond.yaml
new file mode 100644 (file)
index 0000000..3518dba
--- /dev/null
@@ -0,0 +1,44 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Software Config to drive os-net-config with 2 bonded nics on a bridge.
+
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        os_net_config:
+          network_config:
+            -
+              type: ovs_bridge
+              name: {get_input: bridge_name}
+              use_dhcp: true
+              # Can't do this yet: https://bugs.launchpad.net/heat/+bug/1344284
+              #ovs_extra:
+              #  - list_join:
+              #    - ' '
+              #    - - br-set-external-id
+              #      - {get_input: bridge_name}
+              #      - bridge-id
+              #      - {get_input: bridge_name}
+              members:
+                -
+                  type: ovs_bond
+                  name: bond1
+                  use_dhcp: true
+                  members:
+                    # os-net-config translates nic1 => em1 (for example)
+                    -
+                      type: interface
+                      name: nic1
+                    -
+                      type: interface
+                      name: nic2
+
+outputs:
+  config_id:
+    description: The ID of the OsNetConfigImpl resource.
+    value:
+      {get_resource: OsNetConfigImpl}
diff --git a/net-config-bridge.yaml b/net-config-bridge.yaml
new file mode 100644 (file)
index 0000000..d1faa5d
--- /dev/null
@@ -0,0 +1,37 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Software Config to drive os-net-config for a simple bridge.
+
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        os_net_config:
+          network_config:
+            -
+              type: ovs_bridge
+              name: {get_input: bridge_name}
+              use_dhcp: true
+              # Can't do this yet: https://bugs.launchpad.net/heat/+bug/1344284
+              #ovs_extra:
+              #  - list_join:
+              #    - ' '
+              #    - - br-set-external-id
+              #      - {get_input: bridge_name}
+              #      - bridge-id
+              #      - {get_input: bridge_name}
+              members:
+                -
+                  type: interface
+                  name: {get_input: interface_name}
+                  # force the MAC address of the bridge to this interface
+                  primary: true
+
+outputs:
+  config_id:
+    description: The ID of the OsNetConfigImpl resource.
+    value:
+      {get_resource: OsNetConfigImpl}
diff --git a/net-config-noop.yaml b/net-config-noop.yaml
new file mode 100644 (file)
index 0000000..a3b1d1a
--- /dev/null
@@ -0,0 +1,18 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Software Config to no-op for os-net-config. Using this will allow you
+  to use the parameter driven (init-neutron-ovs) configuration instead.
+
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+
+outputs:
+  config_id:
+    description: The ID of the OsNetConfigImpl resource.
+    value:
+      {get_resource: OsNetConfigImpl}
index 4ac404e..476758b 100644 (file)
@@ -3,5 +3,6 @@ resource_registry:
   OS::TripleO::Compute: compute.yaml
   OS::TripleO::Compute::SoftwareConfig: compute-config.yaml
   OS::TripleO::SoftwareDeployment: OS::Heat::StructuredDeployment
+  OS::TripleO::Net::SoftwareConfig: net-config-noop.yaml
   OS::TripleO::Controller: controller.yaml
   OS::TripleO::ObjectStorage: swift-storage.yaml