我想在同一个新人,私人和公共场所创建一个集群,但我不能 我试过了ansible,但它没有奏效 现在我尝试使用以下python代码
import SoftLayer
import time
client = SoftLayer.create_client_from_env(username='username',
api_key='key')
cpus = 8
ssh_keys = 682641
memory = 16384
mgr = SoftLayer.VSManager(client)
for id in range(1, 4):
host = u'dnode-%d' % (id)
tag = u'slave'
nodes = {
'domain': u'domain',
'hostname': host,
'datacenter': u'dal09',
'dedicated': False,
'private': False,
'cpus': cpus,
'os_code' : u'CENTOS_LATEST',
'hourly': True,
'ssh_keys': [ssh_keys],
# 'disks': ('25'),
'local_disk': True,
'memory': memory,
'tags': (tag)
}
vsi = mgr.create_instance(**nodes)
print vsi
time.sleep(10)# this is to avoid instantiation errorÇ:
SoftLayer.exceptions.SoftLayerAPIError:SoftLayerAPIError(SoftLayer_Exception_Public):作为技术孵化器计划的积极参与者,您一次只能下一个订单。目前,您有一个挂单,需要最终处置才能下单。
这有时会起作用,但并非总是如此。 我尝试过使用public_vlan和private_vlan属性,但是当我这样做时,服务器并没有被实例化。
尼尔森回答后,更新。 好的,我必须更改我的python代码以从第一个创建的工作站获取网络,并将其设置在群集中的以下服务器中。 对于我需要实例化的服务器数量,如果没有可用的网络ips会发生什么? 有没有办法确定哪个网络更好地实例化我的集群? 是否有列出可用网络的服务?
答案 0 :(得分:1)
如果您希望您的计算机位于同一网络中,则需要在订单中为公共网络和专用网络指定VLAN,否则无法保证它们最终会位于同一网络中。请参阅有关订单的示例:
https://softlayer.github.io/python/create_vsi_options/
如果你的服务器没有被启动,这可能是softlayer配置过程的一个问题我建议你向softlayer提交一张票,并询问他们为什么你的服务器没有被启动。
关于您的另一个错误(与一个订单相关的错误),这是对您帐户的限制,如果您想要更改它,您需要与一些softlayer的销售人员交谈。您可以修改当前代码,添加等待直到订单完成,然后进行下一个订单,softlayer Python APi有一个方法可以看到:
https://github.com/softlayer/softlayer-python/blob/master/SoftLayer/managers/vs.py#L393
你只需要在代码中添加如下内容:
实施例:: #一旦vsi 12345准备就绪,或者经过10次检查后,将返回 ready = mgr.wait_for_ready(12345,10)
号码" 12345"是您刚刚订购的服务器的ID,您可以从以下位置获取该ID:
vsi = mgr.create_instance(**个节点) print vsi [" id"]
或者您可以尝试使用此方法一次创建多个服务器: https://github.com/softlayer/softlayer-python/blob/master/SoftLayer/managers/vs.py#L549
此链接也可以帮助您使用VLAN。 http://sldn.softlayer.com/blog/phil/CCI-VLAN-Specification
此致
答案 1 :(得分:1)
关于你的问题"是否有列出可用网络的服务?" 。试试这个脚本,它将有助于从您的帐户中获得免费插槽(免费IP地址):
"""
This script retrieves the Total Ip Addresses, Usable Ip Address Count and Free Slots
Important manual pages:
http://sldn.softlayer.com/reference/services/SoftLayer_Account/getNetworkVlans
http://sldn.softlayer.com/article/object-masks
http://sldn.softlayer.com/article/object-filters
License: http://sldn.softlayer.com/article/License
Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
"""
import SoftLayer
from prettytable import PrettyTable
# Declare your SoftLayer username and apiKey
username = 'set me'
apikey = 'set me'
# Contact To SoftLayer
client = SoftLayer.Client(username=username, api_key=apikey)
# Declare an Object Mask to get additional information
object_mask = 'mask[primaryRouter,primarySubnet[datacenter[name]],subnets[billingItem, subnetType,networkIdentifier, cidr, totalIpAddresses, usableIpAddressCount, ipAddresses[ipAddress, isReserved, virtualGuest, hardware]]]'
result = client['SoftLayer_Account'].getNetworkVlans(mask=object_mask)
x = PrettyTable(["Vlan Id", "Vlan Number", "Subnet", "Total Ip Addresses", "Usable Ip Address Count","Free Slots"])
count = 0
for vlan in result:
for subnet in vlan['subnets']:
for item in subnet['ipAddresses']:
if item['isReserved'] == True:
count = count + 1
if 'hardware' in item:
count = count + 1
if 'virtualGuest' in item:
count = count + 1
if (int(subnet['usableIpAddressCount']) - count) > 0:
if subnet['subnetType'] == 'PRIMARY' or subnet['subnetType'] == 'ADDITIONAL_PRIMARY':
x.add_row([vlan['id'], str('%s %s' % (vlan['primaryRouter']['hostname'], vlan['vlanNumber'])), str('%s/%s' % (subnet['networkIdentifier'], subnet['cidr'])), subnet['totalIpAddresses'], subnet['usableIpAddressCount'], (int(subnet['usableIpAddressCount']) - count)])
count = 0
print(x)
答案 2 :(得分:0)
可以使用下一个请求获取公共或私有的集群及其EndPoints:
https://$username:$apiKey@api.softlayer.com/rest/v3/SoftLayer_Network_Storage/$networkStorageId/getObjectStorageConnectionInformation.json
Method: GET
将$ username,$ apiKey和$ networkStorageId替换为您的信息。
我不确定这是否满足您的所有要求,但它可能是将此请求的结果复制到ansible或python的起点。不过我要用python代码更新它。如果此请求可以帮助您实施,请告诉我们。