summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Hagen <kim.sidney@gmail.com>2019-02-28 21:20:31 +0100
committerKim Hagen <kim.sidney@gmail.com>2019-02-28 21:20:31 +0100
commit45b8ef0342b4254844cd46d5b94b10972ea9eec7 (patch)
tree56b1feb49b2e62c317d4aa449f011f23ef94cc0c
parent4befa58fe77e53b4102f6b4aae241704efca2a14 (diff)
downloadvyos-cloud-init-45b8ef0342b4254844cd46d5b94b10972ea9eec7.tar.gz
vyos-cloud-init-45b8ef0342b4254844cd46d5b94b10972ea9eec7.zip
use ovf labels to set vyos config
-rw-r--r--cloudinit/config/cc_vyos.py72
-rw-r--r--cloudinit/sources/DataSourceOVF.py3
2 files changed, 66 insertions, 9 deletions
diff --git a/cloudinit/config/cc_vyos.py b/cloudinit/config/cc_vyos.py
index 290d3665..1a9681c8 100644
--- a/cloudinit/config/cc_vyos.py
+++ b/cloudinit/config/cc_vyos.py
@@ -22,6 +22,7 @@ import os
import sys
import ast
+from ipaddress import IPv4Network
from cloudinit import util
from cloudinit.distros import ug_util
@@ -84,6 +85,51 @@ def set_ssh_login(config, user, key_string, key_x):
config.set(['system', 'login', 'user', user, 'level'], value='admin', replace=True)
+def set_config_cloud(config, hostname):
+ config.set(['service', 'ssh'], replace=True)
+ config.set(['service', 'ssh', 'port'], value='22', replace=True)
+ config.set(['service', 'ssh', 'client-keepalive-interval'], value='180', replace=True)
+ config.set(['interfaces', 'ethernet', 'eth0', 'address'], value='dhcp', replace=True)
+ config.set_tag(['interfaces', 'ethernet'])
+ config.set(['system', 'host-name'], value=hostname, replace=True)
+
+
+def set_config_ovf(config, hostname, metadata):
+ ip_0 = metadata['ip0']
+ mask_0 = metadata['netmask0']
+ gateway = metadata['gateway']
+ DNS = list(metadata['DNS'].replace(" ", "").split(","))
+ NTP = list(metadata['NTP'].replace(" ", "").split(","))
+
+ if ip_0 != '' and mask_0 != '' and gateway != '':
+ cidr = str(IPv4Network('0.0.0.0/' + mask_0).prefixlen)
+ ipcidr = ip_0 + '/' + cidr
+
+ config.set(['interfaces', 'ethernet', 'eth0', 'address'], value=ipcidr, replace=True)
+ config.set_tag(['interfaces', 'ethernet'])
+ config.set(['protocols', 'static', 'route', '0.0.0.0/0', 'next-hop'], value=gateway, replace=True)
+ config.set_tag(['protocols', 'static', 'route'])
+ config.set_tag(['protocols', 'static', 'route', '0.0.0.0/0', 'next-hop'])
+ else:
+ config.set(['interfaces', 'ethernet', 'eth0', 'address'], value='dhcp', replace=True)
+ config.set_tag(['interfaces', 'ethernet'])
+
+ DNS = [ server for server in DNS if server != "" ]
+ if DNS:
+ for server in DNS:
+ config.set(['system', 'name-server'], value=server, replace=False)
+
+ NTP = [ server for server in NTP if server != "" ]
+ if NTP:
+ for server in NTP:
+ config.set(['system', 'ntp', 'server'], value=server, replace=False)
+ config.set_tag(['system', 'ntp', 'server'])
+
+ config.set(['service', 'ssh'], replace=True)
+ config.set(['service', 'ssh', 'port'], value='22', replace=True)
+ config.set(['system', 'host-name'], value=hostname, replace=True)
+
+
def handle(name, cfg, cloud, log, _args):
cfg_file_name = '/opt/vyatta/etc/config/config.boot'
bak_file_name = '/opt/vyatta/etc/config.boot.default'
@@ -102,7 +148,7 @@ def handle(name, cfg, cloud, log, _args):
config_file = f.read()
config = ConfigTree(config_file)
- if 'DataSourceAzure' in str(cloud.datasource):
+ if 'Azure' in str(cloud.datasource):
encrypted_pass = True
for key, val in users.items():
user = key
@@ -114,6 +160,22 @@ def handle(name, cfg, cloud, log, _args):
for ssh_key in vyos_keys:
set_ssh_login(config, user, ssh_key, key_x)
key_x = key_x + 1
+ set_config_cloud(config, hostname)
+ elif 'OVF' in str(cloud.datasource):
+ for user in users:
+ password = util.get_cfg_option_str(cfg, "password", None)
+ if password:
+ set_pass_login(config, user, password, encrypted_pass)
+
+ vyos_keys = cloud.get_public_ssh_keys() or []
+ if "ssh_authorized_keys" in cfg:
+ cfgkeys = cfg["ssh_authorized_keys"]
+ vyos_keys.extend(cfgkeys)
+
+ for ssh_key in vyos_keys:
+ set_ssh_login(config, user, ssh_key, key_x)
+ key_x = key_x + 1
+ set_config_ovf(config, hostname, metadata)
else:
for user in users:
password = util.get_cfg_option_str(cfg, "passwd", None)
@@ -128,13 +190,7 @@ def handle(name, cfg, cloud, log, _args):
for ssh_key in vyos_keys:
set_ssh_login(config, user, ssh_key, key_x)
key_x = key_x + 1
-
- config.set(['service', 'ssh'], replace=True)
- config.set(['service', 'ssh', 'port'], value='22', replace=True)
- config.set(['service', 'ssh', 'client-keepalive-interval'], value='180', replace=True)
- config.set(['interfaces', 'ethernet', 'eth0', 'address'], value='dhcp', replace=True)
- config.set_tag(['interfaces', 'ethernet'])
- config.set(['system', 'host-name'], value=hostname, replace=True)
+ set_config_cloud(config, hostname)
try:
with open(cfg_file_name, 'w') as f:
diff --git a/cloudinit/sources/DataSourceOVF.py b/cloudinit/sources/DataSourceOVF.py
index 3a3fcdf6..f9304644 100644
--- a/cloudinit/sources/DataSourceOVF.py
+++ b/cloudinit/sources/DataSourceOVF.py
@@ -394,7 +394,8 @@ def read_ovf_environment(contents):
cfg = {}
ud = None
cfg_props = ['password']
- md_props = ['seedfrom', 'local-hostname', 'public-keys', 'instance-id']
+ md_props = ['seedfrom', 'local-hostname', 'public-keys', 'instance-id',
+ 'ip0', 'netmask0', 'gateway', 'DNS', 'NTP']
for (prop, val) in props.items():
if prop == 'hostname':
prop = "local-hostname"