# Path: cloudify_agent/api/exceptions.py
# class DaemonException(BaseException):
# class DaemonStartupTimeout(DaemonException):
# class DaemonShutdownTimeout(DaemonException):
# class DaemonStillRunningException(DaemonException):
# class DaemonError(BaseException):
# class DaemonConfigurationError(DaemonError):
# class DaemonPropertiesError(DaemonError):
# class DaemonMissingMandatoryPropertyError(DaemonPropertiesError):
# class DaemonNotConfiguredError(DaemonError):
# class DaemonNotFoundError(DaemonError):
# class DaemonAlreadyExistsError(DaemonError):
# class DaemonNotImplementedError(DaemonError):
#     def __init__(self, timeout, name):
#     def __str__(self):
#     def __init__(self, timeout, name):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, param):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, process_management):
#     def __str__(self):
# 
# Path: cloudify_agent/api/utils.py
# class _Internal(object):
#     CLOUDIFY_DAEMON_STORAGE_DIRECTORY_KEY = 'CLOUDIFY_DAEMON_STORAGE_DIRECTORY'
#     CLOUDIFY_DAEMON_USER_KEY = 'CLOUDIFY_DAEMON_USER'
#     def get_daemon_storage_dir(cls):
#     def get_daemon_user(cls):
#     def get_storage_directory(cls, username=None):
#     def generate_agent_name():
#     def generate_new_agent_name(old_agent_name):
#     def daemon_to_dict(daemon):
#     def get_broker_url(agent):
# def get_agent_registered(name,
#                          celery_client,
#                          timeout=workflows_tasks.INSPECT_TIMEOUT):
# def get_windows_home_dir(username):
# def get_home_dir(username=None):
# def render_template_to_file(template_path, file_path=None, **values):
# def resource_to_tempfile(resource_path, executable=False):
# def get_resource(resource_path):
# def get_absolute_resource_path(resource_path):
# def content_to_file(content, file_path=None, executable=False):
# def env_to_file(env_variables, destination_path=None, posix=True):
# def stringify_values(dictionary):
# def purge_none_values(dictionary):
# def json_load(file_path):
# def json_loads(content):
# def safe_create_dir(path):
# def get_rest_client(rest_host,
#                     rest_port,
#                     rest_token,
#                     rest_tenant,
#                     ssl_cert_path,
#                     bypass_maintenance_mode=False):
# def _parse_comma_separated(ctx, param, value):
# def get_manager_file_server_url(hostname, port, scheme=None):
# def get_agent_version():
# def get_windows_basedir():
# def get_linux_basedir():
# def get_agent_basedir(is_windows=False):


import os
import json
from cloudify.utils import setup_logger
from cloudify_agent.api import exceptions
from cloudify_agent.api import utils
        from cloudify_agent.api.pm.base import Daemon
            '{0}.json'.format(name)
        )
        if not os.path.exists(daemon_path):
            raise exceptions.DaemonNotFoundError(name)
        daemon_as_json = utils.json_load(daemon_path)
        self.logger.debug('Daemon {0} loaded: {1}'.format(name, json.dumps(
            daemon_as_json, indent=2)))
        process_management = daemon_as_json.pop('process_management')
        daemon = DaemonFactory._find_implementation(process_management)
        return daemon(logger=logger, **daemon_as_json)

    def save(self, daemon):

        """
        Saves a daemon to the local storage. The daemon is stored in json
        format and contains all daemon properties.

        :param daemon: The daemon instance to save.
        :type daemon: cloudify_agent.api.daemon.base.Daemon

        """
        if not os.path.exists(self.storage):
            os.makedirs(self.storage)
        daemon_path = os.path.join(
            self.storage, '{0}.json'.format(
                daemon.name)
        )
        self.logger.debug('Saving daemon configuration at: {0}'
                          .format(daemon_path))
        with open(daemon_path, 'w') as f:

# Path: cloudify_agent/api/exceptions.py
# class DaemonException(BaseException):
# class DaemonStartupTimeout(DaemonException):
# class DaemonShutdownTimeout(DaemonException):
# class DaemonStillRunningException(DaemonException):
# class DaemonError(BaseException):
# class DaemonConfigurationError(DaemonError):
# class DaemonPropertiesError(DaemonError):
# class DaemonMissingMandatoryPropertyError(DaemonPropertiesError):
# class DaemonNotConfiguredError(DaemonError):
# class DaemonNotFoundError(DaemonError):
# class DaemonAlreadyExistsError(DaemonError):
# class DaemonNotImplementedError(DaemonError):
#     def __init__(self, timeout, name):
#     def __str__(self):
#     def __init__(self, timeout, name):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, param):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, name):
#     def __str__(self):
#     def __init__(self, process_management):
#     def __str__(self):
# 
# Path: cloudify_agent/api/utils.py
# class _Internal(object):
#     CLOUDIFY_DAEMON_STORAGE_DIRECTORY_KEY = 'CLOUDIFY_DAEMON_STORAGE_DIRECTORY'
#     CLOUDIFY_DAEMON_USER_KEY = 'CLOUDIFY_DAEMON_USER'
#     def get_daemon_storage_dir(cls):
#     def get_daemon_user(cls):
#     def get_storage_directory(cls, username=None):
#     def generate_agent_name():
#     def generate_new_agent_name(old_agent_name):
#     def daemon_to_dict(daemon):
#     def get_broker_url(agent):
# def get_agent_registered(name,
#                          celery_client,
#                          timeout=workflows_tasks.INSPECT_TIMEOUT):
# def get_windows_home_dir(username):
# def get_home_dir(username=None):
# def render_template_to_file(template_path, file_path=None, **values):
# def resource_to_tempfile(resource_path, executable=False):
# def get_resource(resource_path):
# def get_absolute_resource_path(resource_path):
# def content_to_file(content, file_path=None, executable=False):
# def env_to_file(env_variables, destination_path=None, posix=True):
# def stringify_values(dictionary):
# def purge_none_values(dictionary):
# def json_load(file_path):
# def json_loads(content):
# def safe_create_dir(path):
# def get_rest_client(rest_host,
#                     rest_port,
#                     rest_token,
#                     rest_tenant,
#                     ssl_cert_path,
#                     bypass_maintenance_mode=False):
# def _parse_comma_separated(ctx, param, value):
# def get_manager_file_server_url(hostname, port, scheme=None):
# def get_agent_version():
# def get_windows_basedir():
# def get_linux_basedir():
# def get_agent_basedir(is_windows=False):


# Path: cloudify_agent/api/factory.py
import os
import json
from cloudify.utils import setup_logger
from cloudify_agent.api import exceptions
from cloudify_agent.api import utils
        from cloudify_agent.api.pm.base import Daemon

            '{0}.json'.format(name)
        )
        if not os.path.exists(daemon_path):
            raise exceptions.DaemonNotFoundError(name)
        daemon_as_json = utils.json_load(daemon_path)
        self.logger.debug('Daemon {0} loaded: {1}'.format(name, json.dumps(
            daemon_as_json, indent=2)))
        process_management = daemon_as_json.pop('process_management')
        daemon = DaemonFactory._find_implementation(process_management)
        return daemon(logger=logger, **daemon_as_json)

    def save(self, daemon):

        """
        Saves a daemon to the local storage. The daemon is stored in json
        format and contains all daemon properties.

        :param daemon: The daemon instance to save.
        :type daemon: cloudify_agent.api.daemon.base.Daemon

        """
        if not os.path.exists(self.storage):
            os.makedirs(self.storage)
        daemon_path = os.path.join(
            self.storage, '{0}.json'.format(
                daemon.name)
        )
        self.logger.debug('Saving daemon configuration at: {0}'
                          .format(daemon_path))
        with open(daemon_path, 'w') as f:

            props = utils.internal.daemon_to_dict(daemon)