コード例 #1
0
ファイル: deploy.py プロジェクト: HasAusten/freight_forwarder
    def deploy(self, args, **extra_args):
        """Deploy a docker container to a specific container ship (host)

        :param args:
        :type args:
        """
        if not isinstance(args, argparse.Namespace):
            raise TypeError(logger.error("args should of an instance of argparse.Namespace"))

        # create new freight forwarder
        freight_forwarder = FreightForwarder()

        # create commercial invoice this is the contact given to freight forwarder to dispatch containers and images
        commercial_invoice = freight_forwarder.commercial_invoice(
            'deploy',
            args.data_center,
            args.environment,
            args.service
        )

        # deploy containers.
        bill_of_lading = freight_forwarder.deploy_containers(commercial_invoice, args.tag, args.env)

        # pretty lame... Need to work on return values through to app to make them consistent.
        exit_code = 0 if bill_of_lading else 1

        if exit_code != 0:
            exit(exit_code)
コード例 #2
0
    def deploy(self, args, **extra_args):
        """Deploy a docker container to a specific container ship (host)

        :param args:
        :type args:
        """
        if not isinstance(args, argparse.Namespace):
            raise TypeError(
                logger.error(
                    "args should of an instance of argparse.Namespace"))

        # create new freight forwarder
        freight_forwarder = FreightForwarder()

        # create commercial invoice this is the contact given to freight forwarder to dispatch containers and images
        commercial_invoice = freight_forwarder.commercial_invoice(
            'deploy', args.data_center, args.environment, args.service)

        # deploy containers.
        bill_of_lading = freight_forwarder.deploy_containers(
            commercial_invoice, args.tag, args.env)

        # pretty lame... Need to work on return values through to app to make them consistent.
        exit_code = 0 if bill_of_lading else 1

        if exit_code != 0:
            exit(exit_code)
コード例 #3
0
class FreightForwarderTest(unittest.TestCase):
    def setUp(self):
        self.freight_forwarder = FreightForwarder(
            config_path_override=os.path.join(os.getcwd(),
                                              'tests',
                                              'fixtures',
                                              'test_freight_forwarder.yaml'),
            verbose=False
        )

    def tearDown(self):
        del self.freight_forwarder

    @mock.patch('freight_forwarder.freight_forwarder.CommercialInvoice', create=True)
    def test_commercial_invoice_export_and_deploy_service(self, mock_commercial_invoice):
        self.freight_forwarder.commercial_invoice(
            action='export',
            data_center='local',
            environment='development',
            transport_service='tomcat-test'
        )
        commercial_invoice_services = mock_commercial_invoice.call_args[1].get('services')
        self.assertEqual(commercial_invoice_services['tomcat_test']['build'],
                         './Dockerfile')
        self.assertIsInstance(commercial_invoice_services['tomcat_test'], ConfigDict)

        self.assertNotIn('image', commercial_invoice_services['tomcat_test'].values())

    @mock.patch.object(FreightForwarder, '_FreightForwarder__complete_distribution')
    @mock.patch.object(FreightForwarder, '_FreightForwarder__dispatch')
    @mock.patch.object(FreightForwarder, '_FreightForwarder__wait_for_dispatch')
    @mock.patch.object(FreightForwarder, '_FreightForwarder__service_deployment_validation')
    @mock.patch.object(FreightForwarder, '_FreightForwarder__write_state_file', autospec=True)
    @mock.patch.object(FreightForwarder, '_FreightForwarder__validate_commercial_invoice')
    @mock.patch('freight_forwarder.commercial_invoice.commercial_invoice.ContainerShip', create=True)
    @mock.patch('freight_forwarder.freight_forwarder.logger', autospec=True)
    def test_assemble_fleet_with_yaml_variables_in_hosts(self,
                                                         mock_logger,
                                                         mock_container_ship,
                                                         mock_validate_commercial_invoice,
                                                         mock_write_state_file,
                                                         mock_service_deployment_validation,
                                                         mock_wait_for_dispatch,
                                                         mock_dispatch,
                                                         mock_complete_distribution
                                                         ):
        """
        Verify that feel is built correctly based on the provided configuration data
        :param mock_commercial_invoice:
        :return:
        """
        mock_registries = mock.patch.object(CommercialInvoice, '_create_registries', return_value={
            'tune_dev': RegistryV1Factory(),
            u'docker_hub': RegistryV1Factory()
        })
        mock_registries.start()
        mock_transport_service = mock.MagicMock(return_value='tomcat-test')

        self.freight_forwarder._bill_of_lading = {'failures': {}, 'successful': {}}
        commercial_invoice = self.freight_forwarder.commercial_invoice(
            action='deploy',
            data_center='local',
            environment='staging',
            transport_service=mock_transport_service()
        )
        mock_validate_commercial_invoice.return_value = commercial_invoice

        test_deployment = self.freight_forwarder.deploy_containers(
            commercial_invoice
        )

        # Ensure output of deployment is True based on no errors during the deployment process
        self.assertTrue(test_deployment)

        # Validate output of logging to ensure the correct host is output to the user
        calls = [call('Running deploy.'),
                 call('dispatching service: ffbug-example-tomcat-test on host: https://192.168.99.100:2376.')]
        mock_logger.info.assert_has_calls(calls)