Source code for contrail_api_cli.commands.ln

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from ..command import Command, Arg, Option, expand_paths
from ..exceptions import CommandError
from ..resource import Resource
from ..schema import require_schema


[docs]class Ln(Command): """Add or remove a reference link between two resources. .. code-block:: bash admin@localhost:/> tree -r /virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2 ├── virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0 default-domain:foo:default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2__right__1 │ ├── floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06 default-domain:admin:public:floating-ip-pool:958234f5-4fae-4afd-ae7c-d0dc3c608e06 │ └── instance-ip/bced2a04-0ef9-4c87-95a6-7cce54182c65 7d401b8c-b9d3-4be2-af0b-a0dfff500860 └── virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc default-global-system-config:vrouter-1 admin@localhost:/> ln -r virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc admin@localhost:/> tree -r /virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2 └── virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0 default-domain:foo:default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2__right__1 ├── floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06 default-domain:admin:public:floating-ip-pool:958234f5-4fae-4afd-ae7c-d0dc3c608e06 └── instance-ip/bced2a04-0ef9-4c87-95a6-7cce54182c65 7d401b8c-b9d3-4be2-af0b-a0dfff500860 admin@localhost:/> ln virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc admin@localhost:/> tree -r /virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 virtual-machine/8cfbddcf-6b55-4cdf-abcb-14eed68e4da7 default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2 ├── virtual-machine-interface/d739db3d-b89f-46a4-ae02-97ac796261d0 default-domain:foo:default-domain__foo__fa3ea892-3591-4611-ba22-cc45164aee3e__2__right__1 │ ├── floating-ip/958234f5-4fae-4afd-ae7c-d0dc3c608e06 default-domain:admin:public:floating-ip-pool:958234f5-4fae-4afd-ae7c-d0dc3c608e06 │ └── instance-ip/bced2a04-0ef9-4c87-95a6-7cce54182c65 7d401b8c-b9d3-4be2-af0b-a0dfff500860 └── virtual-router/f6f0b262-745b-45f7-a40a-32ffc1f469bc default-global-system-config:vrouter-1 """ description = "Link two resources" resources = Arg(help='resource to link', metavar='PATH', nargs=2, complete='resources::path') remove = Option('-r', help='remove link', action='store_true', default=False) @require_schema() def __call__(self, resources=None, remove=None, schema_version=None): for idx, r in enumerate(resources): resources[idx] = expand_paths([r], predicate=lambda r: isinstance(r, Resource))[0] res1, res2 = resources if res2.type in res1.schema.refs: if remove: res1.remove_ref(res2) else: res1.add_ref(res2) elif res2.type in res1.schema.back_refs: if remove: res1.remove_back_ref(res2) else: res1.add_back_ref(res2) else: raise CommandError("Can't link %s with %s" % (self.current_path(res1), self.current_path(res2)))