Support sysctl on OpenBSD

Fixes #1233
pull/18777/head
gekmihesg 9 years ago committed by Matt Clay
parent 11dbd985b6
commit d003fcd662

@ -123,6 +123,8 @@ class SysctlModule(object):
def process(self): def process(self):
self.platform = get_platform().lower()
# Whitespace is bad # Whitespace is bad
self.args['name'] = self.args['name'].strip() self.args['name'] = self.args['name'].strip()
self.args['value'] = self._parse_value(self.args['value']) self.args['value'] = self._parse_value(self.args['value'])
@ -206,7 +208,11 @@ class SysctlModule(object):
# Use the sysctl command to find the current value # Use the sysctl command to find the current value
def get_token_curr_value(self, token): def get_token_curr_value(self, token):
thiscmd = "%s -e -n %s" % (self.sysctl_cmd, token) if self.platform == 'openbsd':
# openbsd doesn't support -e, just drop it
thiscmd = "%s -n %s" % (self.sysctl_cmd, token)
else:
thiscmd = "%s -e -n %s" % (self.sysctl_cmd, token)
rc,out,err = self.module.run_command(thiscmd) rc,out,err = self.module.run_command(thiscmd)
if rc != 0: if rc != 0:
return None return None
@ -217,7 +223,11 @@ class SysctlModule(object):
def set_token_value(self, token, value): def set_token_value(self, token, value):
if len(value.split()) > 0: if len(value.split()) > 0:
value = '"' + value + '"' value = '"' + value + '"'
thiscmd = "%s -w %s=%s" % (self.sysctl_cmd, token, value) if self.platform == 'openbsd':
# openbsd doesn't accept -w, but since it's not needed, just drop it
thiscmd = "%s %s=%s" % (self.sysctl_cmd, token, value)
else:
thiscmd = "%s -w %s=%s" % (self.sysctl_cmd, token, value)
rc,out,err = self.module.run_command(thiscmd) rc,out,err = self.module.run_command(thiscmd)
if rc != 0: if rc != 0:
self.module.fail_json(msg='setting %s failed: %s' % (token, out + err)) self.module.fail_json(msg='setting %s failed: %s' % (token, out + err))
@ -227,9 +237,20 @@ class SysctlModule(object):
# Run sysctl -p # Run sysctl -p
def reload_sysctl(self): def reload_sysctl(self):
# do it # do it
if get_platform().lower() == 'freebsd': if self.platform == 'freebsd':
# freebsd doesn't support -p, so reload the sysctl service # freebsd doesn't support -p, so reload the sysctl service
rc,out,err = self.module.run_command('/etc/rc.d/sysctl reload') rc,out,err = self.module.run_command('/etc/rc.d/sysctl reload')
elif self.platform == 'openbsd':
# openbsd doesn't support -p and doesn't have a sysctl service,
# so we have to set every value with its own sysctl call
for k, v in self.file_values.items():
rc = 0
if k != self.args['name']:
rc = self.set_token_value(k, v)
if rc != 0:
break
if rc == 0 and self.args['state'] == "present":
rc = self.set_token_value(self.args['name'], self.args['value'])
else: else:
# system supports reloading via the -p flag to sysctl, so we'll use that # system supports reloading via the -p flag to sysctl, so we'll use that
sysctl_args = [self.sysctl_cmd, '-p', self.sysctl_file] sysctl_args = [self.sysctl_cmd, '-p', self.sysctl_file]

Loading…
Cancel
Save