aboutsummaryrefslogtreecommitdiffstats
path: root/yardstick/network_services/vnf_generic
AgeCommit message (Collapse)AuthorFilesLines
2017-12-14NSB Prox LW_AFTR TestDanielMartinBuckley1-1/+189
JIRA: YARDSTICK-802 Addition of PROX LW_AFTR basked on PROX/DATS v037 test_104_lw_aftr.py - This support BM and Openstack Heat - This supports 4 Ports ONLY - Grafana Dashboards included - Code Coverage / Unit testing Change-Id: If2170ab458bf687256d5f1a1e840a3b9d2788ef7 Signed-off-by: Daniel MArtin Buckley <daniel.m.buckley@intel.com> Signed-off-by: Abhijit Sinha <abhijit.sinha@intel.com> (cherry picked from commit b9e394b2f0955c76f883021c4f65c136b80d9261)
2017-10-19NSB: fix trex config to use dpdk port numberRoss Brattain2-12/+16
From some reason Heat/Neutron is now creating interfaces such that xe0 and xe1 are swapped. xe0 fa:16:3e:38:c7:66 0000:00:05.0 xe1 fa:16:3e:2f:f3:e2 0000:00:03.0 this causes the DPDK port numbering to be swapped. xe0 is DPDK port 1 because it has higher PCI address xe1 is DPDK port 0 because it has lower PCI address. The VNF is configured correctly because it uses DPDK port numbers, whereas TRex was using interface list ordering. Modify trex_cfg.yaml to use DPDK port ordering. This also requires running generate_cfg() after setup() in instantiate() +------------------------------------+-------------------+------------------------------+--------+ | Name | MAC Address | Fixed IP Addresses | Status | +------------------------------------+-------------------+------------------------------+--------+ | vnf_0.yardstick-af5ccb47-xe0-port | fa:16:3e:66:a5:e4 | ip_address='10.1.0.7', | ACTIVE | | vnf_0.yardstick-af5ccb47-mgmt-port | fa:16:3e:fa:98:fe | ip_address='10.0.1.10', | ACTIVE | | tg_0.yardstick-af5ccb47-xe1-port | fa:16:3e:2f:f3:e2 | ip_address='10.1.1.9', | ACTIVE | | vnf_0.yardstick-af5ccb47-xe1-port | fa:16:3e:f3:1d:f5 | ip_address='10.1.1.4', | ACTIVE | | | fa:16:3e:e3:8c:65 | ip_address='10.0.1.1', | ACTIVE | | | fa:16:3e:ff:d1:b7 | ip_address='11.191.14.110', | N/A | | tg_0.yardstick-af5ccb47-xe0-port | fa:16:3e:38:c7:66 | ip_address='10.1.0.8', | ACTIVE | | | fa:16:3e:ff:53:5f | ip_address='11.191.14.101', | DOWN | | | fa:16:3e:23:5d:2c | ip_address='10.0.1.2', | ACTIVE | | tg_0.yardstick-af5ccb47-mgmt-port | fa:16:3e:7a:df:4e | ip_address='10.0.1.5', | ACTIVE | | | fa:16:3e:22:65:36 | ip_address='11.191.14.109', | N/A | +------------------------------------+-------------------+------------------------------+--------+ /sys/devices/pci0000:00/0000:00:03.0/virtio0/net/ens3/address:fa:16:3e:2f:f3:e2 /sys/devices/pci0000:00/0000:00:05.0/virtio2/net/ens5/address:fa:16:3e:38:c7:66 Change-Id: Iaef2c7d9a5af7f45bd805a8ad6ee545ce0495cb1 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> (cherry picked from commit 7ed018cddf88ac1c5a92f71fa5e421e66d259bc0)
2017-10-19BugFix: Negative dropped packets in Prox testsAbhijit Sinha1-3/+3
Removed the abs function which can potentially mask negative dropped packets. Dropped packets in Prox workload VNF = max((tx_packets - rx_packets), 0) Change-Id: I510a351e899cdf9a1f366d632b9f0528b1d9dcce Signed-off-by: Abhijit Sinha <abhijit.sinha@intel.com> (cherry picked from commit a27278dacaa54ae60cd3bdfa6e6145643f76fa02)
2017-10-18Enable static cgnapt functionality.Deepak S2-33/+28
Change-Id: Ie770ca69ebdc66589ed6ca5c25bfc9a75afb8938 Signed-off-by: Deepak S <deepak.s@linux.intel.com>
2017-10-18Relocate iniparser to yardstick.network_services.helpersEdward MacGillivray2-255/+5
Change-Id: I1f457c9c24f2ca84dde61b64f58edaff8952670a Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
2017-10-18BugFix: Fix to negative dropped packets appearing in results.DanielMartinBuckley1-1/+1
As per defect: the "VNF packets dropped" time series is negative - negative number of packets dropped is not meaningful. Solution: Return a positive value. Change-Id: I358006a691f2d6b5954333b9f7a745aba97ae44f Signed-off-by: Daniel Martin Buckley <daniel.m.buckley@intel.com>
2017-10-13Move arp route tbl to script and update defailt vnf config filesDeepak S1-1/+2
Change-Id: I8674caa15c9fc32cfacb17f558da5fb31094877e Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-10-10NSB Prox vPE TestAbhijit Sinha1-27/+231
JIRA: YARDSTICK-802 Addition of Prox vPE test case - The tests supports BM, Openstack Heat - Supports 4 ports - Grafana dashboards included - Added support for parameters.lua for prox additional files - Unit tests for code coverage Change-Id: I5cccb351dacba88a293ae4b8aba1f0a803d62e6d Signed-off-by: Abhijit Sinha <abhijit.sinha@intel.com> Signed-off-by: Daniel MArtin Buckley <daniel.m.buckley@intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-10-06add wait_for_instantiateRoss Brattain1-0/+7
Change-Id: Idc54fc907dba4603984712fc43a0db8dfd4b7374 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-10-06Disable VNF deploy by defaultDeepak S1-7/+3
Change-Id: I27bcc41c855f34fb1fd0332fc24e7bf0b2af4ec2 Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-10-06NSB Prox minor refactor of BNGAbhijit Sinha1-6/+9
JIRA: YARDSTICK-802 - Updated the BNG code with minor refactor. - Corrected the CPE core name - Update binsearch traffic profile with 64B Change-Id: Iae0be766edb986520045655fa567651711813a8b Signed-off-by: Abhijit Sinha <abhijit.sinha@intel.com>
2017-10-04NSB PROX test hang fixesRoss Brattain6-23/+95
The PROX tests were hanging in the duration runner. These are fixes for various errors: raise error in collect_kpi if VNF is down move prox dpdk_rebind after collectd stop fix dpdk nicbind rebind to group by drivers prox: raise error in collect_kpi if the VNF is down prox: add VNF_TYPE for consistency sample_vnf: debug and fix kill_vnf pkill is not matching some executable names, add some debug process dumps and try switching back to killall until we can find the issue sample_vnf: add default timeout, so we can override default 3600 SSH timeout collect_kpi is the point at which we check the VNFs and TGs for failures or exits queues are the problem make sure we aren't silently blocking on non-empty queues by canceling join thread in subprocess fixup duration runner to close queues and other attempt to stop duration runner from hanging VnfdHelper: memoize port_num resource: fail if ssh can't connect at the end of 3600 second test our ssh connection is dead, so we can't actually stop collectd unless we reconnect fix stop() logic to ignore ssh errors Change-Id: I6c8e682a80cb9d00362e2fef4a46df080f304e55 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-10-03Enable multi-port perf in trex as TGDeepak S2-7/+18
set TRex -c option for threads per port based on hardware number of queues. We can't auto-detect number of queues and we can't use more than one thread per core on systems with single-queue interfaces, so move the option to the config file options: tg_0: queues_per_port: 2 also enable trex debug by removing >/dev/null redirection options: tg_0: trex_server_debug: true Change-Id: I46da187849282bf28f4ef5b333e1ae890e202768 Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-10-03drain runner queue and undo cancel_join_threadRoss Brattain2-0/+4
Sometimes the runners can hang. Initially debugging lead to the queue join thread, so I thought we could cancel all the join threads and everything would be okay. But it turns out canceling the queue join threads can lead to corruption of the queues, so when we go to drain the queues the task hangs. But it also turns out that we were not properly draining the queues in the task process. We were waiting for all the runners to exit, then draining the queues. This is bad and will cause the queues to fill up and hang and/or drop data or corrupt the queues. The proper fix seems to be to draining the queues in a loop before calling join with a timeout. Also modified the queue drain loops to no block on queue.get() Revert "cancel all queue join threads" This reverts commit 75c0e3a54b8f6e8fd77c7d9d95decab830159929. Revert "duration runner: add teardown and cancel all queue join threads" This reverts commit 7eb6abb6931b24e085b139cc3500f4497cdde57d. Change-Id: Ic4f8e814cf23615621c1250535967716b425ac18 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-30Auto create ixia config based on the traffic profileDeepak S1-24/+12
Change-Id: I031cc7f24f0c0816eb577a4d1606a714f68a5f83 Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-30Addition of Prox NSB BNG and BNG-QoS testAbhijit Sinha2-165/+472
JIRA: YARDSTICK-802 Added Prox BNG and BNG-QoS Test - The tests supports BM, Openstack Heat - Supports 4 ports - Test added for BNG traffic profile - Fixed the Prox heat test cases with proper upstream and downstream links - Grafana Dashboard for BNG & BNG-QoS added - Increased the test Duration to 300 TODO: - Test does not Terminate correctly Update: Added new helper class for run_test: Genric, MPLS and BNG tests. Change-Id: Ib40811bedb45a3c3030643943f32679a4044e076 Signed-off-by: Abhijit Sinha <abhijit.sinha@intel.com> Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Daniel Martin Buckley <daniel.m.buckley@intel.com>
2017-09-30Terminate the run traffic if initiated after traffic is closedDeepak S1-14/+15
Change-Id: I89fc4bccb5b5a0d49d804fca72b59e53ff77a805 Signed-off-by: Deepak S <deepak.s@linux.intel.com>
2017-09-30collectd: write config file from Jinja2 templateRoss Brattain2-9/+23
We have the collectd.conf inside the python package so instead of copying it from various places, write the template directly to the remote system. collectd: read collect.conf template with pkgresources read the collectd.conf file as a string directly and upload without creating temp file use Jinja2 template, disable failing plugins use proper Jinja2 template, disable the plugins that were failing to load and blocking startup add support for per-testcase collectd.conf config using YAML add support for custom interval, default is 25 seconds Change-Id: Id904f7b7c9f41a9dd7adf5dfa06c064d65c25d2d Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-30Fix vPE VNF characterization issues.Deepak S1-19/+28
Change-Id: Ia934128777d2839f6d2b940857c266fc3e2bd4a1 Signed-off-by: Deepak S <deepak.s@linux.intel.com>
2017-09-25tg_rfc2544_ixia: log exceptions and fix list iterRoss Brattain1-7/+9
Change-Id: Ia9722604b7c8ae23e784e780f113d012de544d4b Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-25tg_rfc2544_ixia: use traffic id from JSON to update macRoss Brattain1-33/+40
we were using raw sort index of the interfaces to set the MAC address, but we should be using the traffic id from the static JSON instead. Change-Id: I13284db04abb3eaf8c9826974a9e5aa1c37b3891 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-25ixia: renamed execute to execute_trafficRoss Brattain1-2/+2
ixia: pass ports to generate_samples Change-Id: I90d12fa2ce8cd4d1c2a18bdcf70027f6d9e3f77f Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-25prox: fix TG KPIsRoss Brattain2-3/+13
The problem is that we share the same ProxResourceHelper for both VNF and TG. For VNF we want to talk to resource.py and get collectd KPIs. For TG we need to read from the queue the TG calculated KPIs and we also want collectd KPIs. workaround is to use a different method name collect_collectd_kpi for VNFs Change-Id: Icc2132758e37ce210f5600a0cd433077930208e5 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-25prox: use find_relative_file when uploadingRoss Brattain1-1/+2
the prox files were being found correctly. if we use find_relative_file they will lookup relative to the task_path Change-Id: Ifde5d07df5ccfbfeba015b2f43bd8b53e89a00b7 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-25prox: pass prox_config_dict between Processes using queueRoss Brattain2-18/+24
we generate the prox_config_dict in the _run Process, but we also need it in the _traffic_runner Process to get core info. use a queue to pass the config list between the processes enable collect_kpi Change-Id: Ibaf41d606e559a87addf43d6ddaed206dbd2d20c Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
2017-09-25UDP_Replay: enable collectd KPIsRoss Brattain1-1/+1
Change-Id: I92146411707a9ec29864d164dbd63b96d05bffe0 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-19NSB: count from 0, vnf_0, tg_9, private->uplink, public->downlinkRoss Brattain5-26/+31
Also rename private to uplink, public to downlink for scale-out template we need to count from 0 so we can use range() without +1/-1 errors vnf_0, vnf_1 tg_0, tg_1 also fix Ixia defaults Change-Id: I6aecfbb95f99af20f012a9df19c19be77d1b5b77 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
2017-09-18Terminate the ixia traffic generator at the end of the test runDeepak S1-19/+22
Change-Id: I80501ab3662a58930939d849f0bde0e810154a39 Signed-off-by: Deepak S <deepak.s@linux.intel.com>
2017-09-18Fix the offset bug for UDP dst port in the traffic profileMartin Banszel1-2/+3
Also sends a new line to the VNF when waiting for prompt. Change-Id: Ib8641093974cd6713594aac9b418595ad5268e87 Signed-off-by: Martin Banszel <martinx.banszel@intel.com>
2017-09-18NSB: fix port topologyMartin Banszel13-305/+320
Add a new PortPair class to resolve the topology into list of public and private ports. Before we were calculating public/private in multiple locations and using different conventions. In addition for all the DPDK test we need to use the DPDK port number and no rely on interface ordering or interface naming conventions. We used to use xe0 -> 0, xe1 -> 1, etc. This is not the DPDK port number. Use the new dpdknicbind_helper class to parse the output of dpdk-devbind.py to find the actual DPDK port number at runtime. We then use this DPDK port number to correctly calculate the port_mask_hex. The port mask maps the DPDK port num (PMD ID) to the LINK ID used in the pipeline config We also need to make sure we only use the interfaces matched to the topology and not use all the interfaces, because in some cases we will have unused interfaces. In particular TRex always requires an even number of interfaces, so for single port TRex tests we have to create the second port and not use it. Thus we had to modify the traffic generator stats code to only dump stats for used ports and no unused ports. Ixia was using interface ordering to map to Ixia ports, instead we use the dpdk_port_num which must be hardcoded for Ixia. Renamed traffic_profile.execute to traffic_profile.execute_traffic so we can trace the code easier. We pass the port used by the traffic profile to generate_samples so we don't get stats for unused ports. Fixed up vPE config creation and bring up issues. Fixed up CGNAPT and UDP_Replay to work correctly. Tested with 4-port scale-out Change-Id: I2e4f328bff2904108081e92a4bf712333fa73869 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
2017-09-11Added line parser to INI parserEdward MacGillivray1-113/+186
Line parser handles comments, keys and values and makes exceptions. Change-Id: I5cd3612ffd8cb08b14051bd0ef4b757c310f77bd Signed-off-by: Edward MacGillivray <edward.s.macgillivray@intel.com>
2017-09-07Merge "Adding ixia latency support for dynamic cgnapt"Ross Brattain1-18/+60
2017-09-07Adding ixia latency support for dynamic cgnaptDeepak S1-18/+60
Change-Id: I346f6064c39cb5662c2b17ca0f520addbe5eae4c Signed-off-by: Deepak S <deepak.s@linux.intel.com>
2017-09-05Add fixes for heat deployed UDP_Replay and TRexMartin Banszel3-25/+69
- Added a PROTOCOL_MAP to map the protocol names to codes -- the scapy requires the code, it fails if the proto is set e.g. to 'udp' - ip addresses must be str, not unicode -- explicit conversion to str added - removed unittest for setup_vnf_environment in test_tg_trex.py as it is the same function as already tested in test_sample_vnf.py - traffic_profile refactored -- code repetition decreased, unittest adapted Known issues: - there is a an attempt to stop already stopped trex. It fires an exception that stop command is issued on the disconnected client. Change-Id: I87e9029630f48b30e8f5b4f9d88ab3b25fd65f03 Signed-off-by: Martin Banszel <martinx.banszel@intel.com>
2017-09-05PROX: catch ports stats parse errorRoss Brattain1-2/+8
for some reason port status returned fewer fields, catch this for debug and return empty result dict so test continues and hopefully we get a valid stat read on next call. Change-Id: I54f1a86707d2a00efcb82a7e0239d12f90a6542c Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-05Merge "Addition of Prox NSB changes in yardstick"Ross Brattain5-356/+462
2017-09-04Fix Ixload KPIs collection & hang issues.Deepak S1-6/+9
Change-Id: If679333dc1cb9e041a332fb374c55f72eaab1b28 Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-04Addition of Prox NSB changes in yardstickabhijitsinha5-356/+462
JIRA: YARDSTICK-802 Addition of Prox L2Fwd, MPLS test cases for BM and Heat. updates: Most of tg_prox and prox_vnf were absorbed into the base classes. delete most of ProxDpdkVnfSetupEnvHelper, it is handled by DpdkVnfSetupEnvHelper baseclass use standard _build_pipeline_kwargs methods don't use terminate() use baseclass version add new method kill_vnf that runs pkill -x replace resource_helper.execute() with vnf_execture for dumping stats In order to share code between tg_prox and vnf_prox refactor to have tg_prox hold and wrap a ProxApproxVnf instance and call methods on that class. Do this instead of multiple-inheritance. Implement ProxApproxVnf.terminate() using prox socket command based exit, (stop_all, quit, force_quit). vnf_execute calls resource_helper.execute() which calls socket methods on the sut object. Since tg_prox wraps the VNF object, we can call terminate on the VNF object and it should work correctly. move prox config generation to parent process we need to get core number info from config file inside the TG processes, so we need to generate the config in the parent process so the data is copied to the child during the fork. moved more config file methods to the setup_helper class. we run force_quit after quit, so the socket should already be closed this will trigger socket error, so add _ignore_errors option for vnf_execute to ignore socket errors Fixed the terminate issue. Added MPLS tests. Added TG Stats in_packet/out_packet Fixed compile (pep8) issues Fixed MPLS TG port stats, in/out packets Added Grafana dashboards for L2FWD and MPLS Traffic profiles modified for tolerated loss and precision as per DATS tests. Added unit test case for Mpls Single port test stats collection support. Change-Id: Idd9493f597c668a3bb7d90e167e6a418546106e8 Signed-off-by: Abhijit Sinha <abhijit.sinha@intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-01sample_vnf: default to 16GB of 2048Kb hugepagesRoss Brattain1-1/+1
8192 * 2048kB = 16GB Change-Id: I82bf420794e5174e88cfaea08b9fab0d77c2be7f Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-09-01Merge "Added TC for vFW in heat context with ixia TG"Ross Brattain2-3/+13
2017-08-31Added TC for vFW in heat context with ixia TGMaciej Skrocki2-3/+13
- added common method to get relative paths - added 'Ixia' APP_NAME Change-Id: I7966798bab71af66d3efbeb1e13b07e8fbb41e88 Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com>
2017-08-30sample_vnf: run_traffic loop, check if tg_process is aliveRoss Brattain1-0/+3
if the tg_process crashes, this loop won't terminate unless we check tg_process.is_alive() wait 1 second before checking in case is_alive needs time to become True Change-Id: Ia0b8fd884dcfeb75ebb8e36caaf1f0b70dab079d Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-08-25Trex: fix KPI collectionRoss Brattain1-1/+1
return super result Change-Id: I723a37281da15c1887ae1b3cf91d7e957b1924d1 Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-08-24Standardized TRex client library pathMaciej Skrocki1-3/+3
- path should be defined via TREX_CLIENT_LIB environmental variable e.g. TREX_CLIENT_LIB=/opt/trex_client/stl - refactored unit tests Change-Id: I18767e48daf774432c010f1b88d18a4f0ee4e156 Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-08-19Merge "Fix IxLoad traffic generator issue around running the traffic."Ross Brattain1-3/+7
2017-08-19Fix IxLoad traffic generator issue around running the traffic.Deepak S1-3/+7
Change-Id: Ic1f13c0d28c1a1b01bbf3c8a6a618a5b3ab5bbeb Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-08-19Support traffic generator for testing more than 10 portsDeepak S2-4/+4
Change-Id: I9c027af082cedbadc23b0151d403dab4e9756da4 Signed-off-by: Deepak S <deepak.s@linux.intel.com>
2017-08-17Fix import error in IxNetworkDeepak S3-2/+5
This patch fixes import error related to ixnetwork and do not wait for TG server to start as IXIA is always running :) Change-Id: I49d6b100eadafad75431cb8974605a6faa496f23 Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
2017-08-17Merge "run_traffic: capture and exit gracefully if crash in trex run_traffic"Ross Brattain2-14/+23
2017-08-15YAML fixesRoss Brattain1-3/+6
There are multiple issues wiht YAML loading. 1. Jinja2 renders None values as a string 'None'. This is not valid YAML we need to render None values to '~' or 'null' which is the native YAML None value. 2. Jinja2 renders dict and lists that contain unicode with u'foo' values. This is not value YAML syntax. Because we are serializing dict and lists into YAML, we need to encode them as valid YAML. We can override Jinja2 finalize to use yaml.dump to dump inline YAML. We use yaml.safe_dump(elem, default_flow_style=True).replace('\n', '') to generate valid single-line YAML dict and list values. But this problem highlights the general difficulties with templating and loading files. We could avoid this Python->Jinja2->YAML->Python issue by directly injecting the list or dict after the YAML is loaded. I'm not sure of the real utility of these templates. 3. On Python 2 YAML loader is rendering all strings as unicode. This does not work for Trex because Trex is broken and badly coded. Trex does type checking against str() which is different for Python 2 and Python 3. The default YAML loader will return native string types, str() or unicode() for Python 2 and Python 3 respectively. The bad Trex codes is in convert_val: https://github.com/cisco-system-traffic-generator/trex-core/blob/master/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_packet_builder_scapy.py#L674 def convert_val (val): if is_integer(val): return val if type(val) == str: return ipv4_str_to_num (is_valid_ipv4(val)) raise CTRexPacketBuildException(-11,("init val invalid %s ") % val ); This code is doing type(val) == str. This is bad and broken. We can't fix Trex, so we have to render all strings as native str() types The bug here was that the Heat template loader template_format.py was overriding the global YAML loader to always return unicode. We don't want this global override. To fix this we have to use local subclasses of the yaml.SafeLoader class. But in order to dynamically subclass from CSafeLoader or SafeLoader we have to use the type() builtin to define a new class at runtime. Once we have new classes defined, we can safely isolate different YAML constructors and return unicode or not depending on the case. To be consistent we implement a new yaml_loader.py module to centralize all non-Heat template yaml loading to ensure correct uncode/str conversion Change-Id: Iebf9cf78fbda390977c390436b0869e7bbf503eb Signed-off-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Deepak S <deepak.s@linux.intel.com> Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>