def test_to_monitor_exception(mocker, caplog): mock_client = mocker.Mock(spec=docker.APIClient) mock_client.base_url = ouroboros.defaults.LOCAL_UNIX_SOCKET mock_client.containers.side_effect = BaseException('I blew up!!') container.to_monitor(monitor='test', api_client=mock_client) assert 'connect to Docker API' in caplog.text
def test_to_monitor(mocker): mock_client = mocker.Mock(spec=docker.APIClient) mock_client.base_url = ouroboros.defaults.LOCAL_UNIX_SOCKET mock_client.containers.return_value = [] result = container.to_monitor(monitor='test', api_client=mock_client) assert result == [] mock_client.containers.assert_called_once()
def test_to_monitor(mocker, caplog): mock_client = mocker.Mock(spec=docker.APIClient) mock_client.base_url = ouroboros.defaults.LOCAL_UNIX_SOCKET mock_client.containers.return_value = [] caplog.set_level(logging.INFO) result = container.to_monitor(monitor=['test'], ignore=['boop'], api_client=mock_client) assert result == [] assert 'Ignoring container(s): boop' in caplog.text mock_client.containers.assert_called_once()
def main(args, api_client): """Find running containers and update them with images using latest tag""" log = logging.getLogger(__name__) if not container.running(api_client=api_client): log.info('No containers are running') else: updated_count = 0 for running_container in container.to_monitor(monitor=args.monitor, ignore=args.ignore, api_client=api_client): current_image = api_client.inspect_image( running_container['Config']['Image']) try: latest_image = image.pull_latest(image=current_image, keep_tag=args.keep_tag, api_client=api_client) except docker.errors.APIError as e: log.error(e) continue # If current running container is running latest image if not image.is_up_to_date(old_sha=current_image['Id'], new_sha=latest_image['Id']): log.info( f'{container.get_name(container_object=running_container)} will be updated' ) # new container dict to create new container from new_config = container.new_container_properties( old_container=running_container, new_image=latest_image['RepoTags'][0]) container.stop(container_object=running_container, api_client=api_client) container.remove(container_object=running_container, api_client=api_client) new_container = container.create_new(config=new_config, api_client=api_client) container.start(container_object=new_container, api_client=api_client) if args.cleanup: image.remove(old_image=current_image, api_client=api_client) updated_count += 1 log.info(f'{updated_count} container(s) updated') if args.run_once: exit(0)