2016-09-13 15 views
0

仮想マシンのセットをプロビジョニングするためにAnsibleを使用しています。これを行うために、我々はansibleの一環として、ここで見つけるsoftlayer.pyスクリプトを使用している:https://github.com/ansible/ansible/blob/devel/contrib/inventory/softlayer.pySoftLayer APIとAnonymousを使用してVMをプロビジョニングできません。

我々が実行されている:ansible-playbook manifest.yml -s -i softlayer.py

manifest.ymlはそのべき条項は、当社のVM ansibleタスクの束が含まれています。ここで削除されたすべての機密情報を持つ例である:それはあらゆる使用のかどう

以下
- gather_facts: false 
hosts: localhost 
name: Build Servers 
sudo: false 
tasks: 
- local_action: 
cpus: 4 
datacenter: sjc03 
dedicated: false 
disks: 
- 25 
domain: test.example.sample.net 
hostname: machine-one 
hourly: false 
memory: 8192 
module: sl_vm 
nic_speed: 1000 
os_code: UBUNTU_14_64 
private: true 
private_vlan: 1234567 
ssh_keys: [] 
tags: 
- tagone 
- tagtwo 
- tagthree 
- tagfour 
- test.example.sample.net 
name: Build machine-one server 

は、完全なエラー出力です:

Inventory script (softlayer.py) had an execution error: Traceback (most recent call last): 
File "/opt/test/job/softlayer.py", line 207, in <module> 
SoftLayerInventory() 
File "/opt/test/job/softlayer.py", line 84, in __init__ 
self.get_all_servers() 
File "/opt/test/job/softlayer.py", line 204, in get_all_servers 
self.get_virtual_servers() 
File "/opt/test/job/softlayer.py", line 188, in get_virtual_servers 
instances = vs.list_instances(mask=mask) 
File "/usr/local/lib/python2.7/dist-packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/managers/vs.py", line 141, in list_instances 
return func(**kwargs) 
File "/usr/local/lib/python2.7/dist-packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/API.py", line 362, in call_handler 
return self(name, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/API.py", line 330, in call 
return self.client.call(self.name, name, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/API.py", line 226, in call 
return self.transport(request) 
File "/usr/local/lib/python2.7/dist-packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/transports.py", line 162, in __call__ 
raise exceptions.TransportError(ex.response.status_code, str(ex)) 
SoftLayer.exceptions.TransportError: TransportError(500): 500 Server Error: Internal Server Error for url: https://api.softlayer.com/xmlrpc/v3.1/SoftLayer_Account 

これを引き起こしている可能性がありますか?

答えて

1

例外によると、多くの理由のために500エラーの多くが存在する:

  • タイムアウト
  • メモリのうち、無効な要求
  • バグ

私は、Ansibleがどのように処理して、パラメータをに送るのか分かりませんを参照してください。しかし、AnabilitiesはSoftLayer-4.0.3を使用しており、SoftLayer API Python Clientはv5.2.0をリリースしました。これを使用して、最新のアップデートを入手し、起こりうる問題を回避してください。

は、私はあなたがしようとした同じパラメータを送信 SoftLayer Python Command-line Interfaceを使用していくつかのテストを行なったし、正常に動作している:

slcli vs create --hostname=machine-one --domain=stest.example.sample.net --cpu 4 --memory 8192 -o UBUNTU_14_64 --datacenter=sjc03 --billing=monthly --tag tagone,tagtwo,tagthree,tagfour,test.example.sample.net --public --network 1000 --private 

私はAnsibleを確認し、それを修正することができるようにするために、下記のリンクで問題を送信することをお勧めします:

https://github.com/ansible/ansible/issues

1

これは、特定のアカウントにし、特定のマスクを/資格情報の特定のセットでhttps://api.softlayer.com/xmlrpc/v3.1/SoftLayer_AccountにgetVirtualGuestsを呼び出すに固有のようです。私は元の質問で述べた特定の資格情報を使用して500エラーを打つ上

<?xml version='1.0'?> 
<methodCall> 
<methodName>getVirtualGuests</methodName> 
<params> 
<param> 
<value><struct> 
<member> 
<name>headers</name> 
<value><struct> 
<member> 
<name>SoftLayer_ObjectMask</name> 
<value><struct> 
<member> 
<name>mask</name> 
<value><string>mask[id,globalIdentifier,hostname,domain,fullyQualifiedDomainName,primaryBackendIpAddress,primaryIpAddress,datacenter,tagReferences.tag.name,lastKnownPowerState.name,powerState,maxCpu,maxMemory,activeTransaction.transactionStatus[friendlyName,name],status]</string></value> 
</member> 
</struct></value> 
</member> 
<member> 
<name>SoftLayer_AccountObjectFilter</name> 
<value><struct> 
</struct></value> 
</member> 
<member> 
<name>authenticate</name> 
<value><struct> 
<member> 
<name>apiKey</name> 
<value><string>xxxxxxx</string></value> 
</member> 
<member> 
<name>username</name> 
<value><string>example</string></value> 
</member> 
</struct></value> 
</member> 
</struct></value> 
</member> 
</struct></value> 
</param> 
</params> 
</methodCall> 

XMLRPCエンドポイントにそのXMLを掲示します。別の(有効な)資格情報を使用すると、期待通りのサーバーリストが返されます。無効な資格情報を入力すると、「無効なAPIトークン」が表示されます。私が期待しているように戻ってくる。

500件の驚くべきことは、(SoftLayer-Total-Items:70がヘッダーに返されたように)クエリを実行したようですが、HTTPコードが500であり、応答の本文が空の。

slcli -vvv vs listのhttpリクエストを調べると(成功した場合)、別のマスクが同じメソッドに送信されていることがわかります。そのため、おそらく不可能なsoftlayer.pyのマスクが関係している可能性があります。

関連する問題