def get_register_config(playbook_id): record = Playbook.find_by_id(playbook_id) if not record: return jsonify({ 'message': 'record not found', 'code': 104040, }), 404 records = Configuration().find_by_ids(record.get('register')) return jsonify({ 'message': 'ok', 'code': 0, 'data': records, })
def rename(_id): oid = ObjectId(_id) body = request.get_json() file_path = body.get('path') if not file_path: return jsonify({ 'message': 'invalid param path', 'code': 104001, }), 400 record = Playbook.find_by_id(oid) if not record: return jsonify({ 'message': 'record not found', 'code': 104040, }), 404 if record.get('path') == file_path: return jsonify({'message': 'ok', 'code': 0, 'data': record}) Playbook().rename(_id, file_path) return jsonify({'message': 'ok', 'code': 0, 'data': record})
def load_ansible_playbook(payload): template = payload.get('template') extra = payload.get('extra', {}) or {} if not template: return { 'message': 'invalid params', 'code': 104000, } name = template.get('name') if not name: return { 'message': 'name required', 'code': 104000, } entry = template.get('entry') if len(entry) < 2: return { 'message': 'entry not found', 'code': 104001, } book_id, entry_id = entry book_record = Book.find_by_id(book_id) if not book_record: return { 'message': 'book not found', 'code': 1040011, } entry_record = Playbook.find_by_id(entry_id) if not entry_record: return { 'message': 'entry not found', 'code': 104001, } inventory_type = template.get('inventory_type', 'file') inventory = template.get('inventory', None) if not inventory: return {'message': 'invalid param inventory', 'code': 104002} if inventory_type == 'file': inventory_record = parse_file_inventory(inventory) else: inventory_record = parse_cmdb_inventory(inventory) if not inventory_record: return {'message': 'illegal inventory', 'code': 104002} group_name = inventory_record.keys() if not inventory_record: return {'message': 'invalid param inventory', 'code': 104002} roles = template.get('roles') role_names = [] if roles: roles = list(map(lambda i: ObjectId(i), roles)) check = Playbook.find({ 'book_id': book_id, '_id': { '$in': roles, } }) check = list(check) if not check: return {'message': 'invalid param role', 'code': 104003} role_names = list(map(lambda i: i.get('name'), check)) extra_vars = { 'node': list(group_name), } private_key = template.get('private_key') if private_key: key_record = Credential.find_one({ '_id': ObjectId(private_key), 'type': 'private_key' }) if not key_record: return {'message': 'invalid private key', 'code': 104031} variables = extra.get('extraVars') or {} # variables.update({'node': inventory_record.get('limit')}) if type(variables) in [dict, list]: variables = yaml.safe_dump(variables) app = template.get('app') if app: # @todo status=1 app_record = Application.find_by_id(app) if not app_record: return {'message': 'invalid app', 'code': 104043} app_type = app_record.get('type') app_params = app_record.get('params') integration = Integration(app_type, app_params) check_app = integration.check_app_params() if not check_app: return {'message': 'invalid app', 'code': 104014} job_space = integration.get_job_space(name) if job_space and variables: tpl = Template(variables) variables = tpl.render(ECLOGUE_JOB_SPACE=job_space) if variables: variables = yaml.safe_load(variables) variables and extra_vars.update(variables) options = dict() extra_options = template.get('extraOptions') if extra_options and type(extra_options) == dict: options = extra_options.copy() # default_options = get_default_options('playbook') # for key, value in extra_options.items(): # if default_options.get(key): # options[key] = value options['skip_tags'] = template.get('skip_tags', []) options['inventory'] = inventory_record # @todo limit # options['limit'] = inventory_record.get('limit', None) # options['credential'] = template.get('credential') options['limit'] = template.get('limit', 'all') options['forks'] = template.get('forks', 5) options['tags'] = template.get('tags', []) options['listtags'] = template.get('listtags', False) options['listtasks'] = template.get('listtasks', False) options['timeout'] = template.get('timeout', 10) options['verbosity'] = template.get('verbosity', 0) become_method = template.get('become_method') if become_method: options['become'] = 'yes' options['become_method'] = become_method if template.get('become_user'): options['become_user'] = template.get('become_user') vault_pass = template.get('vault_pass') if vault_pass: vault_record = Credential.find_one({'_id': ObjectId(vault_pass)}) if not vault_record or not vault_record.get('body'): return {'message': 'invalid vault pass', 'code': 104004} vault_body = vault_record.get('body') vault = Vault({'vault_pass': config.vault.get('secret')}) options['vault_pass'] = vault.decrypt_string( vault_body.get('vault_pass')) options['verbosity'] = template.get('verbosity', 0) options['diff'] = template.get('diff', False) # options['vault'] = template.get('vault') options['extra_vars'] = extra_vars status = int(extra.get('status', 0)) return { 'message': 'ok', 'data': { 'inventory': options['inventory'], 'options': options, 'name': name, 'entry': entry_record['name'], 'book_id': book_id, 'book_name': book_record['name'], 'roles': role_names, 'inventory_type': inventory_type, 'private_key': private_key, 'template': template, 'extra': extra, 'status': status, } }
def edit_file(_id): """ edit playbook file @todo add lock :param _id: ObjectId string :return: json """ params = request.get_json() or request.form if not params: return jsonify({ 'message': 'invalid params', 'code': 154000, }), 400 edit_type = params.get('type') if edit_type == 'upload': return upload_file(_id) name = params.get('name') role = params.get('role') description = params.get('description') status = params.get('status', 1) maintainer = params.get('maintainer', []) can_edit = params.get('is_edit') is_dir = params.get('is_dir') is_encrypt = params.get('is_encrypt') folder = params.get('folder') register = params.get('register') content = params.get('content') record = Playbook.find_by_id(_id) if not record: return jsonify({ 'message': 'record not found', 'code': 154041, }), 404 data = { 'status': status, } if name: data['name'] = name if role: data['role'] = role if folder: data['folder'] = folder if content: data['content'] = content data['md5'] = md5(content) if description: data['description'] = description if maintainer: data['maintainer'] = maintainer if can_edit is not None: data['is_edit'] = bool(is_edit) data['is_encrypt'] = bool(is_encrypt) if is_dir is not None: data['is_dir'] = bool(is_dir) if register: c_ids = map(lambda i: ObjectId(i), register) where = {'_id': {'$in': c_ids}} register_config = Configuration.find(where) if not register_config: return jsonify({ 'message': 'invalid register config', 'code': 154042, }), 404 data['register'] = register Playbook.update_one({'_id': ObjectId(_id)}, {'$set': data}, upsert=True) data['_id'] = _id book = Book.find_one({'_id': ObjectId(record['book_id'])}) wk = Workspace() wk.write_book_file(book.get('name'), record) return jsonify({ 'message': 'ok', 'code': 0, 'data': data, })