Ibm cloud infrastructure 由于500个服务器错误,无法使用SoftLayer API和Ansible配置VM

Ibm cloud infrastructure 由于500个服务器错误,无法使用SoftLayer API和Ansible配置VM,ibm-cloud-infrastructure,Ibm Cloud Infrastructure,我们正在使用Ansible提供一组虚拟机。为此,我们使用此处找到的softlayer.py脚本作为ansible的一部分: 我们正在运行:ansible playbook manifest.yml-s-i softlayer.py yml包含一组ansible任务,这些任务应该为我们的VM提供资源。以下是删除所有敏感信息的示例: - gather_facts: false hosts: localhost name: Build Servers sudo: false tasks: - loca

我们正在使用Ansible提供一组虚拟机。为此,我们使用此处找到的softlayer.py脚本作为ansible的一部分:

我们正在运行:
ansible playbook manifest.yml-s-i softlayer.py

yml包含一组ansible任务,这些任务应该为我们的VM提供资源。以下是删除所有敏感信息的示例:

- 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
清单脚本(softlayer.py)有一个执行错误:回溯(最近一次调用last):
文件“/opt/test/job/softlayer.py”,第207行,在
SoftLayerInventory()
文件“/opt/test/job/softlayer.py”,第84行,在__
self.get_所有_服务器()
get_all_服务器中的文件“/opt/test/job/softlayer.py”,第204行
self.get_虚拟服务器()
get_虚拟_服务器中的文件“/opt/test/job/softlayer.py”,第188行
实例=vs.list\u实例(掩码=掩码)
文件“/usr/local/lib/python2.7/dist packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/managers/vs.py”,第141行,在列表实例中
返回函数(**kwargs)
文件“/usr/local/lib/python2.7/dist packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/API.py”,第362行,在call_handler中
返回自我(名称,*args,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/API.py”,第330行,调用中
返回self.client.call(self.name,name,*args,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/API.py”,第226行,调用中
返回自动传输(请求)
文件“/usr/local/lib/python2.7/dist packages/SoftLayer-4.0.3-py2.7.egg/SoftLayer/transports.py”,第162行,in__调用__
引发异常。传输错误(例如响应状态代码,str(例如))
SoftLayer.exceptions.TransportError:TransportError(500):500服务器错误:url的内部服务器错误:https://api.softlayer.com/xmlrpc/v3.1/SoftLayer_Account

是什么原因导致了这种情况?

根据异常情况,存在大量500个错误,原因有很多:

  • 超时
  • 内存不足
  • 无效请求
  • 虫子
我不确定Ansible是如何处理和发送参数的,但快速查看,Ansible正在使用SoftLayer-4.0.3,并已发布了v5.2.0,我们建议使用此版本,以便获得最新更新并避免可能的问题

我使用与您尝试的相同参数进行了一些测试,效果良好:

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能够验证和修复它:


根据例外情况,由于多种原因,存在大量500个错误:

  • 超时
  • 内存不足
  • 无效请求
  • 虫子
我不确定Ansible是如何处理和发送参数的,但快速查看,Ansible正在使用SoftLayer-4.0.3,并已发布了v5.2.0,我们建议使用此版本,以便获得最新更新并避免可能的问题

我使用与您尝试的相同参数进行了一些测试,效果良好:

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能够验证和修复它:


这似乎是特定于使用特定凭据集/特定帐户和特定掩码调用getVirtualGuests的

<?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>

获取虚拟用户
标题
软层对象掩码
面具
掩码[id,globalIdentifier,主机名,域,FullyQualifiedDomain,primaryBackendIpAddress,PrimaryPaddress,数据中心,tagReferences.tag.name,lastKnownPowerState.name,powerState,maxCpu,maxMemory,activeTransaction.transactionStatus[friendlyName,name],状态]
SoftLayer\u AccountObjectFilter
证明…是真实的
阿皮基
xxxxxxx
用户名
例子
将该XML发布到上面的xmlrpc端点时,我使用原始问题中提到的特定凭据遇到了500个错误。如果我使用了一组不同的(有效)凭据,我会像预期的那样返回我的服务器列表。如果我提供了无效的凭据,那么我将收到“无效的API令牌”。正如我所期望的那样

在500的情况下,令人惊讶的是,它似乎确实运行了查询(因为SoftLayer Total Items:70在报头中返回),但HTTP代码是500,响应主体是空的


如果我检查
slcli-vvv vs list
(成功)发出的http请求,我会发现它向同一方法发送了不同的掩码,因此,ansible softlayer.py中的掩码可能是相关的。

这似乎是特定于使用特定凭据集/在特定帐户和特定掩码上调用getVirtualGuests

<?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>

获取虚拟用户
标题
软层对象掩码
面具
掩码[id,globalIdentifier,主机名,域,FullyQualifiedDomain,primaryBackendIpAddress,PrimaryPaddress,数据中心,tagReferences.tag.name,lastKnownPowerState.name,powerState,maxCpu,maxMemory,activeTransaction.transactionStatus[friendlyName,name],状态]
SoftLayer\u AccountObjectFilter
证明…是真实的
阿皮基
xxxxxxx
用户名
例子
将该XML发布到上面的xmlrpc端点时,我使用原始问题中提到的特定凭据遇到了500个错误。如果我使用了一组不同的(有效)凭据,我会像预期的那样返回我的服务器列表。如果我提供了无效的凭据,那么我将收到“无效的API令牌”。正如我所期望的那样

在500的情况下,令人惊讶的是,它似乎确实运行了查询(因为SoftLayer Total Items:70在报头中返回),但HTTP代码是500,响应主体是空的

如果我检查
slcli-vvv vs list
(成功)发出的http请求,我发现它向同一方法发送了不同的掩码,因此ansible softlayer.py中的掩码可能是相关的