summaryrefslogtreecommitdiff
path: root/cloudinit/net/renderer.py
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2016-06-15 23:56:59 -0400
committerScott Moser <smoser@ubuntu.com>2016-06-15 23:56:59 -0400
commit776b0cfe847f531d8d5a235f52673c3da1f06064 (patch)
tree03e7b18a35a0eb33973448b01f4b51bdb2477b80 /cloudinit/net/renderer.py
parentd598ceeb838b4ccaf667ded84bb02bf096ab7b12 (diff)
parent922562bccbc6b6c7f3309ecd36f1835b2ad817da (diff)
downloadvyos-cloud-init-776b0cfe847f531d8d5a235f52673c3da1f06064.tar.gz
vyos-cloud-init-776b0cfe847f531d8d5a235f52673c3da1f06064.zip
support network rendering to sysconfig (for centos and RHEL)
This intends to add support for rendering of network data under sysconfig distributions (centos and rhel). The end result will be support for network configuration via ConfigDrive or NoCloud on these OS.
Diffstat (limited to 'cloudinit/net/renderer.py')
-rw-r--r--cloudinit/net/renderer.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/cloudinit/net/renderer.py b/cloudinit/net/renderer.py
new file mode 100644
index 00000000..310cbe0d
--- /dev/null
+++ b/cloudinit/net/renderer.py
@@ -0,0 +1,48 @@
+# Copyright (C) 2013-2014 Canonical Ltd.
+#
+# Author: Scott Moser <scott.moser@canonical.com>
+# Author: Blake Rouse <blake.rouse@canonical.com>
+#
+# Curtin is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Affero General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# Curtin is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
+# more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with Curtin. If not, see <http://www.gnu.org/licenses/>.
+
+import six
+
+from .udev import generate_udev_rule
+
+
+def filter_by_type(match_type):
+ return lambda iface: match_type == iface['type']
+
+
+def filter_by_name(match_name):
+ return lambda iface: match_name == iface['name']
+
+
+filter_by_physical = filter_by_type('physical')
+
+
+class Renderer(object):
+
+ @staticmethod
+ def _render_persistent_net(network_state):
+ """Given state, emit udev rules to map mac to ifname."""
+ # TODO(harlowja): this seems shared between eni renderer and
+ # this, so move it to a shared location.
+ content = six.StringIO()
+ for iface in network_state.iter_interfaces(filter_by_physical):
+ # for physical interfaces write out a persist net udev rule
+ if 'name' in iface and iface.get('mac_address'):
+ content.write(generate_udev_rule(iface['name'],
+ iface['mac_address']))
+ return content.getvalue()