From fd61c178848f51378f29cd04b57f3e3d5b73d4ed Mon Sep 17 00:00:00 2001 From: Ralph van Etten Date: Thu, 4 Jun 2020 14:43:53 +0200 Subject: [PATCH 1/2] got everything working on openwrt 19, python 3 and salt 3000 --- _modules/openwrt.py | 29 +++++++++++------------------ _proxy/openwrt.py | 35 +++++++++++++++++++++-------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/_modules/openwrt.py b/_modules/openwrt.py index 1adb893..f703134 100644 --- a/_modules/openwrt.py +++ b/_modules/openwrt.py @@ -27,7 +27,7 @@ def update_pkgs(): ''' Update the list of available packages ''' - out, _, ret = __proxy__['ssh.ssh_check']('opkg update') + out, _, ret = __proxy__['openwrt.ssh_check']('opkg update') if ret == 0: return True else : @@ -39,9 +39,11 @@ def list_pkgs(): Retrieve a list of installed packages from the openwrt host ''' pkgs = {} - for line, _, ret in __proxy__['openwrt.ssh_check']('opkg list-installed').split('\n'): - pkg, version = line.split(' - ') - pkgs[pkg] = version + out, _, ret = __proxy__['openwrt.ssh_check']('opkg list-installed') + if ret == 0: + for line in out.split('\n'): + pkg, version = line.split(' - ') + pkgs[pkg] = version return pkgs @@ -59,22 +61,13 @@ def network_restart(): ''' Restart the network, reconfigures all interfaces ''' - out = __proxy__['openwrt.ubus']('network', 'restart') - if ret == 0: - return True - else : - return False - + return __proxy__['openwrt.ubus']('network', 'restart') def network_reload(): ''' Reload the network, reload interfaces as needed ''' - out = __proxy__['openwrt.ubus']('network', 'reload') - if ret == 0: - return True - else : - return False + return __proxy__['openwrt.ubus']('network', 'reload') def interface_list(): @@ -87,6 +80,7 @@ def interface_list(): for line in out.split('\n'): if line.startswith('network.interface.'): intfs.append('.'.join(line.split('.')[2:])) + return intfs else : return False @@ -123,7 +117,7 @@ def _parse_uci(data): for line in data.split('\n'): key, value = line.split('=', 1) path = key.split('.') - uci['key'] = value + uci[key] = value return uci @@ -139,5 +133,4 @@ def reboot(): ''' Reboot openwrt device ''' - __proxy__['openwrt.ubus']('system', 'reboot') - return True + return __proxy__['openwrt.ubus']('system', 'reboot') diff --git a/_proxy/openwrt.py b/_proxy/openwrt.py index e0c6d1d..cbd594f 100644 --- a/_proxy/openwrt.py +++ b/_proxy/openwrt.py @@ -48,7 +48,7 @@ def init(opts): password=opts['proxy']['password'], key_accept=opts['proxy'].get('key_accept', False), ssh_args=opts['proxy'].get('ssh_args', ''), - prompt='.+[#$]') + prompt='root.+#') log.info('SSH Connection established.') out, err = DETAILS['server'].sendline('id') DETAILS['initialized'] = True @@ -103,7 +103,8 @@ def grains(**kwargs): GRAINS_CACHE['manufacturer'], GRAINS_CACHE['productname'] = board['model'].split(' ', 1) GRAINS_CACHE['os'] = board['release']['distribution'] GRAINS_CACHE['os_family'] = 'openwrt' - GRAINS_CACHE['oscodename'] = board['release']['codename'] + #RVE: wont work + #GRAINS_CACHE['oscodename'] = board['release']['codename'] GRAINS_CACHE['osfullname'] = board['release']['description'] GRAINS_CACHE['osrelease'] = board['release']['version'] GRAINS_CACHE['osmajorrelease'] = board['release']['version'].split('.')[0] @@ -119,7 +120,7 @@ def grains(**kwargs): ip_interfaces = {} ipv4 = {} ipv6 = {} - for dev, i in netdev.iteritems(): + for dev, i in netdev.items(): hwaddr_interfaces[dev] = i['macaddr'] for i in netif['interface']: try: @@ -131,15 +132,16 @@ def grains(**kwargs): except KeyError: pass for item in [('dns-server', 'nameservers'), ('dns-search', 'search')]: - if len(i[item[0]]) > 0: + if item[0] in i and len(i[item[0]]) > 0: dns[item[1]].extend(i[item[0]]) - for route in i['route']: - if route['target'] == '0.0.0.0': - GRAINS_CACHE['ip4_gw'] = route['nexthop'] - GRAINS_CACHE['ip_gw'] = True - if route['target'] == '::/0': - GRAINS_CACHE['ip6_gw'] = route['nexthop'] - GRAINS_CACHE['ipv6_gw'] = True + if 'route' in i: + for route in i['route']: + if route['target'] == '0.0.0.0': + GRAINS_CACHE['ip4_gw'] = route['nexthop'] + GRAINS_CACHE['ip_gw'] = True + if route['target'] == '::/0': + GRAINS_CACHE['ip6_gw'] = route['nexthop'] + GRAINS_CACHE['ipv6_gw'] = True GRAINS_CACHE['dns'] = dns GRAINS_CACHE['hwaddr_interfaces'] = hwaddr_interfaces @@ -190,8 +192,13 @@ def ubus(path, method, message = {}): Call a remote ubus method ''' command = 'ubus call %s %s \'%s\'' % (path, method, salt.utils.json.dumps(message)) - out, _ = ssh_cmd(command) - return salt.utils.json.loads(out) + out, _, ret = ssh_check(command) + if ret == 0: + if not out: + return True + else: + return salt.utils.json.loads(out) + return False def ssh_oneshot(command): ''' @@ -219,7 +226,7 @@ def ssh_check(command): Run cmd on the remote system and fetch exit code ''' try: - out, err = DETAILS['server'].sendline('%s; echo $?' % (command,)) + out, err = DETAILS['server'].sendline('%s; echo $?' % (command)) out = "\n".join(out.split('\n')[1:-1]) out, _, ret = out.rpartition('\n') return out, err, int(ret) From 2a98bb581c60c2866bf86a84aa07c25eff740c22 Mon Sep 17 00:00:00 2001 From: Ralph van Etten Date: Thu, 4 Jun 2020 14:45:21 +0200 Subject: [PATCH 2/2] added quick note to readme about multiprocessing --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index ca5ae4a..5f91888 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # salt_openwrt Saltstack openwrt proxy minion + +Only works when + + multiprocessing: False + +is set in /etc/salt/proxy