aboutsummaryrefslogtreecommitdiffstats
path: root/vnfmgr/vnfmgr_main.py
blob: 21941b0d077a17f3102a82c484cc45179947c823 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#################################################################
#
# Copyright 2015 Ericsson AB
# All Rights Reserved
#
# Author: Manuel Buil <Manuel.Buil@ericsson.com>
# Version: 0.1
#
#################################################################

import pdb
from vnfmgr_os.vnfmgr_os import OpenStack_API
import vnfmgr_odl.vnfmgr_odl as odlscript
import time
import json

if __name__ == "__main__":
    # OpenStack environment information
    authurl = "http://localhost:5000/v2.0"
    adminTenantName = 'admin'
    adminTenantUser = 'admin'
    adminTenantPass = 'abc123'
    tenantName = adminTenantName
    tenantUser = adminTenantUser
    tenantPass = adminTenantPass

    openstack = OpenStack_API(authurl, tenantName, tenantUser, tenantPass)

    # 1 - Get the SF type
    # Provide the file with the SFC configuration
    file_json = "vnfmgr_odl/sample_config/RestConf-SFCs-HttpPut.json"
    # Read the config files which refer to SF
    json_data = open(file_json).read()
    data = json.loads(json_data)
    pdb.set_trace()

    # Grab the SF type
    chains = data['service-function-chains']['service-function-chain']
    for chain in chains:
        SFs = chain['sfc-service-function']
        for SF in SFs:
            sf_type = SF['type']
            name = SF['name']
            # 2 - Search the image in glance with that SF type
            image = openstack.find_image(sf_type)
            if image is None:
                print("There is no image with that sf_name")
                exit(1)
                # 3 - Boot the VM without network
                flavor = 1
                print("About to deploy")
                vm = openstack.create_vm(name, image, flavor)
                if vm is None:
                    print("Problems to deploy the VM")
                    exit(1)

    # Make the call to ODL to deploy SFC
    context = odlscript.Context()
    context.set_path_prefix_paths("vnfmgr_odl/sample_config")
    pdb.set_trace()
    odlscript.send_rest(
        context, "PUT", context.rest_url_sf_sel, context.rest_path_sf_sel)
    odlscript.send_rest(
        context, "PUT", context.rest_url_sf, context.rest_path_sf)
    odlscript.send_rest(
        context, "PUT", context.rest_url_sff, context.rest_path_sff)
    odlscript.send_rest(
        context, "PUT", context.rest_url_sfc, context.rest_path_sfc)
    odlscript.send_rest(
        context, "PUT", context.rest_url_sfp, context.rest_path_sfp)
    time.sleep(1)
    odlscript.send_rest(
        context, "POST", context.rest_url_rsp_rpc, context.rest_path_rsp)

    # TO DO
    # Check if the SF_VM already exists before creating it
    # Network of the VM
a> 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695
##############################################################################
# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
 module clearwater {

       namespace "http://localhost/ietf-inet-types.yang";

       prefix "yang";

       organization "HP";

       contact "TBD";

       description "This module defines a VNF Deployment Unit.";
     revision "2014-05-18" {

         description

           "Initial version";

         reference

           "RFC XXXX";

       }
      container clearwater {

         description

           "Vdus used in a vnfd";

       list ellis {
      key id;
      leaf id{
      type string;
      description "key ID for vdu1";
      }
         description

         "Vdu key";



         leaf instance-num {

         type uint16{
         range 1..6;}
                                 default 1;


         description

           "Number of instances of the said VDU which shall be
     instantiated";

         }

         leaf vm-image {

         type string;
         reference  "uri";


         description

           "Reference to a VM image";

         }
         container resource {
         description

               "The required resource";

             container cpu {

               description

                 "The required computation resource";



               leaf vCPU_num {

                 type uint32{
         range 4;
         }

                 description

                   "The number of virtual CPU units";

               }



               list vCPU-spec {

                 key "name";



                 description

                   "Processor characteristics for the VDU";



                 leaf name {

                   type string;

                   description

                     "Name of vCPU-spec";

                 }
         leaf description {

                   type string;

                   description

                     "Description of vCPU-spec";

                 }

                 leaf value {

                   type uint32;

                   description

                     "Value of vCPU-spec";

                 }

               }

             }

             container memory {

               description

                 "The required memory resource";

               leaf memory_size {

                 type uint32{
         range 4096;
         }

                 description

                   "Memory size, unit:MBytes";

               }

               list memory-spec {

                 key name;



                 description

                   "Memory characteristics for the VDU";



                 leaf name {

                   type string;

                   description

                     "Name of memory-spec";

                 }



                 leaf description {

                   type string;

                   description

                     "Description of memory-spec";

                 }



                 leaf value {

                   type uint32;

                   description

                     "Value of memory-spec";

                 }

          }

             }



             container disk {

               description

                 "The required storage resource";



               leaf disk-size {

                 type uint32{
     range 2048;
    }
                 description

                   "Virtual storage size, unit:MBytes";
               }



               list disk-KQI {

                 key name;



                 description

                   "Storage characteristics in the VDU";



                 leaf name {

                   type string;

                   description

                     "Name of disk-KQI";

                 }
         leaf description {

                   type string;

                   description

                     "Description of disk-KQI";

                 }



                 leaf value {

                   type uint32;

                   description

                     "Value of disk-KQI";

                 }

               }

             }



             container vnic {

               description

                 "Virtual network interface card (vnic) resource";



               leaf vnic-num {

                 type uint32{
         range 2;
         }

                 description

                   "The total number of virtual vnic";

               }
          }

           }



           container workflow-script {

             description

               "VDU workflow script";



             leaf init {

               type string;
         default "start.sh";


               description

                 "VDU initialization script";
             }



             leaf terminate {

               type string;
         default "stop.sh";


               description

                 "VDU termination script";
        }

             leaf graceful-shutdown {

               type string;
         default "shutdown.sh";


               description

                 "VDU graceful shutdown script";

             }

           }

         }
     list bono {
      key id;
      leaf id{
      type string;
      description "key ID for vdu2";
      }
         description

         "Vdu key";



         leaf instance-num {

         type uint16;
         default 3;


         description

           "Number of instances of the said VDU which shall be
     instantiated";

         }



         leaf vm-image {

         type string;
         reference "URI";


         description

           "Reference to a VM image";

         }



         container resource {
         description

               "The required resource";



             container cpu {

               description

                 "The required computation resource";



               leaf vCPU_num {

                 type uint32{
         range 3;
         }

                 description

                   "The number of virtual CPU units";

               }



               list vCPU-spec {

                 key "name";



                 description

                   "Processor characteristics for the VDU";



                 leaf name {

                   type string;

                   description

                     "Name of vCPU-spec";

                 }
         leaf description {

                   type string;

                   description

                     "Description of vCPU-spec";

                 }



                 leaf value {

                   type uint32;

                   description

                     "Value of vCPU-spec";

                 }

               }

             }



             container memory {

               description

                 "The required memory resource";



               leaf memory_size {

                 type uint32{
         range 2048;
         }

                 description

                   "Memory size, unit:MBytes";

               }

               list memory-spec {

                 key name;

                 description

                   "Memory characteristics for the VDU";



                 leaf name {

                   type string;

                   description

                     "Name of memory-spec";

                 }



                 leaf description {

                   type string;

                   description

                     "Description of memory-spec";

                 }



                 leaf value {

                   type uint32;

                   description

                     "Value of memory-spec";

                 }

          }

             }



             container disk {

               description

                 "The required storage resource";



               leaf disk-size {

                 type uint32{
         range 3000;
         }

                 description

                   "Virtual storage size, unit:MBytes";

               }



               list disk-KQI {

                 key name;



                 description

                   "Storage characteristics in the VDU";



                 leaf name {

                   type string;

                   description

                     "Name of disk-KQI";

                 }
         leaf description {

                   type string;

                   description

                     "Description of disk-KQI";

                 }



                 leaf value {

                   type uint32;

                   description

                     "Value of disk-KQI";

                 }

               }

             }



             container vnic {

               description

                 "Virtual network interface card (vnic) resource";



               leaf vnic-num {

                 type uint32{
         range 2;
         }

                 description

                   "The total number of virtual vnic";

               }
          }

           }



           container workflow-script {

             description

               "VDU workflow script";



             leaf init {

               type string;
         default "start.sh";


               description

                 "VDU initialization script";

             }



             leaf terminate {

               type string;
         default "stop.sh";


               description

                 "VDU termination script";

             }

             leaf graceful-shutdown {

               type string;
         default "shutdown.sh";


               description

                 "VDU graceful shutdown script";

             }

           }

         }

       }

   }