1""" 2Utilities for managing Debian preseed 3 4.. versionadded:: 2015.8.0 5""" 6 7import shlex 8 9import salt.utils.files 10import salt.utils.stringutils 11import salt.utils.yaml 12 13 14def mksls(src, dst=None): 15 """ 16 Convert a preseed file to an SLS file 17 """ 18 ps_opts = {} 19 with salt.utils.files.fopen(src, "r") as fh_: 20 for line in fh_: 21 line = salt.utils.stringutils.to_unicode(line) 22 if line.startswith("#"): 23 continue 24 if not line.strip(): 25 continue 26 27 comps = shlex.split(line) 28 if comps[0] not in ps_opts.keys(): 29 ps_opts[comps[0]] = {} 30 cmds = comps[1].split("/") 31 32 pointer = ps_opts[comps[0]] 33 for cmd in cmds: 34 pointer = pointer.setdefault(cmd, {}) 35 36 pointer["type"] = comps[2] 37 if len(comps) > 3: 38 pointer["argument"] = comps[3] 39 40 sls = {} 41 42 # Set language 43 # ( This looks like it maps to something else ) 44 sls[ps_opts["d-i"]["languagechooser"]["language-name-fb"]["argument"]] = { 45 "locale": ["system"] 46 } 47 48 # Set keyboard 49 # ( This looks like it maps to something else ) 50 sls[ps_opts["d-i"]["kbd-chooser"]["method"]["argument"]] = {"keyboard": ["system"]} 51 52 # Set timezone 53 timezone = ps_opts["d-i"]["time"]["zone"]["argument"] 54 sls[timezone] = {"timezone": ["system"]} 55 if ps_opts["d-i"]["tzconfig"]["gmt"]["argument"] == "true": 56 sls[timezone]["timezone"].append("utc") 57 58 # Set network 59 if "netcfg" in ps_opts["d-i"].keys(): 60 iface = ps_opts["d-i"]["netcfg"]["choose_interface"]["argument"] 61 sls[iface] = {} 62 sls[iface]["enabled"] = True 63 if ps_opts["d-i"]["netcfg"]["confirm_static"] == "true": 64 sls[iface]["proto"] = "static" 65 elif ps_opts["d-i"]["netcfg"]["disable_dhcp"] == "false": 66 sls[iface]["proto"] = "dhcp" 67 sls[iface]["netmask"] = ps_opts["d-i"]["netcfg"]["get_netmask"]["argument"] 68 sls[iface]["domain"] = ps_opts["d-i"]["netcfg"]["get_domain"]["argument"] 69 sls[iface]["gateway"] = ps_opts["d-i"]["netcfg"]["get_gateway"]["argument"] 70 sls[iface]["hostname"] = ps_opts["d-i"]["netcfg"]["get_hostname"]["argument"] 71 sls[iface]["ipaddress"] = ps_opts["d-i"]["netcfg"]["get_ipaddress"]["argument"] 72 sls[iface]["nameservers"] = ps_opts["d-i"]["netcfg"]["get_nameservers"][ 73 "argument" 74 ] 75 76 if dst is not None: 77 with salt.utils.files.fopen(dst, "w") as fh_: 78 salt.utils.yaml.safe_dump(sls, fh_, default_flow_style=False) 79 else: 80 return salt.utils.yaml.safe_dump(sls, default_flow_style=False) 81