Ahenk/usr/share/ahenk/plugins/package-manager/package_sources.py

110 lines
5 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/python
# -*- coding: utf-8 -*-
# Author: Cemre ALPSOY <cemre.alpsoy@agem.com.tr>
import json
from base.plugin.abstract_plugin import AbstractPlugin
from os import listdir
from os.path import isfile, join
class PackageSources(AbstractPlugin):
def __init__(self, data, context):
super(AbstractPlugin, self).__init__()
self.data = data
self.context = context
self.logger = self.get_logger()
self.message_code = self.get_message_code()
def handle_task(self):
added_items = self.data['addedItems']
deleted_items = self.data['deletedItems']
error_message = ""
try:
# Add desired repositories
for item in added_items:
result_code, p_out, p_err = self.execute(
'/bin/bash {}package-manager/scripts/sourcelist.sh'.format(self.Ahenk.plugins_path()))
repo_not_found = True
for line in p_out.splitlines():
if item == line:
repo_not_found = False
break
if repo_not_found:
file_source_list = open("/etc/apt/sources.list.d/liderahenk.list", 'a+')
file_source_list.write(item + "\n")
file_source_list.close()
if result_code != 0:
self.logger.error("Error occurred while adding repository: " + str(p_err))
error_message += " Paket deposu eklenirken hata oluştu: " + str(p_err)
self.logger.debug("Added repositories")
# Remove desired repositories
for item in deleted_items:
command = 'find /etc/apt/ -name \*.list -type f -exec sed -i \'/' + str(item).replace("/",
"\\/") + '/d\' \{\} \;'
#deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
is_file_deleted = False
f_name_list = [f for f in listdir("/etc/apt/sources.list.d") if isfile(join("/etc/apt/sources.list.d", f))]
for idx, f_name in enumerate(f_name_list):
f_name_list[idx] = "/etc/apt/sources.list.d/" + f_name
f_name_list.append("/etc/apt/sources.list")
for f_name in f_name_list:
file_sources = open(f_name, 'r')
file_data = file_sources.read()
file_sources.close()
if item in file_data:
file_data = file_data.replace(item, "")
is_file_deleted = True
file_sources = open(f_name, 'w')
file_sources.write(file_data)
file_sources.close()
break
#result_code, p_out, p_err = self.execute(command)
if is_file_deleted is False:
self.logger.error("Error occurred while removing repository: " + str(p_err))
error_message += " Paket deposu silinirken hata oluştu: " + str(p_err)
self.logger.debug("Removed repositories")
# Update package lists
self.execute('apt-get update')
self.logger.debug("Updated package lists")
# Read package repositories
command = '/bin/bash {0}package-manager/scripts/sourcelist.sh'.format(self.Ahenk.plugins_path())
result_code, p_out, p_err = self.execute(command)
data = {}
if result_code != 0:
self.logger.error("Error occurred while listing repositories: " + str(p_err))
error_message += " Paket depoları okunurken hata oluştu: " + str(p_err)
else:
data['packageSource'] = p_out
self.logger.debug("Repositories are listed")
if not error_message:
self.context.create_response(code=self.message_code.TASK_PROCESSED.value,
message='Paket depoları başarıyla güncellendi.',
data=json.dumps(data),
content_type=self.get_content_type().APPLICATION_JSON.value)
else:
self.context.create_response(code=self.message_code.TASK_ERROR.value,
message=error_message,
content_type=self.get_content_type().APPLICATION_JSON.value)
except Exception as e:
self.logger.debug(str(e))
self.context.create_response(code=self.message_code.TASK_ERROR.value,
message="Paket depoları güncellenirken hata oluştu: " + str(e),
content_type=self.get_content_type().APPLICATION_JSON.value)
def handle_task(task, context):
plugin = PackageSources(task, context)
plugin.handle_task()