November 23, 2017


order_Vyatta.pl

order_Vyatta.pl
# Order a Network Gateway Appliance (Vyatta)
#
# The script orders a (Vyatta) high availability pair
# it uses the SoftLayer_Product_Order::placeOrder to make the order
# For more information see below:
# 
# Important manual pages:
# http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order
# http://sldn.softlayer.com/reference/datatypes/SoftLayer_Container_Product_Order_Hardware_Server_Gateway_Appliance
# http://sldn.softlayer.com/reference/datatypes/SoftLayer_Product_Item_Price
# http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/verifyOrder
# http://sldn.softlayer.com/reference/services/SoftLayer_Product_Order/placeOrder
#
# License: http://sldn.softlayer.com/article/License
# Author: SoftLayer Technologies, Inc. <sldn@softlayer.com>
use lib 'C:/softlayerApis/perl/softlayer-api-perl-client-master/';
use SoftLayer::API::SOAP;
use Data::Dumper;

# Your SoftLayer API username and key.
my $username = 'set me';
my $key = 'set me';

# Building a skeleton SoftLayer_Container_Product_Order object.
# the object contains the configuration for the Vyatta server
# such as the quantity, the location, etc. 
my $product_order= {
    # The number of servers you wish to order.
    # If you wish a high availability  pair you must specify 2 as quantity.
    "quantity" => 2,
    # Building a skeleton SoftLayer_Hardware_Server object to model the hostname and
    # domain we want for our server. If you set quantity greater than 1 then you
    # need to define one hostname/domain pair per server you wish to order.
    "hardware" => [
        {
            "hostname" => "vyattagw", 
            "domain" => "test.com"
        },
        {
            "hostname" => "vyattagw2", 
            "domain" => "test.com"
        }  
    ],
    # 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
    "location" => 265592,
    # The id of the SoftLayer_Product_Package you wish to order.
    # In this case the Network Gateway Appliance (Vyatta) package id is 174.
    "packageId" => 174,      
    # Building 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" => 13738 },
        { "id" => 21010 },
        { "id" => 36044 },
        { "id" => 876 },
        { "id" => 1267 },
        { "id" => 342 },
        { "id" => 273 },
        { "id" => 17129 },
        { "id" => 55 },
        { "id" => 58 },
        { "id" => 420 },
        { "id" => 418 },
        { "id" => 21 },
        { "id" => 57 },
        { "id" => 906 }
    ]  
};

# Building a skeleton SoftLayer_Container_Product_Order_Hardware_Server_Gateway_Appliance object.
# this object contains the order for the Vyatta server.
my $order_data = {
    "orderContainers" => [
        $product_order
    ]
};
  
# Creating a SoftLayer API client object
my $softLayer_product_order = SoftLayer::API::SOAP->new('SoftLayer_Product_Order', undef, $username, $key); 

# 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 approval and
# provisioning process.   
my $result = $softLayer_product_order->verifyOrder($order_data);
if ($result->fault) {
    die 'Unable to create the server. ' . $result->faultstring;
}
print Dumper($result->result);
print ("The order was verified successfully");

Feedback?

If this article contains any error, or leaves any of your questions unanswered, please help us out by opening up a github issue.
Open an issue