- vserver.VServer.set_disklimit(self, disk_max_KiB)
- except OSError: logger.log_exc()
-
- net_limits = (int(self.rec['net_min']),
- int(self.rec['net_max']),
- int(self.rec['net2_min']),
- int(self.rec['net2_max']),
- int(self.rec['net_share']))
- logger.log('%s: setting net limits to %s bps' % (self.name, net_limits[:-1]))
- logger.log('%s: setting net share to %d' % (self.name, net_limits[-1]))
- self.set_bwlimit(*net_limits)
-
- cpu_min = int(self.rec['cpu_min'])
- cpu_share = int(self.rec['cpu_share'])
- if bool(self.rec['enabled']):
- if cpu_min > 0:
- logger.log('%s: setting cpu share to %d%% guaranteed' % (self.name, cpu_min/10.0))
- self.set_sched_config(cpu_min, vserver.SCHED_CPU_GUARANTEED)
+ vserver.VServer.set_disklimit(self, max(disk_max, self.disk_blocks))
+ except:
+ logger.log_exc('sliver_vs: failed to set max disk usage', name=self.name)
+
+ # get/set the min/soft/hard values for all of the vserver
+ # related RLIMITS. Note that vserver currently only
+ # implements support for hard limits.
+ for limit in list(vserver.RLIMITS.keys()):
+ type = limit.lower()
+ minimum = self.rspec['{}_min'.format(type)]
+ soft = self.rspec['{}_soft'.format(type)]
+ hard = self.rspec['{}_hard'.format(type)]
+ update = self.set_rlimit(limit, hard, soft, minimum)
+ if update:
+ logger.log('sliver_vs: {}: setting rlimit {} to ({}, {}, {})'
+ .format(self.name, type, hard, soft, minimum))
+
+ self.set_capabilities_config(self.rspec['capabilities'])
+ if self.rspec['capabilities']:
+ logger.log('sliver_vs: {}: setting capabilities to {}'
+ .format(self.name, self.rspec['capabilities']))
+
+ cpu_pct = self.rspec['cpu_pct']
+ cpu_share = self.rspec['cpu_share']
+
+ count = 1
+ for key in list(self.rspec.keys()):
+ if key.find('sysctl.') == 0:
+ sysctl = key.split('.')
+ try:
+ # /etc/vservers/<guest>/sysctl/<id>/
+ dirname = "/etc/vservers/{}/sysctl/{}".format(self.name, count)
+ try:
+ os.makedirs(dirname, 0o755)
+ except:
+ pass
+ with open("{}/setting".format(dirname), "w") as setting:
+ setting.write("{}\n".format(key.lstrip("sysctl.")))
+ with open("{}/value".format(dirname), "w") as value:
+ value.write("{}\n".format(self.rspec[key]))
+ count += 1
+
+ logger.log("sliver_vs: {}: writing {}={}"
+ .format(self.name, key, self.rspec[key]))
+ except IOError as e:
+ logger.log("sliver_vs: {}: could not set {}={}"
+ .format(self.name, key, self.rspec[key]))
+ logger.log("sliver_vs: {}: error = {}".format(self.name, e))
+
+
+ if self.rspec['enabled'] > 0:
+ if cpu_pct > 0:
+ logger.log('sliver_vs: {}: setting cpu reservation to {}%'
+ .format(self.name, cpu_pct))