Skip to content

Commit c7d6cf5

Browse files
caberoscaberos
authored andcommitted
New command ipsec order
1 parent 119d2b3 commit c7d6cf5

File tree

7 files changed

+130
-1
lines changed

7 files changed

+130
-1
lines changed

SoftLayer/CLI/routes.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@
210210
('ipsec:translation-remove', 'SoftLayer.CLI.vpn.ipsec.translation.remove:cli'),
211211
('ipsec:translation-update', 'SoftLayer.CLI.vpn.ipsec.translation.update:cli'),
212212
('ipsec:update', 'SoftLayer.CLI.vpn.ipsec.update:cli'),
213+
('ipsec:order', 'SoftLayer.CLI.vpn.ipsec.order:cli'),
213214

214215
('loadbal', 'SoftLayer.CLI.loadbal'),
215216
('loadbal:detail', 'SoftLayer.CLI.loadbal.detail:cli'),

SoftLayer/CLI/vpn/ipsec/order.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""Order a IPSec VPN tunnel."""
2+
# :licenses: MIT, see LICENSE for more details.
3+
4+
import click
5+
6+
import SoftLayer
7+
8+
from SoftLayer.CLI import environment
9+
from SoftLayer.CLI import formatting
10+
11+
12+
@click.command(cls=SoftLayer.CLI.command.SLCommand, )
13+
@click.option('--datacenter', '-d', required=True, prompt=True, help="Datacenter shortname")
14+
@environment.pass_env
15+
def cli(env, datacenter):
16+
"""Order/create a IPSec VPN tunnel instance."""
17+
18+
ipsec_manager = SoftLayer.IPSECManager(env.client)
19+
20+
result = ipsec_manager.order(datacenter, ['IPSEC_STANDARD'])
21+
22+
table = formatting.KeyValueTable(['Name', 'Value'])
23+
table.align['name'] = 'r'
24+
table.align['value'] = 'l'
25+
table.add_row(['Id', result['orderId']])
26+
table.add_row(['Created', result['orderDate']])
27+
table.add_row(['Name', result['placedOrder']['items'][0]['description']])
28+
29+
env.fout(table)

SoftLayer/fixtures/SoftLayer_Product_Order.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,3 +303,21 @@
303303
"id": 1071,
304304
"keyName": "PUBLIC_NETWORK_VLAN"}}
305305
]}
306+
307+
ipsec_placeOrder = {
308+
"orderDate": "2022-07-14T16:09:08-06:00",
309+
"orderId": 123456,
310+
"placedOrder": {
311+
"items": [
312+
{
313+
"categoryCode": "network_tunnel",
314+
"description": "IPSEC - Standard",
315+
"id": 931479898,
316+
"itemId": 1092,
317+
"itemPriceId": "2048",
318+
319+
}
320+
]
321+
322+
}
323+
}

SoftLayer/fixtures/SoftLayer_Product_Package.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,12 @@
851851
"keyName": "LOAD_BALANCER_UPTIME",
852852
}
853853
}]
854-
}]
854+
}, {
855+
"firstOrderStepId": 1,
856+
"id": 0,
857+
"isActive": 1,
858+
"keyName": "ADDITIONAL_PRODUCTS",
859+
"name": "Additional Products"}]
855860

856861
getItems = [
857862
{
@@ -2171,3 +2176,48 @@
21712176
}]
21722177
}
21732178
]
2179+
2180+
getAllObjectsIPSEC = [{
2181+
"firstOrderStepId": 1,
2182+
"id": 0,
2183+
"isActive": 1,
2184+
"keyName": "ADDITIONAL_PRODUCTS",
2185+
"name": "Additional Products"}]
2186+
2187+
getItems_IPSEC = [{
2188+
"description": "IPSEC - Standard",
2189+
"id": 1092,
2190+
"keyName": "IPSEC_STANDARD",
2191+
"categories": [
2192+
{
2193+
"categoryCode": "network_tunnel",
2194+
"id": 117,
2195+
"name": "Network Tunnel",
2196+
"quantityLimit": 0,
2197+
},
2198+
{
2199+
"categoryCode": "one_time_charge",
2200+
"id": 33,
2201+
"name": "One Time Charge",
2202+
"quantityLimit": 0,
2203+
}
2204+
],
2205+
"itemCategory": {
2206+
"categoryCode": "network_tunnel",
2207+
"id": 117,
2208+
"name": "Network Tunnel",
2209+
"quantityLimit": 0,
2210+
},
2211+
"prices": [
2212+
{
2213+
"id": 51379,
2214+
"itemId": 1092,
2215+
"laborFee": "0",
2216+
"locationGroupId": 503,
2217+
"oneTimeFee": "0",
2218+
"recurringFee": "102",
2219+
"setupFee": "0",
2220+
"sort": 0,
2221+
}
2222+
]
2223+
}]

SoftLayer/managers/ipsec.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"""
88

99
from SoftLayer.exceptions import SoftLayerAPIError
10+
from SoftLayer.managers import ordering
1011
from SoftLayer import utils
1112

1213

@@ -284,3 +285,17 @@ def update_tunnel_context(self, context_id, friendly_name=None,
284285
if phase2_key_ttl is not None:
285286
context['phaseTwoKeylife'] = phase2_key_ttl
286287
return self.context.editObject(context, id=context_id)
288+
289+
def order(self, datacenter, item_package):
290+
"""Create a license
291+
292+
:param string datacenter: the datacenter shortname
293+
:param string[] item_package: items array
294+
"""
295+
complex_type = 'SoftLayer_Container_Product_Order_Network_Tunnel_Ipsec'
296+
ordering_manager = ordering.OrderingManager(self.client)
297+
return ordering_manager.place_order(package_keyname='ADDITIONAL_PRODUCTS',
298+
location=datacenter,
299+
item_keynames=item_package,
300+
complex_type=complex_type,
301+
hourly=False)

docs/cli/ipsec.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,3 +272,7 @@ The following is an example of updating an existing address translation entry.
272272

273273
$ slcli ipsec translation-update 445 --translation-id 15924 --static-ip 10.1.249.86 --remote-ip 50.100.0.8 --note 'new email server'
274274
Updated translation #15924
275+
276+
.. click:: SoftLayer.CLI.vpn.ipsec.order:cli
277+
:prog: ipsec order
278+
:show-nested:

tests/CLI/modules/ipsec_tests.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77

88
import json
99

10+
1011
from SoftLayer.CLI.exceptions import ArgumentError
1112
from SoftLayer.CLI.exceptions import CLIHalt
13+
from SoftLayer.fixtures import SoftLayer_Product_Order
14+
from SoftLayer.fixtures import SoftLayer_Product_Package
1215
from SoftLayer import testing
1316
from SoftLayer import utils
1417

@@ -508,3 +511,12 @@ def test_ipsec_translation_update(self):
508511
'internalIpAddress': '10.50.0.1',
509512
'customerIpAddress': '50.50.0.1',
510513
'notes': 'lost'},))
514+
515+
def test_ipsec_order(self):
516+
_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
517+
_mock.return_value = SoftLayer_Product_Package.getItems_IPSEC
518+
519+
order_mock = self.set_mock('SoftLayer_Product_Order', 'placeOrder')
520+
order_mock.return_value = SoftLayer_Product_Order.ipsec_placeOrder
521+
result = self.run_command(['ipsec', 'order', '-d', 'dal13'])
522+
self.assert_no_fail(result)

0 commit comments

Comments
 (0)