NFV¶ ↑
This document explains how to get started using NFV with fog-openstack.
Please also refer to the Getting Started with Fog and the OpenStack document.
Tacker is an OpenStack service for NFV Orchestration with a general purpose VNF Manager to deploy and operate Virtual Network Functions (VNFs) and Network Services on an NFV Platform. It is based on ETSI MANO Architectural Framework.
OpenStack setup¶ ↑
The catalog¶ ↑
For the fog-openstack's introspection service to work, the corresponding service must be defined in the OpenStack catalog.
openstack catalog show servicevm +-----------+-----------------------------------------+ | Field | Value | +-----------+-----------------------------------------+ | endpoints | regionOne | | | publicURL: http://172.16.0.21:8888/ | | | internalURL: http://172.16.0.21:8888/ | | | adminURL: http://172.16.0.21:8888/ | | | | | name | tacker | | type | servicevm | +-----------+-----------------------------------------+
Depending on the OpenStack release, the NFV service might be installed but not defined yet in the catalog. In such case, you must add the service and corresponding endpoints to create the catalog entry:
source ./stackrc openstack service create --name tacker --description "Tacker Project" servicevm openstack endpoint create --region regionOne tacker --publicurl http://example.com:8888 --internalurl http://example.com:8888 --adminurl http://example.com:8888
Work flow¶ ↑
A usual work-flow might consist of: * Create vnfd * Deploy vnf using vnfd * Retrieve vnf and vnfd data
For more details please refer to docs.openstack.org/developer/tacker/
Using 'irb', we start with authentication:
@user = "admin" @project = "admin" @password = "secret" @base_url = "http://keystone.example.com:5000/v3/auth/tokens" require 'rubygems' require 'fog/openstack' @connection_params = { :openstack_auth_url => @base_url, :openstack_username => @user, :openstack_api_key => @password, :openstack_project_name => @project, :openstack_domain_id => "default" }
Vnfd management¶ ↑
Create vnfd¶ ↑
vnfd_data = {:attributes => {:vnfd => "template_name: sample-vnfd\ndescription: demo-example\n\nservice_properties:\n Id: sample-vnfd\n vendor: tacker\n version: 1\n\nvdus:\n vdu1:\n id: vdu1\n vm_image: cirros\n instance_type: m1.tiny\n\n network_interfaces:\n management:\n network: net_mgmt\n management: true\n pkt_in:\n network: net0\n pkt_out:\n network: net1\n\n placement_policy:\n availability_zone: nova\n\n auto-scaling: noop\n\n config:\n param0: key0\n param1: key1\n"}, :service_types => [{:service_type => "vnfd"}], :mgmt_driver => "noop", :infra_driver => "heat"} auth = {"tenantName" => "admin", "passwordCredentials" => {"username" => "admin","password" => "password"}} vnfd = Fog::NFV[:openstack].vnfds.create(:vnfd => vnfd_data, :auth => auth)
List vnfds¶ ↑
vnfds = Fog::NFV[:openstack].vnfds
Get vnfd¶ ↑
vnfd = Fog::NFV[:openstack].vnfds.last vnfd = Fog::NFV[:openstack].vnfds.get(vnfd.id)
Destroy vnfd¶ ↑
vnfd = Fog::NFV[:openstack].vnfds.last vnfd.destroy
Vnf management¶ ↑
Create vnf using vnfd¶ ↑
vnfd = Fog::NFV[:openstack].vnfds.last vnf_data = {:vnfd_id => vnfd.id, :name => 'Test'} auth = {"tenantName" => "admin", "passwordCredentials" => {"username" => "admin","password" => "password"}} vnf = Fog::NFV[:openstack].vnfs.create(:vnf => vnf_data, :auth => auth)
List vnfs¶ ↑
vnfs = Fog::NFV[:openstack].vnfs
Get vnf¶ ↑
vnf = Fog::NFV[:openstack].vnfs.last vnf = Fog::NFV[:openstack].vnfs.get(vnf.id)
Update vnf¶ ↑
vnf = Fog::NFV[:openstack].vnfs.last vnf_data = {"attributes": {"config": "vdus:\n vdu1:<sample_vdu_config> \n\n"}} auth = {"tenantName" => "admin", "passwordCredentials" => {"username" => "admin","password" => "password"}} vnf = vnf.update(:vnf => vnf_data, :auth => auth)
Destroy vnf¶ ↑
vnf = Fog::NFV[:openstack].vnfs.last vnf.destroy