Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

This python script includes all API calls to get the first modem online. At the bottom of the script there is an example of how to mass-import contracts from a CSV file. Feel free to adjust the code as needed. We are using verify=False in the post statements since we assume you haven't set up a proper TLS certificate yet. You may do so using Getting a X.509 certificate via Let's Encrypt.

import json
import requests
session = requests.Session()
session.auth = ('root@localhost.com', 'toor')

cfg_cm = """
UsServiceFlow
{
  UsServiceFlowRef 101;
  QosParamSetType 7;
  MaxRateSustained {qos.us_rate_max_help.0};
  MaxTrafficBurst {{qos.us_rate_max_help.0},*,0.1875};
}

DsServiceFlow
{
  DsServiceFlowRef 1;
  QosParamSetType 7;
  MaxRateSustained {qos.ds_rate_max_help.0};
}

ModemCapabilities
{
  ConcatenationSupport 1;
  IGMPSupport 1;
}

GlobalPrivacyEnable 1;

BaselinePrivacy
{
  AuthTimeout 10;
  ReAuthTimeout 10;
  AuthGraceTime 600;
  OperTimeout 10;
  ReKeyTimeout 10;
  TEKGraceTime 1800;
  AuthRejectTimeout 60;
  SAMapWaitTimeout 1;
  SAMapMaxRetries 4;
}

/* DOCS-CABLE-DEVICE-MIB rfc4639 */
/* SNMP Access to CM */
SnmpMibObject sysLocation.0 String "{test}"; /* strings always inside apostrophes! */
SnmpMibObject docsDevNmAccessIp.10 IPAddress 172.20.0.1;
SnmpMibObject docsDevNmAccessIp.20 IPAddress 172.20.0.1;
SnmpMibObject docsDevNmAccessIpMask.10 IPAddress 255.255.255.255;
SnmpMibObject docsDevNmAccessIpMask.20 IPAddress 255.255.255.255;
SnmpMibObject docsDevNmAccessCommunity.10 String "{provbase.ro_community.0}";
SnmpMibObject docsDevNmAccessCommunity.20 String "{provbase.rw_community.0}";
SnmpMibObject docsDevNmAccessControl.10 Integer 2; /* read */
SnmpMibObject docsDevNmAccessControl.20 Integer 3; /* readWrite */
SnmpMibObject docsDevNmAccessInterfaces.10 String "@";
SnmpMibObject docsDevNmAccessInterfaces.20 String "@";
SnmpMibObject docsDevNmAccessStatus.10 Integer 4; /* createAndGo */
SnmpMibObject docsDevNmAccessStatus.20 Integer 4; /* createAndGo */

/* Firewall */
/* Layer2: filter possibly harmful Ethernet traffic */
SnmpMibObject docsDevFilterLLCUnmatchedAction.0 Integer 1; /* discard if not matching */
SnmpMibObject docsDevFilterLLCStatus.1 Integer 4; /* createAndGo */
SnmpMibObject docsDevFilterLLCStatus.2 Integer 4; /* createAndGo */
SnmpMibObject docsDevFilterLLCIfIndex.1 Integer 0; /* all Interfaces */
SnmpMibObject docsDevFilterLLCIfIndex.2 Integer 0; /* all Interfaces */
SnmpMibObject docsDevFilterLLCProtocolType.1 Integer 1; /* ethertype (default) */
SnmpMibObject docsDevFilterLLCProtocolType.2 Integer 1; /* ethertype (default) */

/* Layer 3 */
SnmpMibObject docsDevFilterLLCProtocol.1 Integer 2048; /* ? depends on docsDevFilterLLCProtocolType */
SnmpMibObject docsDevFilterLLCProtocol.2 Integer 2054; /* IPv4 !? */
SnmpMibObject docsDevFilterIpDefault.0 Integer 2; /* accept for further processing when not matching an prior specified IP filter*/
SnmpMibObject docsDevFilterIpStatus.3 Integer 4; /* createAndGo a filter row */
SnmpMibObject docsDevFilterIpControl.3 Integer 1; /* discard */
SnmpMibObject docsDevFilterIpIfIndex.3 Integer 1; /* all customer facing interfaces */
SnmpMibObject docsDevFilterIpDirection.3 Integer 1; /* inbound traffic */
SnmpMibObject docsDevFilterIpBroadcast.3 Integer 2; /* false - applies to all traffic */
SnmpMibObject docsDevFilterIpSaddr.3 IPAddress 0.0.0.0; /* all ip addresses - masked against docsDevFilterIpSmask */
SnmpMibObject docsDevFilterIpSmask.3 IPAddress 0.0.0.0; /* all ip addresses */
SnmpMibObject docsDevFilterIpDaddr.3 IPAddress 0.0.0.0; /* all ip addresses */
SnmpMibObject docsDevFilterIpDmask.3 IPAddress 0.0.0.0; /* all ip addresses */
SnmpMibObject docsDevFilterIpProtocol.3 Integer 17; /* udp */
SnmpMibObject docsDevFilterIpSourcePortLow.3 Integer 67; /* udp */
SnmpMibObject docsDevFilterIpSourcePortHigh.3 Integer 67; /* udp */
SnmpMibObject docsDevFilterIpDestPortLow.3 Integer 0;
SnmpMibObject docsDevFilterIpDestPortHigh.3 Integer 65535;
""".replace("\n", "\r\n")

# firstname;lastname;street;house_number;zip;city;phone;birthday
contract_csv = """John;Doe;Main Street;1;01234;Anytown;012345678910;1970-01-01
Jane;Doe;Main Street;2;01234;Anytown;012345678911;1971-01-01
Bob;Doe;Main Street;3;01234;Anytown;012345678912;1972-01-01
"""

r = session.post('https://localhost:8080/admin/api/v0/CostCenter', json={'name' : 'NMS Prime', 'billing_month' : 0}, verify=False)
costcenter_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Qos', json={'name' : '100:10', 'ds_rate_max' : '100', 'us_rate_max' : '10'}, verify=False)
qos_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Product', json={'name' : '100:10', 'type' : 'Internet', 'qos_id' : qos_id, 'billing_cycle' : 'Monthly', 'price' : '20', 'proportional' : True}, verify=False)
product_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Configfile', json={'name' : 'Base' ,'device' : 'cm', 'public' : 'yes', 'text' : cfg_cm}, verify=False)
cfg_cm_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Configfile', json={'name' : 'Base MTA' ,'device' : 'mta', 'public' : 'yes', 'text' : 'SnmpMibObject enterprises.4115.10.1.24.0 Integer 4096; /* mtaSafeReset - only restart when lines are idle */'}, verify=False)
cfg_mta_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Contract', json={'number' : '1', 'firstname' : 'John', 'lastname' : 'Doe', 'street' : 'Dörfelstraße', 'house_number' : '7', 'zip' : '09496', 'city' : 'Marienberg', 'phone' : '037359387570', 'birthday' : '2017-12-19', 'contract_start' : '2017-12-19', 'costcenter_id' : costcenter_id, 'create_invoice' : True}, verify=False)
contract_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Modem', json={'configfile_id' : cfg_cm_id , 'mac' : '00:11:22:33:44:55', 'contract_id' : contract_id, 'internet_access' : True, 'qos_id' : qos_id, 'firstname' : 'NMS', 'lastname' : 'Prime', 'street' : 'Dörfelstraße', 'house_number' : '7', 'zip' : '09496', 'city' : 'Marienberg', 'birthday' : '2017-12-19'}, verify=False)
modem_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Item', json={'contract_id' : contract_id , 'product_id' : product_id, 'count' : 1, 'valid_from_fixed' : True}, verify=False)
item_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Mta', json={'configfile_id' : cfg_mta_id , 'mac' : '00:11:22:33:44:56', 'modem_id' : modem_id, 'type' : 'sip'}, verify=False)
mta_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/Phonenumber', json={'mta_id' : mta_id , 'port' : 1, 'country_code' : '0049', 'prefix_number' : '03735', 'number' : '9387570', 'username' : 'user', 'password' : 'secret', 'sipdomain' : 'sip.nmsprime.com', 'active' : True}, verify=False)
phonenumber_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/NetGw', json={'type' : 'cmts', 'company' : 'Cisco', 'series' : 'ubr10k', 'hostname' : 'dev-cable-gw10', 'ip' : '172.20.3.253'}, verify=False)
netgw_id = json.loads(r.text)['id']
print(r.text)

r = session.post('https://localhost:8080/admin/api/v0/IpPool', json={'netgw_id' : 1, 'type' : 'CM', 'net' : '10.0.0.0', 'netmask' : '255.255.224.0', 'ip_pool_start' : '10.0.0.1', 'ip_pool_end' : '10.0.31.253', 'router_ip' : '10.0.31.254', 'broadcast_ip' : '10.0.31.255'}, verify=False)
print(r.text)
r = session.post('https://localhost:8080/admin/api/v0/IpPool', json={'netgw_id' : 1, 'type' : 'MTA', 'net' : '172.17.0.0', 'netmask' : '255.255.255.0', 'ip_pool_start' : '172.17.0.1', 'ip_pool_end' : '172.17.0.253', 'router_ip' : '172.17.0.254', 'broadcast_ip' : '172.17.0.255', 'dns1_ip' : '172.20.0.1'}, verify=False)
print(r.text)
r = session.post('https://localhost:8080/admin/api/v0/IpPool', json={'netgw_id' : 1, 'type' : 'CPEPriv', 'net' : '100.64.0.0', 'netmask' : '255.255.252.0', 'ip_pool_start' : '100.64.0.1', 'ip_pool_end' : '100.64.3.253', 'router_ip' : '100.64.3.254', 'broadcast_ip' : '100.64.3.255', 'dns1_ip' : '8.8.8.8', 'dns2_ip' : '8.8.4.4', 'dns3_ip' : '172.20.0.1'}, verify=False)
print(r.text)
r = session.post('https://localhost:8080/admin/api/v0/IpPool', json={'netgw_id' : 1, 'type' : 'CPEPub', 'net' : '192.0.0.0', 'netmask' : '255.255.252.0', 'ip_pool_start' : '192.0.0.1', 'ip_pool_end' : '192.0.3.253', 'router_ip' : '192.0.3.254', 'broadcast_ip' : '192.0.3.255', 'dns1_ip' : '8.8.8.8', 'dns2_ip' : '8.8.4.4', 'dns3_ip' : '172.20.0.1'}, verify=False)
print(r.text)

i = 2
for contract in contract_csv.strip('\n').strip('\n').split('\n'):
  fields = contract.strip(';').split(';')
  r = session.post('https://localhost:8080/admin/api/v0/Contract', json={'number' : str(i), 'firstname' : fields[0], 'lastname' : fields[1], 'street' : fields[2], 'house_number' : fields[3], 'zip' : fields[4], 'city' : fields[5], 'phone' : fields[6], 'birthday' : fields[7], 'costcenter_id' : costcenter_id, 'create_invoice' : True}, verify=False)
  i += 1
  print(r.text)
  • No labels