Files
tacker/doc/tools/ext_oauth2_server/tacker_cli.sh
Hiromu Asahina 059c65baa6 Add tacker_cli for external OAuth2.0
This patch adds CLI shell script which is a wrapper of the curl command
for cases where an external OAuth2.0 authorization server is
configured. Without this script, users need to get OAuth2.0 token and
build a curl command with proper headers and a body manually as the
usual openstack command only work for Keystone.

Change-Id: Idaa159d0f5cc9cc245e141eb595bb2f15c571d03
2024-12-20 22:22:20 +09:00

2744 lines
55 KiB
Bash

#!/bin/bash
PROGNAME=$(basename $0)
VERSION="0.0.1"
UUID="[A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f]-[A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f]-[A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f]-[A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f]-[A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f][A-F0-9a-f]"
HTTP_METHOD="+(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH)"
function usage() {
echo "Usage: $PROGNAME <command> [<args>]"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " -v, --version print version"
echo
echo "Commands:"
echo " vim"
echo " vnfpkgm"
echo " vnflcm"
echo " vnffm"
echo " vnfpm"
echo
echo "Configuration:"
echo
echo " Set credentials and access information as environment variables according to an authentication method"
echo
echo " Examples:"
echo
echo ' client_secret_basic'
echo ' export TACKER_AUTH_URL="http://127.0.0.1:8080/realms/testrealm/protocol/openid-connect/token"'
echo ' export TACKER_CLIENT_ID="tacker_api_proj"'
echo ' export TACKER_CLIENT_SECRET="<secret>"'
echo ' export TACKER_AUTH_TYPE="client_secret_basic"'
echo ' export TACKER_OAUTH2_SCOPE="tacker_scope"'
echo ' export TACKER_URL=http://127.0.0.1:9890'
echo ''
echo ' client_secret_post'
echo ' export TACKER_AUTH_URL="http://127.0.0.1:8080/realms/testrealm/protocol/openid-connect/token"'
echo ' export TACKER_CLIENT_ID="tacker_api_proj"'
echo ' export TACKER_CLIENT_SECRET="<secret>"'
echo ' export TACKER_AUTH_TYPE="client_secret_post"'
echo ' export TACKER_OAUTH2_SCOPE="tacker_scope"'
echo ' export TACKER_URL=http://127.0.0.1:9890'
echo ''
echo ' private_key_jwt'
echo ' export TACKER_AUTH_URL="http://127.0.0.1:8080/realms/testrealm/protocol/openid-connect/token"'
echo ' export TACKER_CLIENT_ID="tacker_api_proj"'
echo ' export TACKER_JWT_KEY="/opt/stack/workspace/ext_oauth2/keycloak/script/private_key.pem"'
echo ' export TACKER_AUTH_TYPE="private_key_jwt"'
echo ' export TACKER_OAUTH2_SCOPE="tacker_scope"'
echo ' export TACKER_URL=http://127.0.0.1:9890'
echo ''
echo ' client_secret_jwt'
echo ' export TACKER_AUTH_URL="http://127.0.0.1:8080/realms/testrealm/protocol/openid-connect/token"'
echo ' export TACKER_CLIENT_ID="tacker_api_proj"'
echo ' export TACKER_CLIENT_SECRET="<secret>"'
echo ' export TACKER_AUTH_TYPE="client_secret_jwt"'
echo ' export TACKER_OAUTH2_SCOPE="tacker_scope"'
echo ' export TACKER_URL=http://127.0.0.1:9890'
echo ''
echo ' tls_client_auth'
echo ' export TACKER_AUTH_URL="https://127.0.0.1:8443/realms/testrealm/protocol/openid-connect/token"'
echo ' export TACKER_CLIENT_ID="tacker_api_proj"'
echo ' export TACKER_AUTH_TYPE="tls_client_auth"'
echo ' export TACKER_OAUTH2_SCOPE="tacker_scope"'
echo ' export TACKER_CACERT="path/to/ca.pem"'
echo ' export TACKER_CLIENT_CERT="path/to/client.pem"'
echo ' export TACKER_CLIENT_KEY="path/to/client.key"'
echo ' export TACKER_URL=https://127.0.0.1:9890'
echo
}
function vim::usage() {
echo "Usage: $PROGNAME vim <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " register"
echo " list"
echo " show"
echo " update"
echo " delete"
}
function vim::register::usage() {
echo "Usage: $PROGNAME vim register [-h] --config-file <file>"
echo
echo "Register a new VIM"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --config-file <file>"
echo " YAML file with VIM configuration parameters"
echo
}
function vim::list::usage() {
echo "Usage: $PROGNAME vim list [-h]"
echo
echo "List VIMs that belong to a given tenant"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vim::show::usage() {
echo "Usage: $PROGNAME vim show [-h] <vim>"
echo
echo "Display VIM details"
echo
echo "positional arguments:"
echo " <vim> VIM to display (ID)"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vim::update::usage() {
echo "Usage: $PROGNAME vim update [-h] <vim> --config-file <file>"
echo
echo "Update VIM"
echo
echo "positional arguments:"
echo " <vim> ID of vim to update"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --config-file <file>"
echo " YAML file with VIM configuration parameters for update"
echo
}
function vim::delete::usage() {
echo "Usage: $PROGNAME vim delete [-h] <vim> [<vim> ...]"
echo
echo "Delete VIM(s)"
echo
echo "positional arguments:"
echo " <vim> vim(s) to delete (ID)"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpkgm::usage() {
echo "Usage: $PROGNAME vnfpkgm <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " create"
echo " upload"
echo " download"
echo " artifact-download"
echo " list"
echo " show"
echo " update"
echo " delete"
echo
}
function vnfpkgm::create::usage() {
echo "Usage: $PROGNAME vnfpkgm create [-h] [--param-file <param-file>]"
echo
echo "Create a new VNF Package"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify create request parameters in a json file"
echo
}
function vnfpkgm::upload::usage() {
echo "Usage: $PROGNAME vnfpkgm upload [-h] --path <file> <vnf-package>"
echo
echo "Upload VNF Package"
echo
echo "positional arguments:"
echo " <vnf-package>"
echo " VNF package ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --path <file>"
echo " upload VNF CSAR package from local zip file"
echo
}
function vnfpkgm::download::usage() {
echo "Usage: $PROGNAME vnfpkgm download [-h] [--file <file>] <vnf-package>"
echo
echo "Download VNF package contents of an on-boarded VNF package"
echo
echo "positional arguments:"
echo " <vnf-package>"
echo " VNF package ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --file <FILE>"
echo " Local file to save downloaded VNF Package data. If this is not specified"
echo " data will be saved as <vnf-package>.zip"
echo
echo
}
function vnfpkgm::artifact_download::usage() {
echo "Usage: $PROGNAME vnfpkgm artifact-download [-h] --file <file> --artifact-path <artifact-path> <vnf-package>"
echo
echo "Download VNF package artifact of an on-boarded VNF package"
echo
echo "positional arguments:"
echo " <vnf-package>"
echo " VNF package ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --file <FILE>"
echo " Local file to save downloaded artifact data"
echo " --artifact-path <artifact-path>"
echo " The artifact file's path"
echo
}
function vnfpkgm::list::usage() {
echo "Usage: $PROGNAME vnfpkgm list [-h]"
echo
echo "List VNF Packages"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpkgm::show::usage() {
echo "Usage: $PROGNAME vnfpkgm show [-h] <vnf-package>"
echo
echo "Show VNF Package Details"
echo
echo "positional arguments:"
echo " <vnf-package>"
echo " VNF package ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpkgm::update::usage() {
echo "Usage: $PROGNAME vnfpkgm update [-h] --param-file <param-file> <vnf-package>"
echo
echo "Update information about an individual VNF package"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify update request parameters in a json file"
echo
}
function vnfpkgm::delete::usage() {
echo "Usage: $PROGNAME vnfpkgm delete [-h] <vnf-package> [<vnf-package> ...]"
echo
echo "Delete VNF Package"
echo
echo "positional arguments:"
echo " <vnf-package>"
echo " Vnf package(s) ID to delete"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnflcm::usage() {
echo "Usage: $PROGNAME vnflcm <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " create"
echo " instanatiate"
echo " list"
echo " show"
echo " terminate"
echo " delete"
echo " heal"
echo " update"
echo " scale"
echo " change-ext-conn"
echo " change-vnfpkg"
echo " versions"
echo " op"
echo " subsc"
}
function vnflcm::create::usage() {
echo "Usage: $PROGNAME vnflcm create [-h] --param-file <param-file>"
echo
echo "Create a new VNF Instance"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify create request parameters in a json file"
echo
}
function vnflcm::instantiate::usage() {
echo "Usage: $PROGNAME vnflcm instantiate [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Instantiate a VNF Instance"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to instantiate"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify instantiate request parameters in a json file"
echo
}
function vnflcm::list::usage() {
echo "Usage: $PROGNAME vnflcm list [-h]"
echo
echo "List VNF Instances"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnflcm::show::usage() {
echo "Usage: $PROGNAME vnflcm show [-h] <vnf-instance>"
echo
echo "Display VNF Instance details"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnflcm::terminate::usage() {
echo "Usage: $PROGNAME vnflcm terminate [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Terminate a VNF Instance"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to terminate"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify terminate request parameters in a json file"
echo
}
function vnflcm::delete::usage() {
echo "Usage: $PROGNAME vnflcm delete [-h] <vnf-instance> [<vnf-instance> ...]"
echo
echo "Delete VNF Instance(s)"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID(s) to delete"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnflcm::heal::usage() {
echo "Usage: $PROGNAME vnflcm heal [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Heal a VNF Instance"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to heal"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify heal request parameters in a json file"
echo
}
function vnflcm::update::usage() {
echo "Usage: $PROGNAME vnflcm update [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Update a VNF Instance"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to update"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify update request parameters in a json file"
echo
}
function vnflcm::scale::usage() {
echo "Usage: $PROGNAME vnflcm scale [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Scale a VNF Instance"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to scale"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify scale request parameters in a json file"
echo
}
function vnflcm::change_ext_conn::usage() {
echo "Usage: $PROGNAME vnflcm change-ext-conn [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Change External VNF Connectivity"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to Change External VNF Connectivity"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify change-ext-conn request parameters in a json file"
echo
}
function vnflcm::change_vnfpkg::usage() {
echo "Usage: $PROGNAME vnflcm change-vnfpkg [-h] --param-file <param-file> <vnf-instance>"
echo
echo "Change Current VNF Package"
echo
echo "positional arguments:"
echo " <vnf-instance>"
echo " VNF instance ID to Change Current VNF Package"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify change-vnfpkg request parameters in a json file"
echo
}
function vnflcm::versions::usage() {
echo "Usage: $PROGNAME vnflcm versions [-h]"
echo
echo "Show VnfLcm Api versions"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function op::usage() {
echo "Usage: $PROGNAME vnflcm op <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " rollback"
echo " retry"
echo " fail"
echo " list"
echo " show"
echo
}
function op::rollback::usage() {
echo "Usage: $PROGNAME vnflcm op rollback [-h] <vnf-lcm-op-occ-id>"
echo
echo "Rollback LCM Operation Occurrence"
echo
echo "positional arguments:"
echo " <vnf-lcm-op-occ-id>"
echo " VNF lifecycle management operation occurrence ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function op::retry::usage() {
echo "Usage: $PROGNAME vnflcm op retry [-h] <vnf-lcm-op-occ-id>"
echo
echo "Retry LCM Operation Occurrence"
echo
echo "positional arguments:"
echo " <vnf-lcm-op-occ-id>"
echo " VNF lifecycle management operation occurrence ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function op::fail::usage() {
echo "Usage: $PROGNAME vnflcm op fail [-h] <vnf-lcm-op-occ-id>"
echo
echo "Fail LCM Operation Occurrence"
echo
echo "positional arguments:"
echo " <vnf-lcm-op-occ-id>"
echo " VNF lifecycle management operation occurrence ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function op::list::usage() {
echo "Usage: $PROGNAME vnflcm op list [-h]"
echo
echo "List LCM Operation Occurrences"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function op::show::usage() {
echo "Usage: $PROGNAME vnflcm op show [-h] <vnf-lcm-op-occ-id>"
echo
echo "Display LCM Operation Occurrence details"
echo
echo "positional arguments:"
echo " <vnf-lcm-op-occ-id>"
echo " VNF lifecycle management operation occurrence ID"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function subsc::usage() {
echo "Usage: $PROGNAME vnflcm subsc <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " create"
echo " list"
echo " show"
echo " delete"
echo
}
function subsc::create::usage() {
echo "Usage: $PROGNAME vnflcm subsc create [-h] --param-file <param-file>"
echo
echo "Create a new Lccn Subscription"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify create request parameters in a json file"
echo
}
function subsc::list::usage() {
echo "Usage: $PROGNAME vnflcm subsc list [-h]"
echo
echo "List Lccn Subscriptions"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function subsc::show::usage() {
echo "Usage: $PROGNAME vnflcm subsc show [-h] <subscription-id>"
echo
echo "Display Lccn Subscription details"
echo
echo "positional arguments:"
echo " <subscription-id>"
echo " Lccn Subscription ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function subsc::delete::usage() {
echo "Usage: $PROGNAME vnflcm subsc delete [-h] <subscription-id> [<subscription-id> ...]"
echo
echo "Delete Lccn Subscription(s)"
echo
echo "positional arguments:"
echo " <subscription-id>"
echo " Lccn Subscription ID(s) to delete"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnffm::usage() {
echo "Usage: $PROGNAME vnffm <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " alarm"
echo " sub"
echo
}
function vnffm::alarm::usage() {
echo "Usage: $PROGNAME vnffm alarm <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " list"
echo " show"
echo " update"
echo
}
function vnffm::alarm::list::usage() {
echo "Usage: $PROGNAME vnffm alarm list [-h]"
echo
echo "List VNF FM alarms"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnffm::alarm::show::usage() {
echo "Usage: $PROGNAME vnffm alarm show [-h] <vnf-fm-alarm-id>"
echo
echo "Display VNF FM alarm details"
echo
echo "positional arguments:"
echo " <vnf-fm-alarm-id>"
echo " VNF FM alarm ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnffm::alarm::update::usage() {
echo "Usage: $PROGNAME vnffm alarm update [-h] --param-file <param-file> <vnf-fm-alarm-id>"
echo
echo "Update information about an individual VNF FM alarm"
echo
echo "positional arguments:"
echo " <vnf-fm-alarm-id>"
echo " VNF FM alarm ID to update"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify update request parameters in a json file"
echo
}
function vnffm::sub::usage() {
echo "Usage: $PROGNAME vnffm sub <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " create"
echo " list"
echo " show"
echo " delete"
}
function vnffm::sub::create::usage() {
echo "Usage: $PROGNAME vnffm sub create [-h] --param-file <param-file>"
echo
echo "Create a new VNF FM subscription"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify create VNF FM subscription request parameters in a json file"
echo
}
function vnffm::sub::list::usage() {
echo "Usage: $PROGNAME vnffm sub list [-h]"
echo
echo "List VNF FM subscriptions"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnffm::sub::show::usage() {
echo "Usage: $PROGNAME vnffm sub show [-h] <vnf-fm-sub-id>"
echo
echo "Display VNF FM subscription details"
echo
echo "positional arguments:"
echo " <vnf-fm-sub-id>"
echo " VNF FM subscription ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnffm::sub::delete::usage() {
echo "Usage: $PROGNAME vnffm sub delete [-h] <vnf-fm-sub-id> [<vnf-fm-sub-id> ...]"
echo
echo "Delete VNF FM subscription(s)"
echo
echo "positional arguments:"
echo " <vnf-fm-sub-id>"
echo " VNF FM subscription ID(s) to delete"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpm::usage() {
echo "Usage: $PROGNAME vnfpm <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " job"
echo " report-show"
echo " threshold"
echo
}
function vnfpm::job::usage() {
echo "Usage: $PROGNAME vnfpm job <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " create"
echo " update"
echo " list"
echo " show"
echo " delete"
echo
}
function vnfpm::job::create::usage() {
echo "Usage: $PROGNAME vnfpm job create [-h] --param-file <param-file>"
echo
echo "Create a new VNF PM job"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify create VNF PM job request parameters in a json file"
echo
}
function vnfpm::job::update::usage() {
echo "Usage: $PROGNAME vnfpm job update [-h] --param-file <param-file> <vnf-pm-job-id>"
echo
echo "Update information about an individual VNF PM job"
echo
echo "positional arguments:"
echo " <vnf-pm-job-id>"
echo " VNF PM job ID to update"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify update PM job request parameters in a json file"
echo
}
function vnfpm::job::list::usage() {
echo "Usage: $PROGNAME vnfpm job list [-h]"
echo
echo "List VNF PM jobs"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpm::job::show::usage() {
echo "Usage: $PROGNAME vnfpm job show [-h] <vnf-pm-job-id>"
echo
echo "Display VNF PM job details"
echo
echo "positional arguments:"
echo " <vnf-pm-job-id>"
echo " VNF PM job ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpm::job::delete::usage() {
echo "Usage: $PROGNAME vnfpm job delete [-h] <vnf-pm-job-id> [<vnf-pm-job-id> ...]"
echo
echo "Delete VNF PM job(s)"
echo
echo "positional arguments:"
echo " <vnf-pm-job-id>"
echo " VNF PM job ID(s) to delete"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify delete request parameters in a json file"
echo
}
function vnfpm::report_show::usage() {
echo "Usage: $PROGNAME vnfpm report-show [-h] <vnf-pm-job-id> <vnf-pm-report-id>"
echo
echo "Display VNF PM report details"
echo
echo "positional arguments:"
echo " <vnf-pm-job-id>"
echo " VNF PM job id where the VNF PM report is located"
echo " <vnf-pm-report-id>"
echo " VNF PM report ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpm::threshold::usage() {
echo "Usage: $PROGNAME vnfpm threshold <command> [<args>]"
echo
echo "Options:"
echo " h-, --help show this help message and exit"
echo
echo "Commands:"
echo " create"
echo " update"
echo " list"
echo " show"
echo " delete"
echo
}
function vnfpm::threshold::create::usage() {
echo "Usage: $PROGNAME vnfpm threshold create [-h] --param-file <param-file>"
echo
echo "Create a new VNF PM threshold"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify create request parameters in a json file"
echo
}
function vnfpm::threshold::update::usage() {
echo "Usage: $PROGNAME vnfpm threshold update [-h] --param-file <param-file> <vnf-pm-threshold-id>"
echo
echo "Update information about an individual VNF PM threshold"
echo
echo "positional arguments:"
echo " <vnf-pm-threshold-id>"
echo " VNF PM threshold ID to update"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo " --param-file <param-file>"
echo " specify update PM threshold request parameters in a json file"
echo
}
function vnfpm::threshold::list::usage() {
echo "Usage: $PROGNAME vnfpm threshold list [-h]"
echo
echo "List VNF PM thresholds"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpm::threshold::show::usage() {
echo "Usage: $PROGNAME vnfpm threshold show [-h] <vnf-pm-threshold-id>"
echo
echo "Display VNF PM threshold details"
echo
echo "positional arguments:"
echo " <vnf-pm-threshold-id>"
echo " VNF PM threshold ID to display"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vnfpm::threshold::delete::usage() {
echo "Usage: $PROGNAME vnfpm threshold delete [-h] <vnf-pm-threshold-id> [<vnf-pm-threshold-id> ...]"
echo
echo "Delete VNF PM threshold(s)"
echo
echo "positional arguments:"
echo " <vnf-pm-threshold-id>"
echo " VNF PM threshold ID(s) to delete"
echo
echo "Options:"
echo " -h, --help show this help message and exit"
echo
}
function vim() {
case $1 in
-h | --help)
vim::usage
exit 0
;;
register)
shift
vim::register "${@}"
exit 0
;;
list)
shift
vim::list "${@}"
exit 0
;;
show)
shift
vim::show "${@}"
exit 0
;;
update)
shift
vim::update "${@}"
exit 0
;;
delete)
shift
vim::delete "${@}"
exit 0
;;
*)
vim::usage
exit 1
;;
esac
}
function vim::register() {
case $1 in
-h | --help)
vim::register::usage
exit 0
;;
--config-file)
config_file="$2"
shift
shift
;;
esac
if [[ -z "${config_file}" ]]; then
vim::register::usage
exit 1
fi
exec_curl POST /v1.0/vims -d @${config_file}
}
function vim::list() {
case $1 in
-h | --help)
vim::list::usage
exit 0
;;
esac
exec_curl GET /v1.0/vims
}
function vim::show() {
case $1 in
-h | --help)
vim::show::usage
exit 0
;;
${UUID})
vim_id="${1}"
shift
;;
esac
if [[ -z "${vim_id}" ]]; then
vim::show::usage
exit 1
fi
exec_curl GET /v1.0/vims/${vim_id}
}
function vim::update() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vim::update::usage
exit 0
;;
--config-file)
config_file="$2"
shift
shift
;;
${UUID})
vim_id="${1}"
shift
;;
*)
break
;;
esac
done
if [[ -z "${config_file}" || -z "${vim_id}" ]]; then
vim::update::usage
exit 1
fi
exec_curl PUT /v1.0/vims/${vim_id} -d @${config_file}
}
function vim::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vim::delete::usage
exit 0
;;
${UUID})
vim_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${vim_ids}" ]]; then
vim::delete::usage
exit 1
fi
for vim_id in "${vim_ids[@]}"; do
exec_curl DELETE /v1.0/vims/${vim_id}
done
}
function vnfpkgm() {
case $1 in
-h | --help)
vnfpkgm::usage
exit 0
;;
create)
shift
vnfpkgm::create "${@}"
exit 0
;;
upload)
shift
vnfpkgm::upload "${@}"
exit 0
;;
download)
shift
vnfpkgm::download "${@}"
exit 0
;;
artifact-download)
shift
vnfpkgm::artifact_download "${@}"
exit 0
;;
list)
shift
vnfpkgm::list "${@}"
exit 0
;;
show)
shift
vnfpkgm::show "${@}"
exit 0
;;
update)
shift
vnfpkgm::update "${@}"
exit 0
;;
delete)
shift
vnfpkgm::delete "${@}"
exit 0
;;
*)
vnfpkgm::usage
exit 1
;;
esac
}
function vnfpkgm::create() {
case $1 in
-h | --help)
vnfpkgm::create::usage
exit 0
;;
--param-file)
param="@${2}"
shift
shift
;;
esac
exec_curl POST /vnfpkgm/v1/vnf_packages -d ${param:="{}"}
}
function vnfpkgm::upload() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpkgm::upload::usage
exit 0
;;
${UUID})
pkg_id="${1}"
shift
;;
--path)
pkg_path="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${pkg_id}" || -z "${pkg_path}" || "${pkg_path##*.}" != "zip" ]]; then
vnfpkgm::upload::usage
exit 1
fi
exec_curl PUT /vnfpkgm/v1/vnf_packages/${pkg_id}/package_content -H "Content-Type: application/zip" -F "vnf_package_content=@${pkg_path}"
}
function vnfpkgm::download() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpkgm::download::usage
exit 0
;;
${UUID})
pkg_id="${1}"
shift
;;
--file)
file="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${pkg_id}" ]]; then
vnfpkgm::download::usage
exit 1
fi
exec_curl GET /vnfpkgm/v1/vnf_packages/${pkg_id}/package_content -o ${file:="${pkg_id}.zip"}
}
function vnfpkgm::artifact_download() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpkgm::artifact_download::usage
exit 0
;;
${UUID})
pkg_id="${1}"
shift
;;
--file)
file="${2}"
shift
shift
;;
--artifact-path)
artifact_path="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${pkg_id}" || -z "${artifact_path}" || -z "${file}" ]]; then
vnfpkgm::artifact_download::usage
exit 1
fi
exec_curl GET /vnfpkgm/v1/vnf_packages/${pkg_id}/artifacts/${artifact_path} -o ${file}
}
function vnfpkgm::list() {
case $1 in
-h | --help)
vnfpkgm::list::usage
exit 0
;;
esac
exec_curl GET /vnfpkgm/v1/vnf_packages
}
function vnfpkgm::show() {
case $1 in
-h | --help)
vnfpkgm::show::usage
exit 0
;;
${UUID})
pkg_id="${1}"
shift
;;
esac
if [[ -z "${pkg_id}" ]]; then
vnfpkgm::show::usage
exit 1
fi
exec_curl GET /vnfpkgm/v1/vnf_packages/${pkg_id}
}
function vnfpkgm::update() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpkgm::update::usage
exit 0
;;
${UUID})
pkg_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${pkg_id}" || -z "${param}" ]]; then
vnfpkgm::update::usage
exit 1
fi
exec_curl PATCH /vnfpkgm/v1/vnf_packages/${pkg_id} -d @"${param}"
}
function vnfpkgm::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpkgm::delete::usage
exit 0
;;
${UUID})
pkg_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${pkg_ids}" ]]; then
vnfpkgm::delete::usage
exit 1
fi
for pkg_id in "${pkg_ids[@]}"; do
exec_curl DELETE /vnfpkgm/v1/vnf_packages/${pkg_id}
done
}
function vnflcm() {
case $1 in
-h | --help)
vnflcm::usage
exit 0
;;
op)
shift
op "${@}"
exit 0
;;
subsc)
shift
subsc "${@}"
exit 0
;;
create)
shift
vnflcm::create "${@}"
exit 0
;;
instantiate)
shift
vnflcm::instantiate "${@}"
exit 0
;;
list)
shift
vnflcm::list "${@}"
exit 0
;;
show)
shift
vnflcm::show "${@}"
exit 0
;;
terminate)
shift
vnflcm::terminate "${@}"
exit 0
;;
delete)
shift
vnflcm::delete "${@}"
exit 0
;;
heal)
shift
vnflcm::heal "${@}"
exit 0
;;
update)
shift
vnflcm::update "${@}"
exit 0
;;
scale)
shift
vnflcm::scale "${@}"
exit 0
;;
change-ext-conn)
shift
vnflcm::change_ext_conn "${@}"
exit 0
;;
change-vnfpkg)
shift
vnflcm::change_vnfpkg "${@}"
exit 0
;;
versions)
shift
vnflcm::versions "${@}"
exit 0
;;
*)
vnflcm::usage
exit 1
;;
esac
}
function vnflcm::create() {
case $1 in
-h | --help)
vnflcm::create::usage
exit 0
;;
--param-file)
param="${2}"
shift
shift
;;
esac
if [[ -z "${param}" ]]; then
vnflcm::create::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances -H "version: 2.0.0" -d @${param}
}
function vnflcm::instantiate() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::instantiate::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::instantiate::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances/${inst_id}/instantiate -H "version: 2.0.0" -d @${param}
}
function vnflcm::list() {
case $1 in
-h | --help)
vnflcm::list::usage
exit 0
;;
esac
exec_curl GET /vnflcm/v2/vnf_instances -H "version: 2.0.0"
}
function vnflcm::show() {
case $1 in
-h | --help)
vnflcm::show::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
esac
if [[ -z "${inst_id}" ]]; then
vnflcm::show::usage
exit 1
fi
exec_curl GET /vnflcm/v2/vnf_instances/${inst_id} -H "version: 2.0.0"
}
function vnflcm::terminate() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::terminate::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::terminate::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances/${inst_id}/terminate -H "version: 2.0.0" -d @${param}
}
function vnflcm::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::delete::usage
exit 0
;;
${UUID})
inst_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_ids}" ]]; then
vnflcm::delete::usage
exit 1
fi
for inst_id in "${inst_ids[@]}"; do
exec_curl DELETE /vnflcm/v2/vnf_instances/${inst_id} -H "version: 2.0.0"
done
}
function vnflcm::heal() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::heal::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::heal::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances/${inst_id}/heal -H "version: 2.0.0" -d @${param}
}
function vnflcm::update() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::update::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::update::usage
exit 1
fi
exec_curl PATCH /vnflcm/v2/vnf_instances/${inst_id} -H "version: 2.0.0" -d @${param}
}
function vnflcm::scale() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::scale::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::scale::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances/${inst_id}/scale -H "version: 2.0.0" -d @${param}
}
function vnflcm::change_ext_conn() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::change_ext_conn::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::change_ext_conn::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances/${inst_id}/change_ext_conn -H "version: 2.0.0" -d @${param}
}
function vnflcm::change_vnfpkg() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnflcm::change_vnfpkg::usage
exit 0
;;
${UUID})
inst_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
*)
break
;;
esac
done
if [[ -z "${inst_id}" || -z "${param}" ]]; then
vnflcm::change_vnfpkg::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_instances/${inst_id}/change_vnfpkg -H "version: 2.0.0" -d @${param}
}
function vnflcm::versions() {
case $1 in
-h | --help)
vnflcm::versions::usage
exit 0
;;
esac
exec_curl GET /vnflcm/v2/api_versions
}
function op() {
case $1 in
-h | --help)
op::usage
exit 0
;;
rollback)
shift
op::rollback "${@}"
exit 0
;;
retry)
shift
op::retry "${@}"
exit 0
;;
fail)
shift
op::fail "${@}"
exit 0
;;
list)
shift
op::list "${@}"
exit 0
;;
show)
shift
op::show "${@}"
exit 0
;;
*)
op::usage
exit 1
;;
esac
}
function op::rollback() {
case $1 in
-h | --help)
op::rollback::usage
exit 0
;;
${UUID})
opocc_id="${1}"
shift
;;
esac
if [[ -z "${opocc_id}" ]]; then
op::rollback::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_lcm_op_occs/${opocc_id}/rollback -H "version: 2.0.0"
}
function op::retry() {
case $1 in
-h | --help)
op::retry::usage
exit 0
;;
${UUID})
opocc_id="${1}"
shift
;;
esac
if [[ -z "${opocc_id}" ]]; then
op::retry::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_lcm_op_occs/${opocc_id}/retry -H "version: 2.0.0"
}
function op::fail() {
case $1 in
-h | --help)
op::fail::usage
exit 0
;;
${UUID})
opocc_id="${1}"
shift
;;
esac
if [[ -z "${opocc_id}" ]]; then
op::fail::usage
exit 1
fi
exec_curl POST /vnflcm/v2/vnf_lcm_op_occs/${opocc_id}/fail -H "version: 2.0.0"
}
function op::list() {
case $1 in
-h | --help)
op::list::usage
exit 0
;;
esac
exec_curl GET /vnflcm/v2/vnf_lcm_op_occs -H "version: 2.0.0"
}
function op::show() {
case $1 in
-h | --help)
op::show::usage
exit 0
;;
${UUID})
opocc_id="${1}"
shift
;;
esac
if [[ -z "${opocc_id}" ]]; then
op::show::usage
exit 1
fi
exec_curl GET /vnflcm/v2/vnf_lcm_op_occs/${opocc_id} -H "version: 2.0.0"
}
function subsc() {
case $1 in
-h | --help)
subsc::usage
exit 0
;;
create)
shift
subsc::create "${@}"
exit 0
;;
list)
shift
subsc::list "${@}"
exit 0
;;
show)
shift
subsc::show "${@}"
exit 0
;;
delete)
shift
subsc::delete "${@}"
exit 0
;;
*)
subsc::usage
exit 1
;;
esac
}
function subsc::create() {
case $1 in
-h | --help)
subsc::create::usage
exit 0
;;
--param-file)
param="${2}"
shift
shift
;;
esac
if [[ -z "${param}" ]]; then
subsc::create::usage
exit 1
fi
exec_curl POST /vnflcm/v2/subscriptions -H "version: 2.0.0" -d@${param}
}
function subsc::list() {
case $1 in
-h | --help)
subsc::list::usage
exit 0
;;
esac
exec_curl GET /vnflcm/v2/subscriptions -H "version: 2.0.0"
}
function subsc::show() {
case $1 in
-h | --help)
subsc::show::usage
exit 0
;;
${UUID})
subsc_id="${1}"
shift
;;
esac
if [[ -z "${subsc_id}" ]]; then
subsc::show::usage
exit 1
fi
exec_curl GET /vnflcm/v2/subscriptions/${subsc_id} -H "version: 2.0.0"
}
function subsc::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
subsc::delete::usage
exit 0
;;
${UUID})
subsc_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${subsc_ids}" ]]; then
subsc::delete::usage
exit 1
fi
for subsc_id in "${subsc_ids[@]}"; do
exec_curl DELETE /vnflcm/v2/subscriptions/${subsc_id} -H "version: 2.0.0"
done
}
function vnffm() {
case $1 in
-h | --help)
vnffm::usage
exit 0
;;
alarm)
shift
vnffm::alarm "${@}"
exit 0
;;
sub)
shift
vnffm::sub "${@}"
exit 0
;;
*)
vnffm::usage
exit 1
;;
esac
}
function vnffm::alarm() {
case $1 in
-h | --help)
vnffm::alarm::usage
exit 0
;;
list)
shift
vnffm::alarm::list "${@}"
exit 0
;;
show)
shift
vnffm::alarm::show "${@}"
exit 0
;;
update)
shift
vnffm::alarm::update "${@}"
exit 0
;;
*)
vnffm::alarm::usage
exit 1
;;
esac
}
function vnffm::alarm::list() {
case $1 in
-h | --help)
vnffm::alarm::list::usage
exit 0
;;
esac
exec_curl GET /vnffm/v1/alarms -H "version: 1.3.0"
}
function vnffm::alarm::show() {
case $1 in
-h | --help)
vnffm::alarm::show::usage
exit 0
;;
${UUID})
alarm_id="${1}"
shift
;;
esac
if [[ -z "${alarm_id}" ]]; then
vnffm::alarm::show::usage
exit 1
fi
exec_curl GET /vnffm/v1/alarms/${alarm_id} -H "version: 1.3.0"
}
function vnffm::alarm::update() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnffm::alarm::update::usage
exit 0
;;
${UUID})
alarm_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
esac
done
if [[ -z "${param}" ]]; then
vnffm::alarm::update::usage
exit 1
fi
exec_curl PATCH /vnffm/v1/alarms/${alarm_id} -H "version: 1.3.0" -d@${param}
}
function vnffm::sub() {
case $1 in
-h | --help)
vnffm::sub::usage
exit 0
;;
create)
shift
vnffm::sub::create "${@}"
exit 0
;;
list)
shift
vnffm::sub::list "${@}"
exit 0
;;
show)
shift
vnffm::sub::show "${@}"
exit 0
;;
delete)
shift
vnffm::sub::delete "${@}"
exit 0
;;
*)
vnffm::sub::usage
exit 1
;;
esac
}
function vnffm::sub::create() {
case $1 in
-h | --help)
vnffm::sub::create::usage
exit 0
;;
--param-file)
param="${2}"
shift
shift
;;
esac
if [[ -z "${param}" ]]; then
vnffm::sub::create::usage
exit 1
fi
exec_curl POST /vnffm/v1/subscriptions -H "version: 1.3.0" -d@${param}
}
function vnffm::sub::list() {
case $1 in
-h | --help)
vnffm::sub::list::usage
exit 0
;;
esac
exec_curl GET /vnffm/v1/subscriptions -H "version: 1.3.0"
}
function vnffm::sub::show() {
case $1 in
-h | --help)
vnffm::sub::show::usage
exit 0
;;
${UUID})
sub_id="${1}"
shift
;;
esac
if [[ -z "${sub_id}" ]]; then
vnffm::sub::show::usage
exit 1
fi
exec_curl GET /vnffm/v1/subscriptions/${sub_id} -H "version: 1.3.0"
}
function vnffm::sub::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnffm::sub::delete::usage
exit 0
;;
${UUID})
sub_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${sub_ids}" ]]; then
vnffm::sub::delete::usage
exit 1
fi
for sub_id in "${sub_ids[@]}"; do
exec_curl DELETE /vnffm/v1/subscriptions/${sub_id} -H "version: 1.3.0"
done
}
function vnfpm() {
case $1 in
-h | --help)
vnfpm::usage
exit 0
;;
job)
shift
vnfpm::job "${@}"
exit 0
;;
report-show)
shift
vnfpm::report_show "${@}"
exit 0
;;
threshold)
shift
vnfpm::threshold "${@}"
exit 0
;;
*)
vnfpm::usage
exit 1
;;
esac
}
function vnfpm::job() {
case $1 in
-h | --help)
vnfpm::job::usage
exit 0
;;
create)
shift
vnfpm::job::create "${@}"
exit 0
;;
update)
shift
vnfpm::job::update "${@}"
exit 0
;;
list)
shift
vnfpm::job::list "${@}"
exit 0
;;
show)
shift
vnfpm::job::show "${@}"
exit 0
;;
delete)
shift
vnfpm::job::delete "${@}"
exit 0
;;
*)
vnfpm::job::usage
exit 1
;;
esac
}
function vnfpm::job::create() {
case $1 in
-h | --help)
vnfpm::job::create::usage
exit 0
;;
--param-file)
param="${2}"
shift
shift
;;
esac
if [[ -z "${param}" ]]; then
vnfpm::job::create::usage
exit 1
fi
exec_curl POST /vnfpm/v2/pm_jobs -H "version: 2.1.0" -d@${param}
}
function vnfpm::job::update() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpm::job::update::usage
exit 0
;;
${UUID})
job_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
esac
done
if [[ -z "${param}" || -z "${job_id}" ]]; then
vnfpm::job::update::usage
exit 1
fi
exec_curl PATCH /vnfpm/v2/pm_jobs/${job_id} -H "version: 2.1.0" -d@${param}
}
function vnfpm::job::list() {
case $1 in
-h | --help)
vnfpm::job::list::usage
exit 0
;;
esac
exec_curl GET /vnfpm/v2/pm_jobs -H "version: 2.1.0"
}
function vnfpm::job::show() {
case $1 in
-h | --help)
vnfpm::job::show::usage
exit 0
;;
${UUID})
job_id="${1}"
shift
;;
esac
if [[ -z "${job_id}" ]]; then
vnfpm::job::show::usage
exit 1
fi
exec_curl GET /vnfpm/v2/pm_jobs/${job_id} -H "version: 2.1.0"
}
function vnfpm::job::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpm::job::delete::usage
exit 0
;;
${UUID})
job_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${job_ids}" ]]; then
vnfpm::job::delete::usage
exit 1
fi
for job_id in "${job_ids[@]}"; do
exec_curl DELETE /vnfpm/v2/pm_jobs/${job_id} -H "version: 2.1.0"
done
}
function vnfpm::report_show() {
case $1 in
-h | --help)
vnfpm::report_show::usage
exit 0
;;
${UUID})
job_id="${1}"
shift
;;
esac
case $1 in
-h | --help)
vnfpm::report_show::usage
exit 0
;;
${UUID})
report_id="${1}"
shift
;;
esac
if [[ -z "${job_id}" || -z "${report_id}" ]]; then
vnfpm::report_show::usage
exit 1
fi
exec_curl GET /vnfpm/v2/pm_jobs/${job_id}/reports/${report_id} -H "version: 2.1.0"
}
function vnfpm::threshold() {
case $1 in
-h | --help)
vnfpm::threshold::usage
exit 0
;;
create)
shift
vnfpm::threshold::create "${@}"
exit 0
;;
update)
shift
vnfpm::threshold::update "${@}"
exit 0
;;
list)
shift
vnfpm::threshold::list "${@}"
exit 0
;;
show)
shift
vnfpm::threshold::show "${@}"
exit 0
;;
delete)
shift
vnfpm::threshold::delete "${@}"
exit 0
;;
*)
vnfpm::threshold::usage
exit 1
;;
esac
}
function vnfpm::threshold::create() {
case $1 in
-h | --help)
vnfpm::threshold::create::usage
exit 0
;;
--param-file)
param="${2}"
shift
shift
;;
esac
if [[ -z "${param}" ]]; then
vnfpm::threshold::create::usage
exit 1
fi
exec_curl POST /vnfpm/v2/thresholds -H "version: 2.1.0" -d@${param}
}
function vnfpm::threshold::update() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpm::threshold::update::usage
exit 0
;;
${UUID})
thr_id="${1}"
shift
;;
--param-file)
param="${2}"
shift
shift
;;
esac
done
if [[ -z "${param}" || -z ${thr_id} ]]; then
vnfpm::threshold::update::usage
exit 1
fi
exec_curl PATCH /vnfpm/v2/thresholds/${thr_id} -H "version: 2.1.0" -d@${param}
}
function vnfpm::threshold::list() {
case $1 in
-h | --help)
vnfpm::threshold::list::usage
exit 0
;;
esac
exec_curl GET /vnfpm/v2/thresholds -H "version: 2.1.0"
}
function vnfpm::threshold::show() {
case $1 in
-h | --help)
vnfpm::threshold::show::usage
exit 0
;;
${UUID})
thr_id="${1}"
shift
;;
esac
if [[ -z "${thr_id}" ]]; then
vnfpm::threshold::show::usage
exit 1
fi
exec_curl GET /vnfpm/v2/thresholds/${thr_id} -H "version: 2.1.0"
}
function vnfpm::threshold::delete() {
while [[ $# -gt 0 ]]; do
case $1 in
-h | --help)
vnfpm::threshold::delete::usage
exit 0
;;
${UUID})
thr_ids+=("${1}")
shift
;;
*)
break
;;
esac
done
if [[ -z "${thr_ids}" ]]; then
vnfpm::threshold::delete::usage
exit 1
fi
for thr_id in "${thr_ids[@]}"; do
exec_curl DELETE /vnfpm/v2/thresholds/${thr_id} -H "version: 2.1.0"
done
}
function authenticate::create_client_assertion() {
# Usage: authenticate::create_client_assertion [secret|key]
key_type="${1}"
# Set create (iat) and expire (exp) times
create_time=$(date +%s)
expire_time=$((create_time + 300)) # Current time + 5 minutes (300 seconds)
# Generate UUID for jti claim
jti=$(generate_uuid)
# Create JWT header
if [ "${key_type}" = "secret" ]; then
header='{"alg":"HS256","typ":"JWT"}'
else
header='{"alg":"RS256","typ":"JWT"}'
fi
header_b64=$(base64url_encode "${header}")
# Create JWT payload
payload='{
"iss": "'${TACKER_CLIENT_ID}'",
"sub": "'${TACKER_CLIENT_ID}'",
"aud": "'${TACKER_AUTH_URL}'",
"iat": "'${create_time}'",
"exp": "'${expire_time}'",
"jti": "'${jti}'"
}'
payload_b64=$(base64url_encode "${payload}")
# Combine header and payload
unsigned_token="${header_b64}.${payload_b64}"
# Sign the token
if [ "${key_type}" = "secret" ]; then
# Sign with secret key (HS256)
hexsecret=$(echo -n "${TACKER_CLIENT_SECRET}" |
xxd -p |
paste -sd "")
signature=$(echo -n "${unsigned_token}" |
openssl dgst -sha256 -mac HMAC -macopt hexkey:"${hexsecret}" -binary |
base64 |
tr '/+' '_-' |
tr -d '=')
else
# Sign with private key (RS256)
signature=$(echo -n "${unsigned_token}" |
openssl dgst -sha256 -sign "${TACKER_JWT_KEY}" |
base64 |
tr '/+' '_-' |
tr -d '=')
fi
# Create the complete JWT
jwt="${unsigned_token}.${signature}"
echo "${jwt}"
}
function authenticate::client_secret_basic() {
TACKER_ACCESS_TOKEN=$(curl -s -X POST "${TACKER_AUTH_URL}" -u "${TACKER_CLIENT_ID}:${TACKER_CLIENT_SECRET}" -d "grant_type=client_credentials" -d "scope=${TACKER_OAUTH2_SCOPE}" "${@}" | jq -r ".access_token")
export TACKER_ACCESS_TOKEN
}
function authenticate::client_secret_post() {
TACKER_ACCESS_TOKEN=$(curl -s -X POST "${TACKER_AUTH_URL}" -d "client_id=${TACKER_CLIENT_ID}" -d "client_secret=${TACKER_CLIENT_SECRET}" -d "grant_type=client_credentials" -d "scope=${TACKER_OAUTH2_SCOPE}" "${@}" | jq -r ".access_token")
export TACKER_ACCESS_TOKEN
}
function authenticate::private_key_jwt() {
assertion=$(authenticate::create_client_assertion "key")
TACKER_ACCESS_TOKEN=$(curl -s -X POST "${TACKER_AUTH_URL}" -d "client_id=${TACKER_CLIENT_ID}" -d "grant_type=client_credentials" -d "scope=${TACKER_OAUTH2_SCOPE}" -d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" -d "client_assertion=${assertion}" "${@}" | jq -r ".access_token")
export TACKER_ACCESS_TOKEN
}
function authenticate::client_secret_jwt() {
assertion=$(authenticate::create_client_assertion "secret")
TACKER_ACCESS_TOKEN=$(curl -s -X POST "${TACKER_AUTH_URL}" -d "client_id=${TACKER_CLIENT_ID}" -d "grant_type=client_credentials" -d "scope=${TACKER_OAUTH2_SCOPE}" -d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" -d "client_assertion=${assertion}" "${@}" | jq -r ".access_token")
export TACKER_ACCESS_TOKEN
}
function authenticate::tls_client_auth() {
TACKER_ACCESS_TOKEN=$(curl -s -X POST "${TACKER_AUTH_URL}" -d "client_id=${TACKER_CLIENT_ID}" -d "grant_type=client_credentials" -d "scope=${TACKER_OAUTH2_SCOPE}" "${@}" | jq -r ".access_token")
export TACKER_ACCESS_TOKEN
}
function authenticate() {
case ${TACKER_AUTH_TYPE} in
client_secret_basic)
authenticate::client_secret_basic "${@}"
return
;;
client_secret_post)
authenticate::client_secret_post "${@}"
return
;;
private_key_jwt)
authenticate::private_key_jwt "${@}"
return
;;
client_secret_jwt)
authenticate::client_secret_jwt "${@}"
return
;;
tls_client_auth)
authenticate::tls_client_auth "${@}"
return
;;
*)
echo "Unknown auth type: ${TACKER_AUTH_TYPE}"
exit 1
;;
esac
}
function exec_curl::setup_mtls() {
if [[ "${TACKER_CACERT:+defined}" ]]; then
set -- "${@}" --cacert "${TACKER_CACERT}"
fi
if [[ "${TACKER_CLIENT_KEY:+defined}" && "${TACKER_CLIENT_CERT:+defined}" ]]; then
set -- "${@}" --key "${TACKER_CLIENT_KEY}" --cert "${TACKER_CLIENT_CERT}"
fi
echo "${@}"
}
function generate_uuid() {
if command -v uuidgen >/dev/null; then
uuidgen
else
cat /proc/sys/kernel/random/uuid
fi
}
function base64url_encode() {
echo -n "$1" | base64 -w 0 | tr '/+' '_-' | tr -d '='
}
function exec_curl() {
# Usage: exec_curl [<http_method>] <path> [<curl_arg> ...]
# set HTTP method if specified
if [[ ${1} == ${HTTP_METHOD} ]]; then
method="${1}"
shift
fi
# set path in URL
if [[ ${1} == /* ]]; then
path="${1}"
shift
else
echo "invalid path: ${1}"
exit 1
fi
# set opts to use certs if tls_client_auth is selected
mtls_args=$(exec_curl::setup_mtls)
# get OAuth2.0 token to call Tacker API
authenticate ${mtls_args}
set -- "${@}" -H "Authorization: Bearer ${TACKER_ACCESS_TOKEN}"
# set default content-type if not set
if ! echo "${@}" | grep -q "Content-Type:"; then
set -- "${@}" -H "Content-Type: application/json"
fi
curl -X ${method:-GET} ${TACKER_URL}/${path} "${@}" ${mtls_args:+$mtls_args}
}
function main() {
case $1 in
-h | --help)
usage | less -F
exit 0
;;
-v | --version)
echo "${VERSION}"
exit 0
;;
vim)
shift
vim "${@}"
exit 0
;;
vnfpkgm)
shift
vnfpkgm "${@}"
exit 0
;;
vnflcm)
shift
vnflcm "${@}"
exit 0
;;
vnffm)
shift
vnffm "${@}"
exit 0
;;
vnfpm)
shift
vnfpm "${@}"
exit 0
;;
*)
usage | less -F
exit 1
;;
esac
}
main "${@}"