Using Config Files
Fogbed accepts a topology.yml
file to build an Experiment
.
To create a FogbedExperiment
, define the following sections: containers
, instances
, and links
. Furthermore, you have the option to create a single topology by setting the is_distributed
section to control when the topology should be distributed across the workers.
Example of topology with .yml file:
topology.yml
is_distributed: false
containers:
node1:
dimage: ubuntu:trusty
dcmd: /bin/bash
environment:
DATA_PATH: /tmp/data
ports:
- 80: 8000
resources: medium
node2:
dimage: ubuntu:trusty
node3:
dimage: ubuntu:trusty
node4:
dimage: ubuntu:trusty
instances:
cloud:
model:
type: cloud
max_cu: 32
max_mu: 2048
containers: ['node1']
fog:
model:
type: fog
max_cu: 8
max_mu: 512
containers: ['node2']
edge:
model:
type: edge
max_cu: 1
max_mu: 128
containers: ['node3', 'node4']
links:
cloud_fog:
delay: 10ms
fog_edge:
workers:
worker1:
ip: hostname1
port: 5000
reachable: ['cloud']
instances: ['cloud']
worker2:
ip: hostname2
port: 5000
reachable: ['fog']
instances: ['fog', 'edge']
links:
fog_edge:
tunnels: ['worker1_worker2']
To run that topology use the command:
Tip
If you set is_distributed: true
that example will run the experiment using two workers.
Make sure the IP addresses and ports are configured according to the experiment script and run a worker in each machine with:
Using the ExperimentBuilder
experiment.py
from fogbed import ExperimentBuilder
if(__name__=='__main__'):
exp = ExperimentBuilder(filename='topology.yml').build()
try:
exp.start()
node1 = exp.get_docker('node1')
node3 = exp.get_docker('node3')
print(node1.cmd(f'ping -c 4 {node3.ip}'))
input('\nPress Enter to exit...')
except Exception as ex:
print(ex)
finally:
exp.stop()
To run that experiment use the command: