def test_local_agent_from_package(self, _): agent_name = utils.internal.generate_agent_name() agent_queue = '{0}-queue'.format(agent_name) blueprint_path = resources.get_resource( 'blueprints/agent-from-package/local-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = { 'resource_base': self.resource_base, 'source_url': self.source_url, 'requirements_file': self.requirements_file, 'name': agent_name, 'queue': agent_queue, 'file_server_port': self.fs.port, 'ssl_cert_path': self._rest_cert_path } env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) env.execute('install', task_retries=0) self.assert_daemon_alive(name=agent_name) agent_dict = self.get_agent_dict(env) agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name)
def test_local_agent_from_package_long_name(self, _): """Agent still works with a filepath longer than 128 bytes (package) Paths longer than 128 bytes break shebangs on linux. """ agent_name = 'agent-' + ''.join(uuid.uuid4().hex for i in range(4)) agent_queue = '{0}-queue'.format(agent_name) blueprint_path = resources.get_resource( 'blueprints/agent-from-package/local-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = { 'resource_base': self.resource_base, 'source_url': self.source_url, 'requirements_file': self.requirements_file, 'name': agent_name, 'queue': agent_queue, 'file_server_port': self.fs.port, 'ssl_cert_path': self._rest_cert_path } env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) env.execute('install', task_retries=0) self.assert_daemon_alive(name=agent_name) agent_dict = self.get_agent_dict(env) agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name)
def test_install_new_agent(self): agent_name = utils.internal.generate_agent_name() blueprint_path = resources.get_resource( 'blueprints/install-new-agent/install-new-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = {'name': agent_name, 'ssl_cert_path': self._rest_cert_path} # Necessary to patch this method, because by default port 80 is used def http_rest_host(): return os.environ[constants.MANAGER_FILE_SERVER_URL_KEY] # Necessary to patch, because by default https will be used def file_server_url(*args, **kwargs): return '{0}/resources'.format(http_rest_host()) with self._manager_env(): with patch('cloudify_agent.api.utils.get_manager_file_server_url', file_server_url): env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) with patch('cloudify_agent.operations._http_rest_host', http_rest_host): env.execute('install', task_retries=0) self.assert_daemon_alive(name=agent_name) agent_dict = self.get_agent_dict(env, 'new_agent_host') agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) new_agent_name = agent_dict['name'] self.assertNotEqual(new_agent_name, agent_name) self.assert_daemon_alive(name=new_agent_name) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name) self.wait_for_daemon_dead(name=new_agent_name)
def test_local_agent_from_source_long_name(self, _): """Agent still works with a filepath longer than 128 bytes (source) This test won't pass on windows because some files within the virtualenv exceed 256 bytes, and windows doesn't support paths that long. """ agent_name = 'agent-' + ''.join(uuid.uuid4().hex for i in range(4)) agent_queue = '{0}-queue'.format(agent_name) inputs = { 'source_url': self.source_url, 'requirements_file': self.requirements_file, 'name': agent_name, 'queue': agent_queue, 'ssl_cert_path': self._rest_cert_path } blueprint_path = resources.get_resource( 'blueprints/agent-from-source/local-agent-blueprint.yaml') self.logger.info('Initiating local env') env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) env.execute('install', task_retries=0) self.assert_daemon_alive(name=agent_name) agent_dict = self.get_agent_dict(env) agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name)
def _test_agent_installation(self, agent): if 'user' not in agent: agent['user'] = getpass.getuser() celery = Celery() worker_name = 'celery@{0}'.format(agent['name']) inspect = celery.control.inspect(destination=[worker_name]) self.assertFalse(inspect.active()) _, path = tempfile.mkstemp() with open(path, 'w') as agent_file: agent_file.write(json.dumps(agent)) _, output_path = tempfile.mkstemp() runner = LocalCommandRunner() runner.run('cfy-agent install-local --agent-file {0} ' '--output-agent-file {1} --rest-cert-path {2} ' '--rest-token TOKEN'.format(path, output_path, self._rest_cert_path)) self.assertTrue(inspect.active()) with open(output_path) as new_agent_file: new_agent = json.loads(new_agent_file.read()) command_format = 'cfy-agent daemons {0} --name {1}'.format( '{0}', new_agent['name']) agent_ssl_cert.verify_remote_cert(new_agent['agent_dir']) runner.run(command_format.format('stop')) runner.run(command_format.format('delete')) self.assertFalse(inspect.active()) return new_agent
def _test_local_agent_from_package(self, agent_name, *_): agent_queue = '{0}-queue'.format(agent_name) blueprint_path = resources.get_resource( 'blueprints/agent-from-package/local-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = { 'resource_base': self.resource_base, 'source_url': self.source_url, 'requirements_file': self.requirements_file, 'name': agent_name, 'queue': agent_queue, 'file_server_port': self.fs.port, 'ssl_cert_path': self._rest_cert_path } env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) env.execute('install', task_retries=0) agent_dict = self.get_agent_dict(env) agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(agent_queue)
def test_install_new_agent(self): agent_name = utils.internal.generate_agent_name() blueprint_path = resources.get_resource( 'blueprints/install-new-agent/install-new-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = {'name': agent_name, 'ssl_cert_path': self._rest_cert_path} # Necessary to patch this method, because by default port 80 is used def get_script_url(agent_self): return urljoin(os.environ[constants.MANAGER_FILE_SERVER_URL_KEY], 'cloudify_agent', agent_self._script_filename) with self._manager_env(): env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) with patch( 'cloudify_agent.operations.' 'AgentFilesGenerator._get_script_url', get_script_url): env.execute('install', task_retries=0) self.assert_daemon_alive(name=agent_name) agent_dict = self.get_agent_dict(env, 'new_agent_host') agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) new_agent_name = agent_dict['name'] self.assertNotEqual(new_agent_name, agent_name) self.assert_daemon_alive(name=new_agent_name) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name) self.wait_for_daemon_dead(name=new_agent_name)
def test_install_new_agent(self, *_): agent_name = utils.internal.generate_agent_name() blueprint_path = resources.get_resource( 'blueprints/install-new-agent/install-new-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = { 'name': agent_name, 'ssl_cert_path': self._rest_cert_path } # Necessary to patch this method, because by default port 80 is used def http_rest_host(cloudify_agent): return os.environ[constants.MANAGER_FILE_SERVER_URL_KEY] # Necessary to patch, because by default https will be used def file_server_url(*args, **kwargs): return '{0}/resources'.format(http_rest_host({})) # Need to patch, to avoid broker_ssl_enabled being True @contextmanager def get_amqp_client(agent): yield get_client() with self._manager_env(): with patch('cloudify_agent.api.utils.get_manager_file_server_url', file_server_url): env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) with patch('cloudify_agent.operations._http_rest_host', http_rest_host): with patch('cloudify_agent.operations._get_amqp_client', get_amqp_client): env.execute('install', task_retries=0) agent_dict = self.get_agent_dict(env, 'new_agent_host') agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) new_agent_name = agent_dict['name'] self.assertNotEqual(new_agent_name, agent_name) self.assert_daemon_alive(new_agent_name) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name) self.wait_for_daemon_dead(name=new_agent_name)
def _test_agent_installation(self, agent_config): new_ctx = mock_context() current_ctx.set(new_ctx) self.assert_daemon_dead(agent_config['name']) create_agent(agent_config=agent_config) self.wait_for_daemon_alive(agent_config['name']) new_agent = ctx.instance.runtime_properties['cloudify_agent'] agent_ssl_cert.verify_remote_cert(new_agent['agent_dir']) command_format = 'cfy-agent daemons {0} --name {1}'.format( '{0}', new_agent['name']) runner = LocalCommandRunner() runner.run(command_format.format('stop')) runner.run(command_format.format('delete')) self.assert_daemon_dead(agent_config['name']) return new_agent
def _test_agent_installation(self, agent_config, _): new_ctx = mock_context() current_ctx.set(new_ctx) self.assert_daemon_dead(agent_config['name']) create_agent(agent_config=agent_config) self.wait_for_daemon_alive(agent_config['name']) new_agent = ctx.instance.runtime_properties['cloudify_agent'] agent_ssl_cert.verify_remote_cert(new_agent['agent_dir']) command_format = 'cfy-agent daemons {0} --name {1}'.format( '{0}', new_agent['name']) runner = LocalCommandRunner() runner.run(command_format.format('stop')) runner.run(command_format.format('delete')) self.assert_daemon_dead(agent_config['name']) return new_agent
def test_install_new_agent(self, *_): agent_name = utils.internal.generate_agent_name() blueprint_path = resources.get_resource( 'blueprints/install-new-agent/install-new-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = {'name': agent_name, 'ssl_cert_path': self._rest_cert_path} with self._manager_env(): env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) env.execute('install', task_retries=0) agent_dict = self.get_agent_dict(env, 'new_agent_host') agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) new_agent_name = agent_dict['name'] self.assertNotEqual(new_agent_name, agent_name) self.assert_daemon_alive(new_agent_name) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(name=agent_name) self.wait_for_daemon_dead(name=new_agent_name)
def _test_local_agent_from_package(self, agent_name, *_): agent_queue = '{0}-queue'.format(agent_name) blueprint_path = resources.get_resource( 'blueprints/agent-from-package/local-agent-blueprint.yaml') self.logger.info('Initiating local env') inputs = { 'resource_base': self.resource_base, 'source_url': self.source_url, 'requirements_file': self.requirements_file, 'name': agent_name, 'queue': agent_queue, 'file_server_port': self.fs.port, 'ssl_cert_path': self._rest_cert_path } managers = [ ManagerItem({ 'networks': { 'default': '127.0.0.1' }, 'ca_cert_content': agent_ssl_cert.DUMMY_CERT, 'hostname': 'cloudify' }) ] with patch('cloudify.endpoint.LocalEndpoint.get_managers', return_value=managers): env = local.init_env(name=self._testMethodName, blueprint_path=blueprint_path, inputs=inputs) env.execute('install', task_retries=0) agent_dict = self.get_agent_dict(env) agent_ssl_cert.verify_remote_cert(agent_dict['agent_dir']) env.execute('uninstall', task_retries=1) self.wait_for_daemon_dead(agent_queue)
def _test_agent_installation(self, agent_config): new_ctx = mock_context() current_ctx.set(new_ctx) celery = Celery() worker_name = 'celery@{0}'.format(agent_config['name']) inspect = celery.control.inspect(destination=[worker_name]) self.assertFalse(inspect.active()) create_agent(agent_config=agent_config) self.assertTrue(inspect.active()) new_agent = ctx.instance.runtime_properties['cloudify_agent'] agent_ssl_cert.verify_remote_cert(new_agent['agent_dir']) command_format = 'cfy-agent daemons {0} --name {1}'.format( '{0}', new_agent['name']) runner = LocalCommandRunner() runner.run(command_format.format('stop')) runner.run(command_format.format('delete')) self.assertFalse(inspect.active()) return new_agent
def test_create_ssl_cert(self): self._run('AddSSLCert') # basedir + node_id agent_dir = os.path.join(self.temp_folder, 'd') agent_ssl_cert.verify_remote_cert(agent_dir)
def test_create_ssl_cert(self): self._run('AddSSLCert') agent_ssl_cert.verify_remote_cert( self.input_cloudify_agent['agent_dir'])