SoftLayer API:订购具有特定VLAN的虚拟服务器

时间:2016-04-11 13:46:41

标签: api ibm-cloud-infrastructure

我使用此代码列出我帐户中的可用VLAN

require 'softlayer_api'
require 'pp'

client = SoftLayer::Client.new
account_service = client[:Account]

object_filter = {'networkVlans': {'primaryRouter': {'datacenter': {'name': 'tor01'}}}}
object_mask = 'mask[id,name,primaryRouter[id,datacenter[id,name]]]'

vlans = account_service.object_mask(object_mask).getNetworkVlans(object_filter)

vlans.each { |vlan| pp plan }

我得到了

{"id"=>999999,
 "name"=>"VLAN1",
 "primaryRouter"=>
  {"id"=>777777, "datacenter"=>{"id"=>448994, "name"=>"tor01"}}}
{"id"=>888888,
 "name"=>"VLAN2",
 "primaryRouter"=>
  {"id"=>666666, "datacenter"=>{"id"=>448994, "name"=>"tor01"}}}

当我使用例如888888在虚拟服务器顺序中,尽管明确设置了值,但服务器仍配置了默认VLAN:

server_order = SoftLayer::VirtualServerOrder_Package.new(client)
server_order.datacenter = SoftLayer::Datacenter.datacenter_named 'tor01', client

server_order.hostname = 'hostname'
server_order.domain = 'domain.com'
# See code below to list out all vlan ids for the current account
server_order.private_vlan_id = 888888
server_order.public_vlan_id = 999999
server_order.hourly = true
server_order.configuration_options = config_options

server_order.place_order!()

我错过了什么?订购服务器时如何显式设置VLAN ID?

1 个答案:

答案 0 :(得分:0)

目前存在使用VirtualServerOrder_Package class

指定vlan的问题

我已经开启了一个问题来跟踪此问题:https://github.com/softlayer/softlayer-ruby/issues/111

但是,您可以使用以下脚本来命令VIrtual Server,指定vlan(它不会使用VirtualServerOrder_Package类来订购)。看一下下面的脚本:

# Order Virtual Guest
#
# Important manual pages:
# http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder
# http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order
# http://sldn.softlayer.com/reference/datatypes/SoftLayer_Hardware
# http://sldn.softlayer.com/reference/services/SoftLayer_Product_Item_Price/
#
# License: http://sldn.softlayer.com/article/License
# Author: SoftLayer Technologies, Inc.<sldn@softlayer.com>

require 'rubygems'
require 'softlayer_api'
require 'json'

# Your SoftLayer API username.
USERNAME = 'set me'

# Your SoftLayer API key.
API_KEY = 'set me'

# The number of servers you wish to order in this configuration.
quantity = 1

# Where you'd like your new server provisioned.
# This can either be the id of the datacenter you wish your new server to be
# provisioned in or the string 'FIRST_AVAILABLE' if you have no preference
# where your server is provisioned.
# Location id 3     = Dallas
# Location id 18171 = Seattle
# Location id 37473 = Washington, D.C.
location = '138124' # Dallas 5

# The id of the SoftLayer_Product_Package you wish to order.
package_id = 46

# Build a skeleton SoftLayer_Hardware object to define hostname, domain, public and private vlan.
virtualGuests = [
  {
    'hostname' => 'test', # The hostname of the server you wish to order.
    'domain' => 'example.org', # The domain name of the server you wish to order.
    'primaryNetworkComponent' => { "networkVlan" => { "id" =>  971077}}, # public vlan id
    'primaryBackendNetworkComponent' => {'networkVlan'=> {""=> 971075}} # private vlan id
  }
]

# Build a skeleton SoftLayer_Product_Item_Price objects. These objects contain
# much more than ids, but SoftLayer's ordering system only needs the price's id
# to know what you want to order.

# Every item in SoftLayer's product catalog is assigned an id. Use these ids
# to tell the SoftLayer API which options you want in your new server. Use
# the getActivePackages() method in the SoftLayer_Account API service to get
# a list of available item and price options per available package.
prices = [
  { 'id' => 1640 }, # 1 x 2.0 GHz Core
  { 'id' => 1644 }, # 1 GB RAM
  { 'id' => 13940 }, # CentOS 6.x - LAMP Install (32 bit)
  { 'id' => 2202 }, # 25 GB (SAN)
  { 'id' => 50241 }, # 5000 GB Bandwidth
  { 'id' => 273 }, # 100 Mbps Public & Private Network Uplinks
  { 'id' => 2302 }, # Monitoring Package - Basic
  { 'id' => 55 }, # Host Ping
  { 'id' => 58 }, # Automated Notification
  { 'id' => 420}, # Unlimited SSL VPN Users & 1 PPTP VPN User per account
  { 'id' => 418 }, # Nessus Vulnerability Assessment & Reporting
  { 'id' => 21}, # 1 IP Address
  { 'id' => 57}, # Email and Ticket
  { 'id' => 905}, # Reboot / Remote Console
  {'id' => 14022} # International Services
]

# Build a skeleton SoftLayer_Container_Product_Order_Virtual_Guest object
# containing the order you wish to place.
order_template = {
  'quantity' => quantity,
  'location' => location,
  'packageId' => package_id,
  'prices' => prices,
  'hardware' => virtualGuests
}

# Declare the API client to use the SoftLayer_Product_Order API service
client = SoftLayer::Client.new(username: USERNAME, api_key: API_KEY)
product_order_service = client.service_named('SoftLayer_Product_Order')
begin
  # verifyOrder() will check your order for errors. Replace this with a call to
  # placeOrder() when you're ready to order. Both calls return a receipt object
  # that you can use for your records.
  #
  # Once your order is placed it'll go through SoftLayer's provisioning process.
  # When it's done you'll have a new SoftLayer_Virtual_Guest object and CCI ready
  # to use.
  receipt = product_order_service.verifyOrder(order_template)
  puts receipt
rescue StandardError => exception
  puts "There was an error in your order: #{exception}"
end

让我知道任何问题,怀疑或者如果您需要更多帮助来下订单,