def execute(self, event): if not _should_handle(self, event): return if len(event.data.items) == 0: return utils.reply(event) item_names = [] for item in event.data.items: # For development, don't let the server kill your agent if item.name != 'pyagent' or Config.config_update_pyagent(): item_names.append(item.name) home = Config.home() env = dict(os.environ) env['CATTLE_ACCESS_KEY'] = Config.access_key() env['CATTLE_SECRET_KEY'] = Config.secret_key() env['CATTLE_CONFIG_URL'] = Config.config_url() env['CATTLE_HOME'] = home args = [Config.config_sh()] + item_names try: output = utils.get_command_output(args, cwd=home, env=env) return utils.reply(event, {'exitCode': 0, 'output': output}) except subprocess.CalledProcessError as e: Progress(event).update('Update Failed', data={ 'exitCode': e.returncode, 'output': e.output })
def execute(self, event): if not _should_handle(self, event): return if len(event.data.items) == 0: return utils.reply(event) item_names = [] for item in event.data.items: # For development, don't let the server kill your agent if item.name != 'pyagent' or Config.config_update_pyagent(): item_names.append(item.name) home = Config.home() env = dict(os.environ) env['CATTLE_ACCESS_KEY'] = Config.access_key() env['CATTLE_SECRET_KEY'] = Config.secret_key() env['CATTLE_CONFIG_URL'] = Config.config_url() env['CATTLE_HOME'] = home args = [Config.config_sh()] + item_names try: output = utils.get_command_output(args, cwd=home, env=env) return utils.reply(event, { 'exitCode': 0, 'output': output }) except subprocess.CalledProcessError as e: Progress(event).update('Update Failed', data={ 'exitCode': e.returncode, 'output': e.output })
def ns_exec(pid, event): script = os.path.join(Config.home(), 'events', event.name.split(';')[0]) cmd = ['nsenter', '-F', '-m', '-u', '-i', '-n', '-p', '-t', str(pid), '--', script] marshaller = get_type(MARSHALLER) input = marshaller.to_string(event) data = None env = {} #in come customized docker like alidocker use with open('/host/proc/{}/environ'.format(pid)) as f: with open('/proc/{}/environ'.format(pid)) as f: for line in f.read().split('\0'): if not len(line): continue kv = line.split('=', 1) if kv[0].startswith('CATTLE'): env[kv[0]] = kv[1] env['PATH'] = os.environ['PATH'] env['CATTLE_CONFIG_URL'] = Config.config_url() for i in range(3): p = popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output, error = p.communicate(input=input) retcode = p.poll() if retcode == 0: break exists_cmd = cmd[:-1] + ['/usr/bin/test', '-e', script] if popen(exists_cmd, env=env).wait() == 0: break # Sleep and try again if missing time.sleep(1) if retcode: return retcode, output, None text = [] for line in output.splitlines(): if line.startswith('{'): data = marshaller.from_string(line) break text.append(line) return retcode, ''.join(text), data
def ns_exec(pid, event): script = os.path.join(Config.home(), 'events', event.name.split(';')[0]) cmd = ['nsenter', '-F', '-m', '-u', '-i', '-n', '-p', '-t', str(pid), '--', script] marshaller = get_type(MARSHALLER) input = marshaller.to_string(event) data = None env = {} with open('/proc/{}/environ'.format(pid)) as f: for line in f.read().split('\0'): if not len(line): continue kv = line.split('=', 1) if kv[0].startswith('CATTLE'): env[kv[0]] = kv[1] env['PATH'] = os.environ['PATH'] env['CATTLE_CONFIG_URL'] = Config.config_url() for i in range(3): p = popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output, error = p.communicate(input=input) retcode = p.poll() if retcode == 0: break exists_cmd = cmd[:-1] + ['/usr/bin/test', '-e', script] if popen(exists_cmd, env=env).wait() == 0: break # Sleep and try again if missing time.sleep(1) if retcode: return retcode, output, None text = [] for line in output.splitlines(): if line.startswith('{'): data = marshaller.from_string(line) break text.append(line) return retcode, ''.join(text), data
def ns_exec(pid, event): script = os.path.join(Config.home(), 'events', event.name.split(';')[0]) cmd = ['nsenter', '-F', '-m', '-u', '-i', '-n', '-p', '-t', str(pid), '--', script] marshaller = get_type(MARSHALLER) input = marshaller.to_string(event) data = None env = {} with open('/proc/{}/environ'.format(pid)) as f: for line in f.read().split('\0'): if not len(line): continue kv = line.split('=', 1) if kv[0].startswith('CATTLE'): env[kv[0]] = kv[1] env['PATH'] = os.environ['PATH'] p = popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output, error = p.communicate(input=input) retcode = p.poll() if retcode: return retcode, output, None text = [] for line in output.splitlines(): if line.startswith('{'): data = marshaller.from_string(line) break text.append(line) return retcode, ''.join(text), data
def ns_exec(pid, event): script = os.path.join(Config.home(), 'events', event.name.split(';')[0]) cmd = [ 'nsenter', '-F', '-m', '-u', '-i', '-n', '-p', '-t', str(pid), '--', script ] marshaller = get_type(MARSHALLER) input = marshaller.to_string(event) data = None env = {} with open('/proc/{}/environ'.format(pid)) as f: for line in f.read().split('\0'): if not len(line): continue kv = line.split('=', 1) if kv[0].startswith('CATTLE'): env[kv[0]] = kv[1] env['PATH'] = os.environ['PATH'] p = popen(cmd, env=env, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output, error = p.communicate(input=input) retcode = p.poll() if retcode: return retcode, output, None text = [] for line in output.splitlines(): if line.startswith('{'): data = marshaller.from_string(line) break text.append(line) return retcode, ''.join(text), data
def docker_uuid_file(): def_value = '{0}/.docker_uuid'.format(Config.home()) return default_value('DOCKER_UUID_FILE', def_value)
def websockify_session_dir(): return default_value( 'LIBVIRT_WEBSOCKIFY_DIR', os.path.join(Config.home(), 'websockify', 'session'))
def libvirt_uuid_file(): def_value = '{0}/.libvirt_uuid'.format(Config.home()) return default_value('LIBVIRT_UUID_FILE', def_value)
def config_drive_directory(): return default_value('LIBVIRT_CONFIG_DRIVE_DIR', path.join(Config.home(), 'pools/config-drive'))
def pool_directories(): return default_value('LIBVIRT_POOL_DIRECTORIES', path.join(Config.home(), 'pools/libvirt')).split()
def websockify_session_dir(): return default_value('LIBVIRT_WEBSOCKIFY_DIR', os.path.join(Config.home(), 'websockify', 'session'))