@click.option("--description", help="human readable description")
@click.option(
"--vim_account",
- help="list of VIM accounts (in the same VIM) that can reach this PDU",
+ help="list of VIM accounts (in the same VIM) that can reach this PDU\n"
+ + "The format for multiple VIMs is --vim_account <vim_account_id_1> "
+ + "--vim_account <vim_account_id_2> ... --vim_account <vim_account_id_N>",
multiple=True,
)
@click.option(
"--descriptor_file",
default=None,
- help="PDU descriptor file (as an alternative to using the other arguments",
+ help="PDU descriptor file (as an alternative to using the other arguments)",
)
@click.pass_context
def pdu_create(
):
"""creates a new Physical Deployment Unit (PDU)"""
logger.debug("")
- # try:
+
check_client_version(ctx.obj, ctx.command.name)
+
+ pdu = create_pdu_dictionary(name, pdu_type, interface, description, vim_account, descriptor_file)
+ ctx.obj.pdu.create(pdu)
+
+
+########################
+# UPDATE PDU operation #
+########################
+
+
+@cli_osm.command(
+ name="pdu-update", short_help="updates a Physical Deployment Unit to the catalog"
+)
+@click.argument("name")
+@click.option("--newname", help="New name for the Physical Deployment Unit")
+@click.option("--pdu_type", help="type of PDU (e.g. router, firewall, FW001)")
+@click.option(
+ "--interface",
+ help="interface(s) of the PDU: name=<NAME>,mgmt=<true|false>,ip-address=<IP_ADDRESS>"
+ + "[,type=<overlay|underlay>][,mac-address=<MAC_ADDRESS>][,vim-network-name=<VIM_NET_NAME>]",
+ multiple=True,
+)
+@click.option("--description", help="human readable description")
+@click.option(
+ "--vim_account",
+ help="list of VIM accounts (in the same VIM) that can reach this PDU\n"
+ + "The format for multiple VIMs is --vim_account <vim_account_id_1> "
+ + "--vim_account <vim_account_id_2> ... --vim_account <vim_account_id_N>",
+ multiple=True,
+)
+@click.option(
+ "--descriptor_file",
+ default=None,
+ help="PDU descriptor file (as an alternative to using the other arguments)",
+)
+@click.pass_context
+def pdu_update(
+ ctx, name, newname, pdu_type, interface, description, vim_account, descriptor_file
+):
+ """Updates a new Physical Deployment Unit (PDU)"""
+ logger.debug("")
+
+ check_client_version(ctx.obj, ctx.command.name)
+
+ update = True
+
+ if not newname:
+ newname = name
+
+ pdu = create_pdu_dictionary(newname, pdu_type, interface, description, vim_account, descriptor_file, update)
+ ctx.obj.pdu.update(name, pdu)
+
+
+def create_pdu_dictionary(name, pdu_type, interface, description, vim_account, descriptor_file, update=False):
+
+ logger.debug("")
pdu = {}
+
if not descriptor_file:
- if not name:
- raise ClientException(
- 'in absence of descriptor file, option "--name" is mandatory'
- )
- if not pdu_type:
- raise ClientException(
- 'in absence of descriptor file, option "--pdu_type" is mandatory'
- )
- if not interface:
- raise ClientException(
- 'in absence of descriptor file, option "--interface" is mandatory (at least once)'
- )
- if not vim_account:
- raise ClientException(
- 'in absence of descriptor file, option "--vim_account" is mandatory (at least once)'
- )
+ if not update:
+ if not name:
+ raise ClientException(
+ 'in absence of descriptor file, option "--name" is mandatory'
+ )
+ if not pdu_type:
+ raise ClientException(
+ 'in absence of descriptor file, option "--pdu_type" is mandatory'
+ )
+ if not interface:
+ raise ClientException(
+ 'in absence of descriptor file, option "--interface" is mandatory (at least once)'
+ )
+ if not vim_account:
+ raise ClientException(
+ 'in absence of descriptor file, option "--vim_account" is mandatory (at least once)'
+ )
else:
with open(descriptor_file, "r") as df:
pdu = yaml.safe_load(df.read())
new_iface["mgmt"] = new_iface.get("mgmt", "false").lower() == "true"
ifaces_list.append(new_iface)
pdu["interfaces"] = ifaces_list
- ctx.obj.pdu.create(pdu)
- # except ClientException as e:
- # print(str(e))
- # exit(1)
-
+ return pdu
####################
# UPDATE operations