Skip to content
Snippets Groups Projects
ims_worker.py 2.82 KiB
Newer Older
Robert Latta's avatar
Robert Latta committed
import csv
import json
import logging
Robert Latta's avatar
Robert Latta committed
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):
Robert Latta's avatar
Robert Latta committed
    logger.debug('>>> update_lg_routers_ims')

    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')
Robert Latta's avatar
Robert Latta committed


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
Robert Latta's avatar
Robert Latta committed

    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'],
Robert Latta's avatar
Robert Latta committed
            source_dir=temp_dir,
            destination=otrs_config['destination']
        )
        subprocess.run(command, shell=True, check=True)

    logger.debug('<<< export_data_for_otrs_ims')