Добрый день!
Хочу добавить Dockerfile в архив tar, используя стандартную утилиту tarfile из Python, но получаю ошибку
BaseException: invalid header в случае если ставлю mode = "a". Если ставлю mode = "w", то все норм, файл добавляется, но как вы понимаете все остальное стирается.
Мой код:
def insert_dockerfile_to_tarfile(file_path: str, dockerfile: str):
string = dockerfile.encode('utf-8')
tarinfo = tarfile.TarInfo(name="Dockerfile")
data = io.BytesIO(string)
tarinfo.size = data.getbuffer().nbytes
tarinfo.type = tarfile.REGTYPE
try:
with tarfile.open(file_path, "a") as tar:
tar.addfile(tarinfo = tarinfo, fileobj=data)
except Exception as e:
raise BaseException(str(e))
Тесты на pytest падают при запуске:
full_path = "./archive.tar"
dockerfile = """
FROM nginx:stable-alpine
WORKDIR /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
"""
def test_insert_dockerfile_to_tarfile():
# Удаляем Dockerfile
remove_dockerfile()
# Проверяем отсутствие Dockerfile
assert check_dockerfile() == False
# Добавляем новый Dockerfile с помощью тестируемой функции
insert_dockerfile_to_tarfile(full_path, dockerfile)
# Проверяем наличие Dockerfile
assert check_dockerfile() == True