35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import cdist
|
|
import tempfile
|
|
from cdist.integration import configure_hosts_simple
|
|
from celery.utils.log import get_task_logger
|
|
from django.conf import settings
|
|
|
|
from dynamicweb.celery import app
|
|
|
|
logger = get_task_logger(__name__)
|
|
|
|
|
|
@app.task(bind=True, max_retries=settings.CELERY_MAX_RETRIES)
|
|
def save_ssh_key(self, hosts, keys):
|
|
"""
|
|
Saves ssh key into the VMs of a user using cdist
|
|
|
|
:param hosts: A list of hosts to be configured
|
|
:param keys: A list of keys to be added
|
|
"""
|
|
return_value = True
|
|
with tempfile.NamedTemporaryFile(delete=True) as tmp_manifest:
|
|
# Generate manifest to be used for configuring the hosts
|
|
lines_list = [' --key "{key}"\\\n'.format(key=key).encode('utf-8') for
|
|
key in keys]
|
|
lines_list.insert(0, b'__ssh_authorized_keys root \\\n')
|
|
tmp_manifest.writelines(lines_list)
|
|
tmp_manifest.flush()
|
|
try:
|
|
configure_hosts_simple(hosts,
|
|
tmp_manifest.name,
|
|
verbose=cdist.argparse.VERBOSE_TRACE)
|
|
except Exception as cdist_exception:
|
|
logger.error(cdist_exception)
|
|
return_value = False
|
|
return return_value
|