A Use Case
In this made-up example, our software needs to support a variety of home and enterprise network devices (routers, switches, access points, firewalls…). There is a part of that software that is shared in between all of the devices, while other part is specific to each hardware, and we also want to have the option to personalize them with 3rd party or self-made applications by the final user.
This software has been traditionally integrated into monolithic systems, but we think it is time to upgrade to a containerized solution that will improve our workflow in many levels: independent parts that can be developed by independent teams/people, easily integrable into CI scripts, easily reusable across different hardware and manufacturers, etc.
In the design stage of our new software version, we dissect our legacy monolithic solution and identify the following groups of containers:
- devtools: Development Containers that will not be included in production devices. For example: pvr-sdk and pv-avahi
- net: The container that sets up the basic device network connectivity
- hw-specific: Containers that might vary depending on the hardware we are running. For example: router, mesh, firewall, access-point, switch…
- cloud: Containers that will enable the communication between the device and the cloud for new updates, metadata exchange, logs, etc.
- ui: Containers that will provide the configuration user in interface. For example: webserver
- app: 3rd party or self-made application containers that are installable by the user. For example: vpn, net-monitoring, home assistant…
Taking this high level design as an example, we are going to see how to set it up on a Pantavisor-enabled device in the next post.