Openstack API - создание экземпляров не принимает user-data = <bash script>

Я автоматизирую создание экземпляров с помощью OpenstackSDK и передаю сценарий bash с командами в качестве пользовательских данных. Но сценарий не оправдывает, хотя экземпляр ящика. Когда я делаю это вручную с помощью графического интерфейса, bash-скрипты прекрасно работают с только что созданным экземпляром.

#Reading bash script
 with open('elk.sh', 'r') as f:
        init_script = f.read()

server = conn.compute.create_server(
        name=name,
        image_id=IMAGE_ID,
        flavor_id=FLAVOUR_ID,
        networks=[{"uuid": NETWORK_ID}],
        user_data=init_script,    # pass script to the instance
        key_name=KEY_PAIR
    ) 

Примечание. Также пытались выполнить кодирование, так как ошибка файла Base64 по-прежнему не сериализуема в формате JSON.

Фрагмент кода:

 with open(USER_DATA,'r') as file:
        f = file.read()
        bytes_content = bytes(f,encoding='utf-8')
        init_script = base64.b64encode(bytes_content)

Кто-нибудь может посоветовать, пожалуйста?

Спасибо

1 ответ

Python3 по-разному обрабатывает строки и двоичные файлы. Кроме того, чтобы передать файл bash/cloud-config в файл --user_data через OpenstackSDK, он должен быть закодирован в base46.

Фрагмент кода:

с открытым (USER_DATA,'r') в качестве файла: f = encodeutils.safe_encode(file.read().encode('utf-8')) init_script = base64.b64encode(f).decode('utf-8')

Другие вопросы по тегам