Newer
Older
import json
import logging
import subprocess
import tempfile
from datetime import datetime
from enum import IntFlag
from pathlib import Path
from inventory_provider.db import ims_data
from inventory_provider.db.ims import IMS
from inventory_provider import environment
from inventory_provider.tasks.app import app
from inventory_provider.tasks.common import get_next_redis
from inventory_provider.tasks.worker import InventoryTask
environment.setup_logging()
logger = logging.getLogger(__name__)
@app.task(base=InventoryTask, bind=True)
def update_lg_routers_ims(self):
r = get_next_redis(InventoryTask.config)
for k in r.scan_iter('ims:lg:*'):
r.delete(k)
c = InventoryTask.config["ims"]
ds = IMS(c['api'], c['username'], c['password'])
for router in ims_data.lookup_lg_routers(ds):
r.set(f'ims:lg:{router["equipment name"]}', json.dumps(router))
logger.debug('<<< update_lg_routers_ims')
class OTRSFiles(IntFlag):
CUSTOMER_COMPANIES = 1
CUSTOMER_USERS = 2
@app.task(base=InventoryTask, bind=True)
def export_data_for_otrs(self, files_to_export=None):
if files_to_export:
files_to_export = OTRSFiles(files_to_export)
else:
files_to_export = set(OTRSFiles)
logger.debug('>>> export_data_for_otrs_ims')
ims_config = InventoryTask.config["ims"]
otrs_config = InventoryTask.config["otrs-export"]
command_template = 'rsync -aP --rsh="ssh -l {user} -p 22 -i {key_file} -o \'UserKnownHostsFile {known_hosts}\'" {source_dir}/* {destination}' # noqa
with tempfile.TemporaryDirectory() as temp_dir:
temp_path = Path(temp_dir)
ds = IMS(
ims_config['api'],
ims_config['username'],
ims_config['password'])
prefix = datetime.now().strftime('%Y%m%d') + '_'
if OTRSFiles.CUSTOMER_COMPANIES in files_to_export:
cus_co_path = temp_path.joinpath(f'{prefix}customer_company.csv')
with open(cus_co_path, 'w+') as f:
writer = csv.writer(f, delimiter='^')
writer.writerows(ims_data.otrs_get_customer_company_rows(ds))
if OTRSFiles.CUSTOMER_USERS in files_to_export:
cus_usr_path = temp_path.joinpath(f'{prefix}customer_user.csv')
with open(cus_usr_path, 'w+') as f:
writer = csv.writer(f, delimiter='^')
writer.writerows(ims_data.otrs_get_customer_users_rows(ds))
command = command_template.format(
user=otrs_config['username'],
key_file=otrs_config['private-key'],
known_hosts=otrs_config['known-hosts'],
source_dir=temp_dir,
destination=otrs_config['destination']
)
subprocess.run(command, shell=True, check=True)
logger.debug('<<< export_data_for_otrs_ims')