Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Overview
  2. Producer
  3. Consumer
  4. Repository
  5. Data Model
  6. Searching in NOCLook
  7. Indexed properties
  8. REST API
  9. Backup and Restore
  10. Links
  11. How to set up a NI suiteNOCLook
  12. Troubleshooting

Anchor
overview
overview

Overview

...

The only NORDUnet consumer today is NOCLook which is a web gui made with the Django web framework and Neo4j graph database as backend back end for the inventory data model. The data is added to the Neo4j database via the REST interface using norduni_client.py norduniclient which builds on neo4jneo4jdb-rest-clientpython.

Anchor
repo
repo

Repository

...

Anchor
datamodel
datamodel

Data model

Image Removed
Hopefully these entities and relationships are enoughSee Presentation.

Image Removed
The data that was inserted manually in the prototype.

 

Anchor
search
search

Searching in NOCLook

In addition to the search box at the top of the page you can also use the URL field for searching.

Code Block

/findall/[value]/
ex. /findall/10/
/findall/[key]/[value]/
ex. /findall/link/10/
/findin/[node type]/[value]/
ex. /findin/optical-node/10/
/findin/[node type]/[key]/[value]/
ex. /findin/optical-node/link/10/
/getall/[node type]/
ex. /getall/optical-node/

The URL field version of the search only finds complete strings find substrings so you can't use wild cards but it is at lease case insensitive.

...

Neo4j provides Lucene indexes for nodes and relationships. A "search" index is created with the properties that will be searched when a user uses the search bar. Some optimization indexes was also created to speed up the consuming or presentation.

Node search index:
name (all nodes)
description (interface and unit nodes)
ip_addresses (unit and host nodes)
as_number (peering partner nodes)
hostnames hostname (host nodes)
telenor_tn1_number (cable nodes)

Relationship search index:
ip_address (Uses and Depends_on relationships)

Node node_types index
node_type (all nodes)

All property values above is also indexed under the index key all in all indexes. For example in the search index you can query the all-key for both name, description, ip_addresses, as_number and hostname.

Anchor
rest
rest

REST API

Note
titleLimitation

Only L2VPN services are set up in this way.

NOCLook REST API is driven by django-tastypie. Authentication is set per user as an API key.

Create a new site

Code Block
$ cat site.json
{
	"node_name": "DK-AAL",
	"node_type": "/api/v1/node_type/site/",
	"node_meta_type": "Location",
	"node": {
		"address": "Selma Lagerlöfsvej 300",
		"area": "Aalborg",
		"country": "Denmark",
		"country_code": "DK",
		"latitude": "57.011944",
		"longitude": "9.990560",
		"owner_id": "AAU",
		"postarea": "Aalborg",
		"postcode": "9220"
	}
}


$ curl -i -H "Authorization: ApiKey apiuser:secret" -H "Content-Type: application/json" -X POST --data @site.json


Create a new L2VPN service

Using curl
Code Block
curl -k -H "Authorization: ApiKey apiuser:secret" -H "Content-Type: application/json" -X POST --data '{"node_name": "NU-SXXXXX1", "operational_state": "In service", "route_distinguisher": "rd1", "vrf_target": "vt1", "end_points": [{"device": "se-tug.nordu.net", "port":"l2vpn_test_port"}, {"device": "se-fre.nordu.net", "port":"l2vpn_test_port"}]}' https://nidev-consumer.nordu.net/api/v1/l2vpn/

Return:
{
    "created": "2013-02-20T16:45:41.228176", 
    "creator": "/api/v1/user/59/", 
    "description": null, 
    "handle_id": 11717, 
    "modified": "2013-02-20T16:45:41.228213", 
    "modifier": "/api/v1/user/59/", 
    "node": {
        "handle_id": 11717, 
        "name": "NU-SXXXXX1", 
        "node_type": "Service", 
        "operational_state": "In service", 
        "service_class": "MPLS", 
        "service_type": "L2VPN"
    }, 
    "node_id": 13707, 
    "node_meta_type": "logical", 
    "node_name": "NU-SXXXXX1", 
    "node_type": "/api/v1/node_type/service/", 
    "object_path": "/service/11717/", 
    "operational_state": "In service", 
    "relationships": [
        "/api/v1/relationship/47575/", 
        "/api/v1/relationship/47576/", 
        "/api/v1/relationship/47577/"
    ], 
    "resource_uri": "/api/v1/l2vpn/11717/", 
    "route_distinguisher": "rd1", 
    "service_type": "L2VPN", 
    "vrf_target": "vt1"
}

Setting L2VPN service attributes

Using curl
Code Block
curl -k -H "Authorization: ApiKey apiuser:secret" -H "Content-Type: application/json" -X PUT --data '{"operational_state": "In service", "description": "Test REST API call l2vpn"}' https://nidev-consumer.nordu.net/api/v1/l2vpn/NU-SXXXXX1/

Return:
{
    "created": "2013-02-20T16:45:41.228176", 
    "creator": "/api/v1/user/59/", 
    "description": "Test REST API call l2vpn", 
    "handle_id": 11717, 
    "modified": "2013-02-20T16:51:16.077192", 
    "modifier": "/api/v1/user/59/", 
    "node": {
        "description": "Test REST API call l2vpn", 
        "handle_id": 11717, 
        "name": "NU-SXXXXX1", 
        "node_type": "Service", 
        "operational_state": "In service", 
        "service_class": "MPLS", 
        "service_type": "L2VPN"
    }, 
    "node_id": 13707, 
    "node_meta_type": "logical", 
    "node_name": "NU-SXXXXX1", 
    "node_type": "/api/v1/node_type/service/", 
    "object_path": "/service/11717/", 
    "operational_state": "In service", 
    "relationships": [
        "/api/v1/relationship/47577/", 
        "/api/v1/relationship/47576/", 
        "/api/v1/relationship/47575/"
    ], 
    "resource_uri": "/api/v1/l2vpn/11717/", 
    "route_distinguisher": "rt1", 
    "vrf_target": "vrf1"
}

Anchor
backuprestore
backuprestore

Backup and Restore

You can backup the Postgresql and Neo4j databases using these scripts:

Code Block
# Backup the SQL database
pg_dump norduni > /var/opt/norduni/nistore/producers/noclook/sql/postgres.sql
# Run NOCLook producer for backup purpose
cd /opt/norduni/src/scripts/
rm /opt/nistore/producers/noclook/json/*
./noclook_producer.py -O /opt/nistore/producers/noclook/json/
# Push the changes to nistore master
/usr/local/sbin/ni-push.sh -r /opt/nistore/

To restore the data from a backup use psql and noclook_consumer.py.

Code Block
titlerestore.conf
# All producers need to be listed here with a path data or empty
[data]
juniper_conf =
nmap_services_py =
alcatel_isis =
noclook = /opt/nistore/producers/noclook/json/
nagios_checkmk = 
cfengine_report =  


Code Block
psql -f /opt/nistore/producers/noclook/sql/postgres.sql norduni
noclook_consumer.py -C restore.conf -I

When using postgres you have to reset the autoincrementing handle_id property.

Code Block
python manage.py sqlsequencereset noclook

Copy output from the previous command and paste it in the dbshell.

Code Block
python manage.py dbshell

Now everything should be restored and ready to be updated as usual with noclook_consumer.py.

Anchor
links
links

https://ni.nordu.netImage Removed

http://nidev-consumer.nordu.netImage Removed (bleeding edge)

Issue tracker: https://project.nordu.net/browse/NORDUNIDEVImage Removed

Graph Gists

Version 1.0: http://portal.graphgist.org/graph_gists/bf9576c3-c7d0-450b-82fb-bd52e4038753
Version 2.0: http://gist.neo4j.org/?fe682b1dc394dd8e4421

Anchor
setup
setup

How to set up

...

NOCLook

See Setting up a NORDUni 2.0 instance.

Anchor
troubleshooting
troubleshooting

Troubleshooting

Starting/stopping and restarting

Code Block
$ sudo service uwsgi start|stop|restart