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)
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)
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)
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)
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
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)
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))
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))
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)
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)
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