2017-06-15 2 views
0

J'automatise la création d'instance en utilisant OpenstackSDK et en passant le script bash avec les commandes en tant que données utilisateur. Mais le script ne s'exécute pas même si l'instance est créée. Lorsque je le fais manuellement via une interface graphique, les scripts bash s'exécutent correctement sur l'instance nouvellement créée.API Openstack - La création d'instances n'accepte pas les données utilisateur = <bash script>

#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 
    ) 

Note: Aussi essayé de coder comme fichier Base64 butstill a échoué avec n'est pas JSON sérialisable.

Extrait de code:

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

Can à quiconque des conseils à ce sujet, s'il vous plaît?

Merci

+0

Trouvé la solution après R & D avec ouverte (USER_DATA, 'r') en tant que fichier: f = encodeutils.safe_encode (file.read(). encoder ('utf-8')) init_script = base64.b64encode (f) .decode ('utf-8') –

Répondre

0

Python3 gère différemment les chaînes et les binaires. De même, pour passer le fichier bash/cloud-config à --user_data via OpenstackSDK, il doit être codé en base46.

Extrait de code:

avec ouverte (USER_DATA, 'r') en tant que fichier: (. File.read() coder ('utf-8')) = f encodeutils.safe_encode init_script = base64. b64encode (f) .decode ('utf-8')