示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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)
示例#5
0
 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)
示例#7
0
    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)
示例#9
0
    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
示例#11
0
    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
示例#14
0
 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')
     # basedir + node_id
     agent_dir = os.path.join(self.temp_folder, 'd')
     agent_ssl_cert.verify_remote_cert(agent_dir)
示例#16
0
 def test_create_ssl_cert(self):
     self._run('AddSSLCert')
     agent_ssl_cert.verify_remote_cert(
         self.input_cloudify_agent['agent_dir'])