Creating the Topology Model Component
In most cases the fastest and easiest way to build a Model Component is going to be done by utilizing the mc generate command. The command can take a handful of parameters and generate a Model Component skeleton from that information. Alternatively, users can interactively use the command. We will want to set the following parameters:
name=tutorials.simple_server
– The Model Component needs a name. In this case, a sensible option istutorials.simple_server
.attribute_depends=graph
– To add new Vertices to the graph, we first need to ensure the graph has been created. Therefore, this Model Component will depend on thegraph
attribute.attribute_provides=topology
– This is a topology file, so we’re going to be a provider of atopology
.model_component_depends=base_objects linux.ubuntu1604
– As mentioned in Getting Started, we will need these MCs to properly create our topology.plugin=plugin.py
– Plugin files are used to manipulate the graph (see The Plugin field). Therefore, we will need to specify the name of the plugin file that needs to be run to actually generate the topology. We suggest always naming this fileplugin.py
for consistency.model_component_objects=model_component_objects.py
– Model component objects files contain Python objects which can be used to decorate different graph vertices and edges (see The Model Component Objects field). Therefore, we will need to specify the name of the Model Component objects file that will be imported. We suggest always naming this filemodel_component_objects.py
for consistency.location=/opt/firewheel/model_components/simple_server
– The location of the topology MC. Note that the generation command will automatically create any necessary directories.
Other parameters (e.g. attribute_precedes
, image
, etc.) can be ignored and you can just press the “return” key when prompted.
In order to create the skeleton for the topology Model Component, run the following:
$ firewheel mc generate
(name) ModelComponent name : tutorials.simple_server
(attribute_depends) (space-separated-strings) Graph Attribute(s) depended on by the new ModelComponent []: graph
(attribute_provides) (space-separated-strings) Graph Attribute(s) provided by the new ModelComponent []: topology
(attribute_precedes) (space-separated-strings) Graph Attribute(s) preceded by the new ModelComponent []:
(model_component_depends) (space-separated-strings) ModelComponent(s) required by name []: base_objects linux.ubuntu1604
(model_component_precedes) (space-separated-strings) ModelComponent(s) that will be preceded by name []:
(plugin) File for a plugin []: plugin.py
(model_component_objects) File for Model Component Objects []: model_component_objects.py
(location) Location for the new ModelComponent : /opt/firewheel/model_components/simple_server
(vm_resources) (space-separated-strings) File(s) to be used as a vm_resource []:
(image) File to be used as a VM disk []:
(arch) Architecture for specified image []:
Note
The mc generate helper can also be used non-interactively. For example, to create the same MC outline, you can use the command:
$ firewheel mc generate --non-interactive --name tutorials.simple_server --attribute_depends graph --attribute_provides topology --model_component_depends base_objects linux.ubuntu1604 --plugin plugin.py --model_component_objects model_component_objects.py --location /opt/firewheel/model_components/simple_server
Note
If you chose to use a path other than /opt/firewheel/model_components
you will need to install that path as a FIREWHEEL repository (see Installing a Repository into FIREWHEEL).
Upon completion of this command, it will create the necessary files needed to get started with creating your topology.
MANIFEST
- The basis for every Model Component is itsMANIFEST
file. If you are not familiar with FIREWHEELMANIFEST
files then it is recommended that you read The MANIFEST File before continuing this tutorial. OurMANIFEST
file will look like:attributes: depends: - graph precedes: [] provides: - topology model_component_objects: model_component_objects.py model_components: depends: - base_objects - linux.ubuntu1604 precedes: [] name: tutorials.simple_server plugin: plugin.py
model_component_objects.py
- A template for our Model Component objects.plugin.py
- A template for our Plugin. This is where the primary logic will happen for our MC.README.rst
- We always recommend writing good documentation about your MC to facilitate reusability.