예제 #1
0
    def test_prepare_secured(self):

        cloudify_agent = CloudifyAgentConfig({
            'local': True,
            'rest_port': '443'
        })
        cloudify_agent.set_execution_params()
        cloudify_agent.set_default_values()
        cloudify_agent.set_installation_params(None)

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')

        # This test needs to be adapted to security settings
        expected = {
            'agent_dir': agent_dir,
            'process_management': {
                'name': 'init.d' if os.name == 'posix' else 'nssm'
            },
            'basedir': basedir,
            'name': 'test_deployment',
            'rest_port': '443',
            'rest_host': 'localhost',
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'install_method': 'local',
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'max_workers': 5,
            'min_workers': 0,
            'workdir': workdir,
            'broker_ssl_cert_path': os.environ[constants.BROKER_SSL_CERT_PATH],
            'windows': os.name == 'nt',
            'system_python': 'python',
            'bypass_maintenance': False,
            'rest_token': 'test_token',
            'rest_tenant': {}
        }
        if os.name == 'posix':
            distro = platform.dist()[0].lower()
            distro_codename = platform.dist()[2].lower()
            expected['distro'] = platform.dist()[0].lower()
            expected['distro_codename'] = platform.dist()[2].lower()
            expected['package_url'] = 'localhost/packages/agents/' \
                                      '{0}-{1}-agent.tar.gz' \
                .format(distro, distro_codename)
        else:
            expected['package_url'] = 'localhost/packages/agents/' \
                                      'cloudify-windows-agent.exe'

        self.maxDiff = None
        self.assertDictEqual(expected, cloudify_agent)
    def _test_prepare(self, agent_config, expected_values, context=None):

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')

        # This test needs to be adapted to security settings
        expected = {
            'agent_dir': agent_dir,
            'process_management': {
                'name': 'init.d' if os.name == 'posix' else 'nssm'
            },
            'basedir': basedir,
            'name': 'test_deployment',
            'rest_host': 'localhost',
            'broker_ip': ['localhost'],
            'broker_ssl_cert': '',
            'heartbeat': None,
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'install_method': 'local',
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'max_workers': 5,
            'min_workers': 0,
            'workdir': workdir,
            'broker_ssl_cert_path': os.environ[constants.BROKER_SSL_CERT_PATH],
            'windows': os.name == 'nt',
            'system_python': 'python',
            'bypass_maintenance': False,
            'network': 'default',
            'version': utils.get_agent_version(),
            'node_instance_id': 'test_node',
            'log_level': 'info',
            'log_max_bytes': 5242880,
            'log_max_history': 7
        }
        expected.update(expected_values)

        self.maxDiff = None
        context = context or {}
        ctx = mock_context(**context)
        with patch('cloudify_agent.installer.config.agent_config.ctx', ctx), \
                patch('cloudify.utils.ctx', mock_context()):
            cloudify_agent = CloudifyAgentConfig()
            cloudify_agent.set_initial_values(True, agent_config=agent_config)
            cloudify_agent.set_execution_params()
            cloudify_agent.set_default_values()
            cloudify_agent.set_installation_params(None)
            self.assertDictEqual(expected, cloudify_agent)
예제 #3
0
def installation_attributes(cloudify_agent, runner):

    if (not cloudify_agent.get('source_url') and
            not cloudify_agent.get('package_url')):

        if cloudify_agent['windows']:

            # no distribution difference in windows installation
            cloudify_agent['package_url'] = '{0}/packages/agents' \
                                            '/cloudify-windows-agent.exe'\
                .format(cloudify_utils.get_manager_file_server_url())
        else:
            if not cloudify_agent.get('distro'):
                if cloudify_agent['local']:
                    cloudify_agent['distro'] = platform.dist()[0].lower()
                elif cloudify_agent['remote_execution']:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro'] = dist[0].lower()

            if not cloudify_agent.get('distro_codename'):
                if cloudify_agent['local']:
                    cloudify_agent['distro_codename'] = platform.dist()[
                        2].lower()
                elif cloudify_agent['remote_execution']:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro_codename'] = dist[2].lower()

            if ('distro' in cloudify_agent and
                    'distro_codename' in cloudify_agent):
                cloudify_agent['package_url'] = '{0}/packages/agents' \
                                                '/{1}-{2}-agent.tar.gz' \
                    .format(cloudify_utils.get_manager_file_server_url(),
                            cloudify_agent['distro'],
                            cloudify_agent['distro_codename'])

    if not cloudify_agent.get('basedir'):
        if cloudify_agent['local']:
            basedir = agent_utils.get_home_dir(cloudify_agent['user'])
        else:
            if cloudify_agent['windows']:

                # can't seem to figure out how to get the home_dir remotely
                # on windows. same was as fabric wont work because the
                # 'pwd' module does not exists in a windows python
                # installation.
                # TODO - maybe use some environment variables heuristics?
                basedir = \
                    agent_utils.get_windows_home_dir(cloudify_agent['user'])
            elif cloudify_agent['remote_execution']:
                basedir = runner.home_dir(cloudify_agent['user'])
            else:
                basedir = '~{0}'.format(cloudify_agent['user'])
        cloudify_agent['basedir'] = basedir

    directory_attributes(cloudify_agent)
예제 #4
0
def installation_attributes(cloudify_agent, runner):

    if (not cloudify_agent.get('source_url')
            and not cloudify_agent.get('package_url')):

        if cloudify_agent['windows']:

            # no distribution difference in windows installation
            cloudify_agent['package_url'] = '{0}/packages/agents' \
                                            '/cloudify-windows-agent.exe'\
                .format(get_manager_file_server_url())
        else:
            if not cloudify_agent.get('distro'):
                if cloudify_agent['local']:
                    cloudify_agent['distro'] = platform.dist()[0].lower()
                elif cloudify_agent['remote_execution']:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro'] = dist[0].lower()

            if not cloudify_agent.get('distro_codename'):
                if cloudify_agent['local']:
                    cloudify_agent['distro_codename'] = platform.dist(
                    )[2].lower()
                elif cloudify_agent['remote_execution']:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro_codename'] = dist[2].lower()

            if ('distro' in cloudify_agent
                    and 'distro_codename' in cloudify_agent):
                cloudify_agent['package_url'] = '{0}/packages/agents' \
                                                '/{1}-{2}-agent.tar.gz' \
                    .format(get_manager_file_server_url(),
                            cloudify_agent['distro'],
                            cloudify_agent['distro_codename'])

    if not cloudify_agent.get('basedir'):
        if cloudify_agent['local']:
            basedir = utils.get_home_dir(cloudify_agent['user'])
        else:
            if cloudify_agent['windows']:

                # can't seem to figure out how to get the home_dir remotely
                # on windows. same was as fabric wont work because the
                # 'pwd' module does not exists in a windows python
                # installation.
                # TODO - maybe use some environment variables heuristics?
                basedir = utils.get_windows_home_dir(cloudify_agent['user'])
            elif cloudify_agent['remote_execution']:
                basedir = runner.home_dir(cloudify_agent['user'])
            else:
                basedir = '~{0}'.format(cloudify_agent['user'])
        cloudify_agent['basedir'] = basedir

    directory_attributes(cloudify_agent)
예제 #5
0
def installation_attributes(cloudify_agent, runner):

    if (not cloudify_agent.get('source_url')
            and not cloudify_agent.get('package_url')):

        if cloudify_agent['windows']:

            # no distribution difference in windows installation
            cloudify_agent['package_url'] = '{0}/packages/agents' \
                                            '/cloudify-windows-agent.exe'\
                .format(cloudify_utils.get_manager_file_server_url())
        else:
            if not cloudify_agent.get('distro'):
                if cloudify_agent['local']:
                    cloudify_agent['distro'] = platform.dist()[0].lower()
                elif cloudify_agent['remote_execution']:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro'] = dist[0].lower()

            if not cloudify_agent.get('distro_codename'):
                if cloudify_agent['local']:
                    cloudify_agent['distro_codename'] = platform.dist(
                    )[2].lower()
                elif cloudify_agent['remote_execution']:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro_codename'] = dist[2].lower()

            if ('distro' in cloudify_agent
                    and 'distro_codename' in cloudify_agent):
                cloudify_agent['package_url'] = '{0}/packages/agents' \
                                                '/{1}-{2}-agent.tar.gz' \
                    .format(cloudify_utils.get_manager_file_server_url(),
                            cloudify_agent['distro'],
                            cloudify_agent['distro_codename'])

    if not cloudify_agent.get('basedir'):
        if cloudify_agent['local']:
            basedir = agent_utils.get_home_dir(cloudify_agent['user'])
        else:
            if cloudify_agent['windows']:
                # TODO: Get the program files directory from the machine iself
                # instead of hardcoding it an assuming it's in C:\
                basedir = 'C:\\Program Files\\Cloudify Agents'
            elif cloudify_agent['remote_execution']:
                basedir = runner.home_dir(cloudify_agent['user'])
            else:
                basedir = '~{0}'.format(cloudify_agent['user'])
        cloudify_agent['basedir'] = basedir

    directory_attributes(cloudify_agent)
    def test_prepare(self):

        cloudify_agent = {'local': True}
        configuration.prepare_connection(cloudify_agent)
        configuration.prepare_agent(cloudify_agent, None)

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')
        expected = {
            'agent_dir': agent_dir,
            'process_management': {
                'name': 'init.d' if os.name == 'posix' else 'nssm'
            },
            'basedir': basedir,
            'name': 'test_deployment',
            'manager_ip': 'localhost',
            'manager_port': 8101,
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'max_workers': 5,
            'min_workers': 0,
            'workdir': workdir,
            'windows': os.name == 'nt',
            'system_python': 'python',
            'remote_execution': True,
            'broker_get_settings_from_manager': True,
        }
        if os.name == 'posix':
            distro = platform.dist()[0].lower()
            distro_codename = platform.dist()[2].lower()
            expected['distro'] = platform.dist()[0].lower()
            expected['distro_codename'] = platform.dist()[2].lower()
            expected['package_url'] = 'localhost/packages/agents/' \
                                      '{0}-{1}-agent.tar.gz'\
                .format(distro, distro_codename)
        else:
            expected['package_url'] = 'localhost/packages/agents/' \
                                      'cloudify-windows-agent.exe'

        self.maxDiff = None
        self.assertDictEqual(expected, cloudify_agent)
    def test_prepare(self):

        cloudify_agent = {'local': True}
        configuration.prepare_connection(cloudify_agent)
        configuration.prepare_agent(cloudify_agent, None)

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')
        expected = {
            'agent_dir': agent_dir,
            'process_management':
                {'name': 'init.d' if os.name == 'posix' else 'nssm'},
            'basedir': basedir,
            'name': 'test_deployment',
            'manager_ip': 'localhost',
            'manager_port': 8101,
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'max_workers': 5,
            'min_workers': 0,
            'workdir': workdir,
            'windows': os.name == 'nt',
            'system_python': 'python',
            'remote_execution': True,
            'broker_get_settings_from_manager': True,
        }
        if os.name == 'posix':
            distro = platform.dist()[0].lower()
            distro_codename = platform.dist()[2].lower()
            expected['distro'] = platform.dist()[0].lower()
            expected['distro_codename'] = platform.dist()[2].lower()
            expected['package_url'] = 'localhost/packages/agents/' \
                                      '{0}-{1}-agent.tar.gz'\
                .format(distro, distro_codename)
        else:
            expected['package_url'] = 'localhost/packages/agents/' \
                                      'cloudify-windows-agent.exe'

        self.maxDiff = None
        self.assertDictEqual(expected, cloudify_agent)
예제 #8
0
    def _set_basedir(self, runner):
        if self.get('basedir'):
            return

        if self.is_local:
            basedir = agent_utils.get_home_dir(self['user'])
        else:
            if self.is_windows:
                # TODO: Get the program files directory from the machine itself
                # instead of hardcoding it an assuming it's in C:\
                basedir = 'C:\\Program Files\\Cloudify Agents'
            elif self.is_remote:
                basedir = runner.home_dir(self['user'])
            else:
                basedir = '~{0}'.format(self['user'])
        self['basedir'] = basedir
예제 #9
0
    def _set_basedir(self, runner):
        if self.get('basedir'):
            return

        if self.is_local:
            basedir = agent_utils.get_home_dir(self['user'])
        else:
            if self.is_windows:
                # TODO: Get the program files directory from the machine itself
                # instead of hardcoding it an assuming it's in C:\
                basedir = 'C:\\Program Files\\Cloudify Agents'
            elif self.is_remote:
                basedir = runner.home_dir(self['user'])
            else:
                basedir = '~{0}'.format(self['user'])
        self['basedir'] = basedir
예제 #10
0
    def _test_prepare(self, agent_config, expected_values):
        cloudify_agent = CloudifyAgentConfig()
        cloudify_agent.set_initial_values(True, agent_config=agent_config)
        cloudify_agent.set_execution_params()
        cloudify_agent.set_default_values()
        cloudify_agent.set_installation_params(None)

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')

        # This test needs to be adapted to security settings
        expected = {
            'agent_dir': agent_dir,
            'process_management': {
                'name': 'init.d' if os.name == 'posix' else 'nssm'
            },
            'basedir': basedir,
            'name': 'test_deployment',
            'rest_host': 'localhost',
            'broker_ip': 'localhost',
            'heartbeat': None,
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'install_method': 'local',
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'max_workers': 20,
            'min_workers': 0,
            'workdir': workdir,
            'broker_ssl_cert_path': os.environ[constants.BROKER_SSL_CERT_PATH],
            'windows': os.name == 'nt',
            'system_python': 'python',
            'bypass_maintenance': False,
            'network': 'default',
            'version': utils.get_agent_version()
        }
        expected.update(expected_values)

        self.maxDiff = None
        self.assertDictEqual(expected, cloudify_agent)
예제 #11
0
def install_local(agent_file, output_agent_file):
    if agent_file is None:
        raise click.ClickException('--agent-file should be specified.')
    cloudify_agent = json.load(agent_file)
    if not cloudify_agent.get('rest_protocol'):
        cloudify_agent['rest_protocol'] = \
            defaults.REST_PROTOCOL
    if not cloudify_agent.get('rest_port'):
        cloudify_agent['rest_port'] = defaults.REST_PORT
    os.environ[utils.internal.CLOUDIFY_DAEMON_USER_KEY] = str(
        cloudify_agent['user'])
    if 'basedir' not in cloudify_agent:
        cloudify_agent['basedir'] = utils.get_home_dir(cloudify_agent['user'])
    configuration.directory_attributes(cloudify_agent)
    installer = prepare_local_installer(cloudify_agent)
    installer.create_agent()
    installer.configure_agent()
    installer.start_agent()
    if output_agent_file is not None:
        with open(output_agent_file, 'w') as out:
            out.write(json.dumps(cloudify_agent))
예제 #12
0
def install_local(agent_file, output_agent_file):
    if agent_file is None:
        raise click.ClickException('--agent-file should be specified.')
    cloudify_agent = json.load(agent_file)
    cloudify_agent['manager_port'] = defaults.MANAGER_PORT
    if cloudify_agent.get('broker_get_settings_from_manager', True):
        broker_config = utils.internal.get_broker_configuration(cloudify_agent)
    else:
        broker_config = cloudify_agent
    broker_url = utils.internal.get_broker_url(broker_config)
    os.environ['CELERY_BROKER_URL'] = broker_url
    os.environ[utils.internal.CLOUDIFY_DAEMON_USER_KEY] = str(
        cloudify_agent['user'])
    if 'basedir' not in cloudify_agent:
        cloudify_agent['basedir'] = utils.get_home_dir(cloudify_agent['user'])
    configuration.directory_attributes(cloudify_agent)
    installer = prepare_local_installer(cloudify_agent)
    installer.create_agent()
    installer.configure_agent()
    installer.start_agent()
    if output_agent_file is not None:
        with open(output_agent_file, 'w') as out:
            out.write(json.dumps(cloudify_agent))
예제 #13
0
def install_local(agent_file, output_agent_file):
    if agent_file is None:
        raise click.ClickException('--agent-file should be specified.')
    cloudify_agent = json.load(agent_file)
    cloudify_agent['manager_port'] = defaults.MANAGER_PORT
    if cloudify_agent.get('broker_get_settings_from_manager', True):
        broker_config = utils.internal.get_broker_configuration(cloudify_agent)
    else:
        broker_config = cloudify_agent
    broker_url = utils.internal.get_broker_url(broker_config)
    os.environ['CELERY_BROKER_URL'] = broker_url
    os.environ[utils.internal.CLOUDIFY_DAEMON_USER_KEY] = str(
        cloudify_agent['user'])
    if 'basedir' not in cloudify_agent:
        cloudify_agent['basedir'] = utils.get_home_dir(cloudify_agent['user'])
    configuration.directory_attributes(cloudify_agent)
    installer = prepare_local_installer(cloudify_agent)
    installer.create_agent()
    installer.configure_agent()
    installer.start_agent()
    if output_agent_file is not None:
        with open(output_agent_file, 'w') as out:
            out.write(json.dumps(cloudify_agent))
예제 #14
0
def install_local(agent_file, output_agent_file, rest_token, rest_cert_path):
    if agent_file is None:
        raise click.ClickException('--agent-file should be specified.')
    cloudify_agent = json.load(agent_file)
    ctx = context.CloudifyContext({'rest_token': rest_token})
    state.current_ctx.set(ctx, {})
    if not cloudify_agent.get('rest_port'):
        cloudify_agent['rest_port'] = defaults.INTERNAL_REST_PORT
    os.environ[utils.internal.CLOUDIFY_DAEMON_USER_KEY] = str(
        cloudify_agent['user'])
    os.environ[CLOUDIFY_LOCAL_REST_CERT_PATH] = str(rest_cert_path)
    if 'basedir' not in cloudify_agent:
        cloudify_agent['basedir'] = utils.get_home_dir(cloudify_agent['user'])
    configuration.directory_attributes(cloudify_agent)
    installer = prepare_local_installer(cloudify_agent)
    installer.create_agent()
    installer.configure_agent()
    installer.start_agent()
    if output_agent_file is not None:
        with open(output_agent_file, 'w') as out:
            out.write(json.dumps(cloudify_agent))

    # Remove the temporary cert file, as it was copied to the agent's dir
    os.remove(rest_cert_path)
예제 #15
0
    def test_prepare(self):

        cloudify_agent = {'local': True}
        configuration.prepare_connection(cloudify_agent)
        configuration.prepare_agent(cloudify_agent, None)

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')

        # This test needs to be adapted to security settings
        expected = {
            'agent_dir': agent_dir,
            'process_management':
                {'name': 'init.d' if os.name == 'posix' else 'nssm'},
            'basedir': basedir,
            'name': 'test_deployment',
            'rest_host': 'localhost',
            'rest_port': 80,
            'rest_protocol': 'http',
            'file_server_host': 'localhost',
            'file_server_port': 53229,
            'file_server_protocol': 'http',
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'max_workers': 5,
            'min_workers': 0,
            'workdir': workdir,
            'agent_rest_cert_path': os.environ[constants.AGENT_REST_CERT_PATH],
            'broker_ssl_cert_path': os.environ[constants.BROKER_SSL_CERT_PATH],
            'windows': os.name == 'nt',
            'system_python': 'python',
            'remote_execution': True,
            'broker_get_settings_from_manager': True,
            'security_enabled': False,
            'rest_cert_content': '',
            'rest_username': None,
            'rest_password': None,
            'verify_rest_certificate': False,
            'bypass_maintenance_mode': False,
            'rest_token': None
        }
        if os.name == 'posix':
            distro = platform.dist()[0].lower()
            distro_codename = platform.dist()[2].lower()
            expected['distro'] = platform.dist()[0].lower()
            expected['distro_codename'] = platform.dist()[2].lower()
            expected['package_url'] = 'localhost/packages/agents/' \
                                      '{0}-{1}-agent.tar.gz'\
                .format(distro, distro_codename)
        else:
            expected['package_url'] = 'localhost/packages/agents/' \
                                      'cloudify-windows-agent.exe'

        self.maxDiff = None
        self.assertDictEqual(expected, cloudify_agent)
    def _test_prepare(self, agent_config, expected_values, context=None):

        user = getpass.getuser()
        basedir = utils.get_home_dir(user)
        agent_dir = os.path.join(basedir, 'test_deployment')
        envdir = os.path.join(agent_dir, 'env')
        workdir = os.path.join(agent_dir, 'work')

        # This test needs to be adapted to security settings
        expected = {
            'agent_dir': agent_dir,
            'process_management': {
                'name': 'init.d' if os.name == 'posix' else 'nssm'
            },
            'basedir': basedir,
            'name': 'test_deployment',
            'rest_host': ['127.0.0.1'],
            'broker_ip': ['127.0.0.1'],
            'broker_ssl_cert': agent_ssl_cert.DUMMY_CERT,
            'heartbeat': None,
            'queue': 'test_deployment',
            'envdir': envdir,
            'user': user,
            'local': True,
            'install_method': 'local',
            'disable_requiretty': True,
            'env': {},
            'fabric_env': {},
            'file_server_url': 'http://127.0.0.1:80/resources',
            'max_workers': 5,
            'min_workers': 0,
            'workdir': workdir,
            'broker_ssl_cert_path': os.environ[constants.BROKER_SSL_CERT_PATH],
            'windows': os.name == 'nt',
            'system_python': 'python',
            'bypass_maintenance': False,
            'network': 'default',
            'version': utils.get_agent_version(),
            'node_instance_id': 'test_node',
            'log_level': 'info',
            'log_max_bytes': 5242880,
            'log_max_history': 7,
            'rest_ssl_cert': agent_ssl_cert.DUMMY_CERT,
            'tenant': {
                'name': 'default_tenant',
                'rabbitmq_username': '******',
                'rabbitmq_password': '******',
                'rabbitmq_vhost': '/'
            }
        }
        expected.update(expected_values)

        self.maxDiff = None
        context = context or {}
        ctx = mock_context(**context)
        patches = [
            patch('cloudify_agent.installer.config.agent_config.ctx', ctx),
            patch('cloudify.utils.ctx', mock_context()),
            patch('cloudify.utils.get_manager_name', return_value='cloudify')
        ]
        # it's originally a string because it comes from envvars
        if expected['rest_port'] != '443':
            patches.append(
                patch('cloudify.utils.get_manager_file_server_scheme',
                      return_value='http')
            )
        for p in patches:
            p.start()
            self.addCleanup(p.stop)

        cloudify_agent = CloudifyAgentConfig()
        cloudify_agent.set_initial_values(
            True, agent_config=agent_config)
        cloudify_agent.set_execution_params()
        cloudify_agent.set_default_values()
        cloudify_agent.set_installation_params(None)
        self.assertDictEqual(expected, cloudify_agent)
예제 #17
0
def installation_attributes(cloudify_agent, runner):

    if 'source_url' not in cloudify_agent:

        if 'package_url' not in cloudify_agent:

            if cloudify_agent['windows']:

                # no distribution difference in windows installation
                cloudify_agent['package_url'] = '{0}/packages/agents' \
                                                '/cloudify-windows-agent.exe'\
                    .format(get_manager_file_server_url())
            else:
                # build one from distro and distro_codename
                if cloudify_agent['local']:
                    cloudify_agent['distro'] = platform.dist()[0].lower()
                else:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro'] = dist[0].lower()

                # distro was not specified, try to auto-detect
                if cloudify_agent['local']:
                    cloudify_agent['distro_codename'] = platform.dist()[
                        2].lower()
                else:
                    dist = runner.machine_distribution()
                    cloudify_agent['distro_codename'] = dist[2].lower()

                cloudify_agent['package_url'] = '{0}/packages/agents' \
                                                '/{1}-{2}-agent.tar.gz' \
                    .format(get_manager_file_server_url(),
                            cloudify_agent['distro'],
                            cloudify_agent['distro_codename'])

    if 'basedir' not in cloudify_agent:
        if cloudify_agent['local']:
            basedir = utils.get_home_dir(cloudify_agent['user'])
        else:
            if cloudify_agent['windows']:

                # can't seem to figure out how to get the home_dir remotely
                # on windows. same was as fabric wont work because the
                # 'pwd' module does not exists in a windows python
                # installation.
                # TODO - maybe use some environment variables heuristics?
                basedir = 'C:\\Users\\{0}'.format(cloudify_agent['user'])
            else:
                basedir = runner.home_dir(cloudify_agent['user'])
        cloudify_agent['basedir'] = basedir

    if 'agent_dir' not in cloudify_agent:
        name = cloudify_agent['name']
        basedir = cloudify_agent['basedir']
        if cloudify_agent['windows']:
            agent_dir = '{0}\\{1}'.format(basedir, name)
        else:
            agent_dir = os.path.join(basedir, name)
        cloudify_agent['agent_dir'] = agent_dir

    if 'workdir' not in cloudify_agent:
        agent_dir = cloudify_agent['agent_dir']
        if cloudify_agent['windows']:
            workdir = '{0}\\{1}'.format(agent_dir, 'work')
        else:
            workdir = os.path.join(agent_dir, 'work')
        cloudify_agent['workdir'] = workdir

    if 'envdir' not in cloudify_agent:
        agent_dir = cloudify_agent['agent_dir']
        if cloudify_agent['windows']:
            envdir = '{0}\\{1}'.format(agent_dir, 'env')
        else:
            envdir = os.path.join(agent_dir, 'env')
        cloudify_agent['envdir'] = envdir