def build_blueprint(self, names): """ Builds a named blueprint for this facility :param names: the name(s) of the blueprint(s) to build :type names: ``str`` or ``list`` of ``str`` This function builds the named blueprint in two steps: the infrastructure comes first, and then the nodes themselves. >>>facility.build_blueprint('sql') If the keyword ``basement`` mentions one or several blueprints, then network domains of these special blueprints are built before the actual target blueprint. Example ``fittings.yaml``:: --- basement: admin blueprints: - admin: ethernet: control - sql: ethernet: data nodes: - server1: glue: control In this example, the node ``server1``has two network interfaces. The main network interface is connected to the network ``data``, and the secondary network interface is connected to the network ``control``. """ self.power_on() infrastructure = PlumberyInfrastructure(self) nodes = PlumberyNodes(self) basement = self.list_basement() for name in basement: blueprint = self.get_blueprint(name) infrastructure.build(blueprint) for name in self.expand_blueprint(names): blueprint = self.get_blueprint(name) if name not in basement: infrastructure.build(blueprint) nodes.build_blueprint( blueprint, infrastructure.get_container(blueprint))
def build_blueprint(self, names): """ Builds a named blueprint for this facility :param names: the name(s) of the blueprint(s) to build :type names: ``str`` or ``list`` of ``str`` This function builds the named blueprint in two steps: the infrastructure comes first, and then the nodes themselves. >>>facility.build_blueprint('sql') If the keyword ``basement`` mentions one or several blueprints, then network domains of these special blueprints are built before the actual target blueprint. Example ``fittings.yaml``:: --- basement: admin blueprints: - admin: ethernet: control - sql: ethernet: data nodes: - server1: glue: control In this example, the node ``server1``has two network interfaces. The main network interface is connected to the network ``data``, and the secondary network interface is connected to the network ``control``. """ self.power_on() infrastructure = PlumberyInfrastructure(self) nodes = PlumberyNodes(self) basement = self.list_basement() for name in basement: blueprint = self.get_blueprint(name) infrastructure.build(blueprint) for name in self.expand_blueprint(names): blueprint = self.get_blueprint(name) if name not in basement: infrastructure.build(blueprint) nodes.build_blueprint(blueprint, infrastructure.get_container(blueprint))
class TestPlumberyNodes(unittest.TestCase): def setUp(self): self.nodes = PlumberyNodes(FakeFacility()) def tearDown(self): self.nodes = None def test_build_blueprint(self): domain = FakeDomain() self.nodes.build_blueprint(fakeBlueprint, domain) def test_destroy_blueprint(self): self.nodes.destroy_blueprint(fakeBlueprint) def test_get_node(self): self.nodes.get_node("stackstorm") def test_start_nodes(self): self.nodes.start_blueprint("fake") def test_stop_nodes(self): self.nodes.stop_blueprint("fake")
class TestPlumberyNodes(unittest.TestCase): def setUp(self): self.nodes = PlumberyNodes(FakeFacility()) def tearDown(self): self.nodes = None def test_build_blueprint(self): domain = FakeDomain() self.nodes.build_blueprint(fakeBlueprint, domain) # def test_destroy_blueprint(self): # self.nodes.destroy_blueprint(fakeBlueprint) def test_get_node(self): self.nodes.get_node('stackstorm') def test_start_nodes(self): self.nodes.start_blueprint('fake') def test_stop_nodes(self): self.nodes.stop_blueprint('fake')
def build_all_blueprints(self): """ Builds all blueprints defined for this facility This function builds all network domains across all blueprints, then it builds all nodes across all blueprints. If the keyword ``basement`` mentions one or several blueprints, then these are built before the other blueprints. """ self.power_on() infrastructure = PlumberyInfrastructure(self) nodes = PlumberyNodes(self) basement = self.list_basement() for name in basement: blueprint = self.get_blueprint(name) infrastructure.build(blueprint) blueprints = self.expand_blueprint('*') for name in blueprints: if name not in basement: blueprint = self.get_blueprint(name) infrastructure.build(blueprint) for name in basement: blueprint = self.get_blueprint(name) container = infrastructure.get_container(blueprint) nodes.build_blueprint(blueprint, container) for name in blueprints: if name not in basement: blueprint = self.get_blueprint(name) container = infrastructure.get_container(blueprint) nodes.build_blueprint(blueprint, container)