2017-06-15 7 views
0

OpenstackSDKを使用してインスタンス作成を自動化し、userdataというコマンドでbashスクリプトを渡しています。しかし、たとえインスタンスが作成されていても、スクリプトは実行されません。これをGUIで手動で行うと、新しく作成されたインスタンスに対してbashスクリプトが正常に実行されます。Openstack API - インスタンスを作成してもユーザーデータは受け入れられません。<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 
    ) 

注:Base64でファイルbutstillが に失敗したとしても、シリアライズJSONではありませんエンコードしようとしました。

コードスニペット:この上

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

でき、誰のアドバイスをしてください?

ありがとう

+0

ファイルとして: F = encodeutils.safe_encode(file.read()。 ( 'utf-8')) init_script = base64.b64encode(f).decode( 'utf-8') –

答えて

0

Python3は、文字列とバイナリを別々に処理します。また、bash/cloud-configファイルをOpenstackSDK経由で--user_dataに渡すには、base46でエンコードする必要があります。

コードスニペット:オープンと

(USER_DATA、 'R')ファイルとして:(。file.read()をコード( 'UTF-8')) F = encodeutils.safe_encode init_script = BASE64。 b64encodeオープン(USER_DATA、 'R')とR&D 後に解決策を見つけた(F).decode( 'UTF-8')

関連する問題