From dbb2eff187adcfaeb880dd1095171902fcbbcd5e Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 28 Mar 2019 17:38:09 +0530 Subject: [PATCH 01/11] initial changes --- recipes/perl/storageAPI/README.md | 17 + .../configure_storage_unit_end_to_end.pl | 103 ++++ recipes/perl/storageAPI/storage.pm | 244 +++++++++ recipes/powershell/README.md | 3 +- .../configure_storage_unit_end_to_end.ps1 | 347 +++++++++++++ recipes/python/stoargeAPI/README.md | 18 + .../configure_storage_unit_end_to_end.py | 88 ++++ recipes/python/stoargeAPI/storage.py | 284 +++++++++++ snippets/perl/README.md | 62 +++ snippets/perl/storage.pm | 468 ++++++++++++++++++ snippets/perl/storageAPI/delete_disk_pool.pl | 37 ++ .../perl/storageAPI/delete_storage_server.pl | 37 ++ .../perl/storageAPI/delete_storage_unit.pl | 37 ++ snippets/perl/storageAPI/get_disk_pool.pl | 35 ++ .../perl/storageAPI/get_disk_pool_by_id.pl | 37 ++ .../perl/storageAPI/get_storage_server.pl | 35 ++ .../storageAPI/get_storage_server_by_id.pl | 37 ++ snippets/perl/storageAPI/get_storage_unit.pl | 35 ++ .../perl/storageAPI/get_storage_unit_by_id.pl | 37 ++ snippets/perl/storageAPI/patch_disk_pool.pl | 39 ++ .../perl/storageAPI/patch_storage_server.pl | 39 ++ .../perl/storageAPI/patch_storage_unit.pl | 39 ++ snippets/perl/storageAPI/post_disk_pool.pl | 37 ++ .../perl/storageAPI/post_storage_server.pl | 37 ++ snippets/perl/storageAPI/post_storage_unit.pl | 37 ++ .../storageAPI/Delete-NB-delete-disk-pool.ps1 | 120 +++++ .../Delete-NB-delete-storage-server.ps1 | 120 +++++ .../Delete-NB-delete-storage-unit.ps1 | 120 +++++ .../storageAPI/Get-NB-get-disk-pool-by-id.ps1 | 120 +++++ .../storageAPI/Get-NB-get-disk-pool.ps1 | 119 +++++ .../Get-NB-get-storage-server-by-id.ps1 | 120 +++++ .../storageAPI/Get-NB-get-storage-server.ps1 | 119 +++++ .../Get-NB-get-storage-unit-by-id.ps1 | 120 +++++ .../storageAPI/Get-NB-get-storage-unit.ps1 | 119 +++++ .../Patch-NB-update-ad-storage-server.ps1 | 136 +++++ .../Patch-NB-update-cloud-storage-server.ps1 | 144 ++++++ .../storageAPI/Patch-NB-update-disk-pool.ps1 | 136 +++++ .../Patch-NB-update-msdp-storage-server.ps1 | 135 +++++ .../Patch-NB-update-storage-unit.ps1 | 134 +++++ .../Post-NB-create-ad-disk-pool.ps1 | 151 ++++++ .../Post-NB-create-ad-storage-server.ps1 | 139 ++++++ .../Post-NB-create-ad-storage-unit.ps1 | 142 ++++++ .../Post-NB-create-cloud-disk-pool.ps1 | 150 ++++++ .../Post-NB-create-cloud-storage-server.ps1 | 152 ++++++ .../Post-NB-create-cloud-storage-unit.ps1 | 142 ++++++ .../Post-NB-create-msdp-disk-pool.ps1 | 149 ++++++ .../Post-NB-create-msdp-storage-server.ps1 | 143 ++++++ .../Post-NB-create-msdp-storage-unit.ps1 | 143 ++++++ snippets/powershell/storageAPI/README.md | 39 ++ snippets/python/storageAPI/README.md | 32 ++ .../python/storageAPI/create_disk_pool.py | 70 +++ .../storageAPI/create_storage_server.py | 74 +++ .../python/storageAPI/create_storage_unit.py | 70 +++ .../python/storageAPI/delete_disk_pool.py | 68 +++ .../storageAPI/delete_storage_server.py | 71 +++ .../python/storageAPI/delete_storage_unit.py | 72 +++ snippets/python/storageAPI/get_disk_pool.py | 65 +++ .../python/storageAPI/get_disk_pool_by_id.py | 70 +++ .../python/storageAPI/get_storage_server.py | 65 +++ .../storageAPI/get_storage_server_by_id.py | 74 +++ .../python/storageAPI/get_storage_unit.py | 63 +++ .../storageAPI/get_storage_unit_by_id.py | 74 +++ snippets/python/storageAPI/patch_disk_pool.py | 76 +++ .../python/storageAPI/patch_storage_server.py | 76 +++ .../python/storageAPI/patch_storage_unit.py | 76 +++ snippets/python/storageAPI/storage.py | 284 +++++++++++ 66 files changed, 6680 insertions(+), 1 deletion(-) create mode 100644 recipes/perl/storageAPI/README.md create mode 100644 recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl create mode 100644 recipes/perl/storageAPI/storage.pm create mode 100644 recipes/powershell/configure_storage_unit_end_to_end.ps1 create mode 100644 recipes/python/stoargeAPI/README.md create mode 100644 recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py create mode 100644 recipes/python/stoargeAPI/storage.py create mode 100644 snippets/perl/storage.pm create mode 100644 snippets/perl/storageAPI/delete_disk_pool.pl create mode 100644 snippets/perl/storageAPI/delete_storage_server.pl create mode 100644 snippets/perl/storageAPI/delete_storage_unit.pl create mode 100644 snippets/perl/storageAPI/get_disk_pool.pl create mode 100644 snippets/perl/storageAPI/get_disk_pool_by_id.pl create mode 100644 snippets/perl/storageAPI/get_storage_server.pl create mode 100644 snippets/perl/storageAPI/get_storage_server_by_id.pl create mode 100644 snippets/perl/storageAPI/get_storage_unit.pl create mode 100644 snippets/perl/storageAPI/get_storage_unit_by_id.pl create mode 100644 snippets/perl/storageAPI/patch_disk_pool.pl create mode 100644 snippets/perl/storageAPI/patch_storage_server.pl create mode 100644 snippets/perl/storageAPI/patch_storage_unit.pl create mode 100644 snippets/perl/storageAPI/post_disk_pool.pl create mode 100644 snippets/perl/storageAPI/post_storage_server.pl create mode 100644 snippets/perl/storageAPI/post_storage_unit.pl create mode 100644 snippets/powershell/storageAPI/Delete-NB-delete-disk-pool.ps1 create mode 100644 snippets/powershell/storageAPI/Delete-NB-delete-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Delete-NB-delete-storage-unit.ps1 create mode 100644 snippets/powershell/storageAPI/Get-NB-get-disk-pool-by-id.ps1 create mode 100644 snippets/powershell/storageAPI/Get-NB-get-disk-pool.ps1 create mode 100644 snippets/powershell/storageAPI/Get-NB-get-storage-server-by-id.ps1 create mode 100644 snippets/powershell/storageAPI/Get-NB-get-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Get-NB-get-storage-unit-by-id.ps1 create mode 100644 snippets/powershell/storageAPI/Get-NB-get-storage-unit.ps1 create mode 100644 snippets/powershell/storageAPI/Patch-NB-update-ad-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Patch-NB-update-cloud-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Patch-NB-update-disk-pool.ps1 create mode 100644 snippets/powershell/storageAPI/Patch-NB-update-msdp-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Patch-NB-update-storage-unit.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-ad-disk-pool.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-ad-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-ad-storage-unit.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-cloud-disk-pool.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-cloud-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-cloud-storage-unit.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-msdp-disk-pool.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-msdp-storage-server.ps1 create mode 100644 snippets/powershell/storageAPI/Post-NB-create-msdp-storage-unit.ps1 create mode 100644 snippets/powershell/storageAPI/README.md create mode 100644 snippets/python/storageAPI/README.md create mode 100644 snippets/python/storageAPI/create_disk_pool.py create mode 100644 snippets/python/storageAPI/create_storage_server.py create mode 100644 snippets/python/storageAPI/create_storage_unit.py create mode 100644 snippets/python/storageAPI/delete_disk_pool.py create mode 100644 snippets/python/storageAPI/delete_storage_server.py create mode 100644 snippets/python/storageAPI/delete_storage_unit.py create mode 100644 snippets/python/storageAPI/get_disk_pool.py create mode 100644 snippets/python/storageAPI/get_disk_pool_by_id.py create mode 100644 snippets/python/storageAPI/get_storage_server.py create mode 100644 snippets/python/storageAPI/get_storage_server_by_id.py create mode 100644 snippets/python/storageAPI/get_storage_unit.py create mode 100644 snippets/python/storageAPI/get_storage_unit_by_id.py create mode 100644 snippets/python/storageAPI/patch_disk_pool.py create mode 100644 snippets/python/storageAPI/patch_storage_server.py create mode 100644 snippets/python/storageAPI/patch_storage_unit.py create mode 100644 snippets/python/storageAPI/storage.py diff --git a/recipes/perl/storageAPI/README.md b/recipes/perl/storageAPI/README.md new file mode 100644 index 0000000..9dadd15 --- /dev/null +++ b/recipes/perl/storageAPI/README.md @@ -0,0 +1,17 @@ +### NetBackup API Code Samples for perl + +This directory contains code samples to invoke NetBackup REST APIs using perl. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Pre-requisites: + +- NetBackup 8.2 or higher +- Perl 5.20.2 or higher + +#### Executing the recipes in perl + +Use the following commands to run the perl samples. +- `perl configure_storage_unit_cloud_end_to_end.pl -nbmaster -username -password -sts_payload -dp_payload -stu_payload [-domainName ] [-domainType ]` diff --git a/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl b/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl new file mode 100644 index 0000000..d695e9c --- /dev/null +++ b/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl @@ -0,0 +1,103 @@ +#!/usr/bin/env perl + +use LWP::UserAgent; +use LWP::Protocol::https; +print "LWP::UserAgent: ".LWP::UserAgent->VERSION,"\n"; +print "LWP::Protocol::https: ".LWP::Protocol::https->VERSION,"\n"; +use JSON; +use Getopt::Long qw(GetOptions); +use storage; + +# +# The token is the key to the NetBackup AuthN/AuthZ scheme. You must login and get a token +# and use this token in your Authorization header for all subsequent requests. Token validity +# is fixed at 24 hours +# +my $token; + +my $protocol = "https"; +my $port = "1556"; +my $nbmaster; +my $username; +my $password; +my $sts_payload; +my $dp_payload; +my $stu_payload; +my $domainName; +my $domainType; +my $base_url; + + +# subroutines for printing usage and library information required to run the script. +sub print_usage { + print("\n\nUsage:"); + print("\nperl configure_storage_unit_cloud_end_to_end.pl -nbmaster -username -password -sts_payload -dp_payload -stu_payload [-domainName ] [-domainType ]\n\n\n"); +} + +sub print_disclaimer { + print("--------------------------------------------------------\n"); + print("-- This script requires Perl 5.20.2 or later --\n"); + print("--------------------------------------------------------\n"); + print("Executing this library requires some additional libraries like \n\t'LWP' \n\t'JSON'\ \n\t'Getopt'\ \n\n"); + print("You can specify the 'nbmaster', 'username', 'password', 'sts_payload', 'dp_payload', 'stu_payload', 'domainName' and 'domainType' as command-line parameters\n"); + print_usage(); +} + +# subroutine to process user input +sub user_input { + GetOptions( + 'nbmaster=s' => \$nbmaster, + 'username=s' => \$username, + 'password=s' => \$password, + 'sts_payload=s' => \$sts_payload, + 'dp_payload=s' => \$dp_payload, + 'stu_payload=s' => \$stu_payload, + 'domainName=s' => \$domainName, + 'domainType=s' => \$domainType, + ) or die print_usage(); + + if ($nbmaster eq "") { + print("Please provide the value for 'nbmaster'"); + exit; + } + + if ($username eq "") { + print("Please provide the value for 'username'"); + exit; + } + + if ($password eq "") { + print("Please provide the value for 'password'"); + exit; + } + if ($sts_payload eq "") { + print("Please provide the value for 'sts_payload'"); + exit; + } + + if ($dp_payload eq "") { + print("Please provide the value for 'dp_payload'"); + exit; + } + + if ($stu_payload eq "") { + print("Please provide the value for 'stu_payload'"); + exit; + } + + $base_url = "$protocol://$nbmaster:$port/netbackup"; +} + +sub storage_api_automation { + my $token = storage::perform_login($nbmaster, $username, $password, $domain_name, $domain_type); + storage::post_storage_server($nbmaster, $token, $sts_payload); + storage::post_disk_pool($nbmaster, $token, $dp_payload); + storage::post_storage_unit($nbmaster, $token, $stu_payload); + +} + +print_disclaimer(); + +user_input(); + +storage_api_automation(); \ No newline at end of file diff --git a/recipes/perl/storageAPI/storage.pm b/recipes/perl/storageAPI/storage.pm new file mode 100644 index 0000000..caec679 --- /dev/null +++ b/recipes/perl/storageAPI/storage.pm @@ -0,0 +1,244 @@ +#!/usr/bin/env perl + +package storage; + +use JSON; +use warnings; +use LWP::UserAgent; +use HTTP::Request; +use LWP::Protocol::https; + +$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; +$CONTENT_TYPE = "application/vnd.netbackup+json;version=3.0"; +$PROTOCOL = "https://"; +$NB_PORT = 1556; + +my $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0, verify_peer => 0}); + + +sub send_http_request { + my $url = $_[0]; + my $request_type = $_[1]; + my $token = $_[2]; + my $body = $_[3]; + my $accept = $_[4]; + my $content_type = $_[5]; + + if (not defined $url or not defined $request_type){ + print "Error: url and request type are required fields"; + return undef; + } + + print "Unencoded URL is $url\n"; + # assume string is un-encoded, and '%' is a literal that needs to be replaced by '%25'. + # All other types of encoding are handled gracefully by the LWP module except literal percent + $url =~ s/%/%25/; + + # determine correct request type + my $req; + if (uc($request_type) eq "GET" ){ + $req = HTTP::Request->new(GET => $url); + } + elsif ((uc($request_type) eq "POST")){ + $req = HTTP::Request->new(POST => $url); + } + elsif ((uc($request_type) eq "DELETE")){ + $req = HTTP::Request->new(DELETE => $url); + } + elsif ((uc($request_type) eq "PUT")) { + $req = HTTP::Request->new(PUT => $url); + } + elsif ((uc($request_type) eq "PATCH")){ + $req = HTTP::Request->new(PATCH => $url); + } + else { + print "Unrecognized request type [$request_type]. If this is a valid HTTP request type, please update me"; + return undef; + } + + # print encoded url to the screen + print "Encoded URL is ${$req->uri}\n"; + + if (defined $token) { + $req->header('Authorization' => $token); + } + if (defined $accept) { + $req->header('Accept' => $accept); + } + if (defined $content_type){ + $req->header('Content-Type' => $content_type); + } + if (defined $body){ + $req->content($body); + } + + my $resp = $ua->request($req); + if ($resp->is_success) { + my $json_results; + if (defined($resp->content) && $resp->content ne "") { + $json_results = decode_json($resp->content); + } + else { + $json_results = ""; + } + return $json_results; + } + else { + print "HTTP error code: ", $resp->code, "\n"; + print "HTTP response content: ", $resp->content, "\n"; + return undef; + } +} + +sub perform_login { + my @argument_list = @_; + my $master_server = $argument_list[0]; + my $username = $argument_list[1]; + my $password = $argument_list[2]; + + my $token; + + # domainName and domainType are optional + my $domainName = ""; + my $domainType = ""; + if (@argument_list >= 4) { + $domainName = $argument_list[3]; + } + if (@argument_list == 5) { + $domainType = $argument_list[4]; + } + + # Construct url + my $url = "https://$master_server:1556/netbackup/login"; + + # Construct request body + my $post_data; + if (not $domainName and not $domainType) { + $post_data = qq({ "userName": "$username", "password": "$password" }); + } + else { + $post_data = qq({ "domainType": "$domainType", "domainName": "$domainName", "userName": "$username", "password": "$password" }); + } + + print "\n\n**************************************************************"; + print "\n\n Making POST Request to login to get token \n\n"; + + my $json_results = send_http_request($url, "post", undef, $post_data, undef, "application/json"); + + if (defined $json_results){ + $token = $json_results->{"token"}; + } + return $token; +} + +# Create a storage server +sub post_storage_server { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to post_storage_server()\n"; + print "Usage : post_storage_server( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-servers"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = send_http_request($url, "POST", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed POST Storage Server Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: POST Storage Server Request Failed!\n"; + } +} + + +# Create a storage unit +sub post_storage_unit { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to post_storage_unit()\n"; + print "Usage : post_storage_server( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-units"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = send_http_request($url, "POST", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed POST Storage Unit Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: POST Storage Unit Request Failed!\n"; + } +} + +# Create a Disk Pool +sub post_disk_pool { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to post_disk_pool()\n"; + print "Usage : post_storage_server( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/disk-pools"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = send_http_request($url, "POST", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed POST Disk Pool Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: POST Disk Pool Request Failed!\n"; + } +} + +1; + diff --git a/recipes/powershell/README.md b/recipes/powershell/README.md index 4de13f2..b6c8e00 100644 --- a/recipes/powershell/README.md +++ b/recipes/powershell/README.md @@ -9,9 +9,10 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Executing the recipes in PowerShell Pre-requisites: -- NetBackup 8.1.2 or higher +- NetBackup 8.2 or higher - PowerShell 4.0 or higher Use the following commands to run the PowerShell samples. - `.\create_policy_in_one_step.ps1 -nbmaster -username -password [-domainName ] [-domainType ]` - `.\rbac_filtering_in_policy.ps1 -nbmaster -username -password [-domainName ] [-domainType ]` +- `.\configure_storage_unit_end_to_end.ps1 -nbmaster -username -password [-domainName -domainType ]` diff --git a/recipes/powershell/configure_storage_unit_end_to_end.ps1 b/recipes/powershell/configure_storage_unit_end_to_end.ps1 new file mode 100644 index 0000000..d38b2f5 --- /dev/null +++ b/recipes/powershell/configure_storage_unit_end_to_end.ps1 @@ -0,0 +1,347 @@ +<# +.SYNOPSIS +This sample script demonstrates the use of NetBackup Storage management REST APIs. +.DESCRIPTION +This script can be run using NetBackup 8.2 and higher. +It demonstrate how to create a storage server, disk pool and storage unit by specifying json payload string in each specified function. +.EXAMPLE +./configure_storage_unit_end_to_end.ps1 -nbmaster -username -password [-domainName -domainType ] +#> + +#Requires -Version 4.0 + +Param ( + [string]$nbmaster = $(Throw "Please specify the name of the NetBackup Master Server using the -nbmaster parameter."), + [string]$username = $(Throw "Please specify the user name using the -username parameter."), + [string]$password = $(Throw "Please specify the password using the -password parameter."), + [string]$domainName, + [string]$domainType +) + +#################### +# Global Variables +#################### + +$port = 1556 +$baseUri = "https://" + $nbmaster + ":" + $port + "/netbackup/" +$contentType = "application/vnd.netbackup+json;version=3.0" + +############################################################### +# Setup to allow self-signed certificates and enable TLS v1.2 +############################################################### +Function Setup() +{ + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + } + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host "`n"$_.Exception.InnerException.Message + } +} + +###################################### +# Login to the NetBackup webservices +###################################### + +Function Login() +{ + $uri = $baseUri + "login" + + $body = @{ + userName=$username + password=$password + } + if ($domainName -ne "") { + $body.add("domainName", $domainName) + } + if ($domainType -ne "") { + $body.add("domainType", $domainType) + } + Write-Host "`nSending a POST request to login to the NetBackup webservices..." + + $response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $contentType + + if ($response.StatusCode -ne 201) + { + throw "Unable to connect to the NetBackup Master Server" + } + + Write-Host "Login successful.`n" + $response = (ConvertFrom-Json -InputObject $response) + return $response +} + + +################################################# +# Create a cloud storage server +################################################# +Function CreateStorageServer() +{ + $sts_uri = $baseUri + "/storage/storage-servers" + + $sts_cloud_json = '{ + "data": { + "type": "storageServer", + "attributes": { + "name": "amazonstss.com", + "storageCategory": "CLOUD", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "cloudAttributes": { + "providerId": "amazon", + "compressionEnabled": true, + "s3RegionDetails": [ + { + "serviceHost": "SERVICE-HOST", + "regionName": "REGION_NAME", + "regionId": "REGION_ID" + } + ], + "cloudCredentials": { + "authType": "ACCESS_KEY", + "accessKeyDetails": { + "userName": "USER_ID", + "password": "PASSWORD" + } + } + } + } + } + } + + + ' + + $response_create_sts = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($sts_cloud_json) ` + -ContentType $contentType ` + -Headers $headers + + if ($response_create_sts.StatusCode -ne 201) + { + throw "Unable to create storage server." + } + + Write-Host "storage server created successfully.`n" + echo $response_create_sts + Write-Host $response_create_sts + + $response_create_sts = (ConvertFrom-Json -InputObject $response_create_sts) +} + +################################################# +# Create a disk pool for cloud storage server +################################################# +Function CreateDiskPool() +{ + + $dp_uri = $baseUri + "/storage/disk-pools" + + $dp_cloud_json = '{ + "data": { + "type": "diskPool", + "attributes": { + "name": "disk-pool1", + "diskVolumes": [ + { + "name": "VOLUME_NAME" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 4 + } + }, + "relationships": { + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } + } + + + ' + + $response_create_dp = Invoke-WebRequest ` + -Uri $dp_uri ` + -Method POST ` + -Body ($dp_cloud_json) ` + -ContentType $contentType ` + -Headers $headers + + if ($response_create_dp.StatusCode -ne 201) + { + throw "Unable to create Disk Pool." + } + + Write-Host "Disk Pool created successfully.`n" + echo $response_create_dp + Write-Host $response_create_dp + + $response_create_dp = (ConvertFrom-Json -InputObject $response_create_dp) +} + +#################################################################################### +# Create a storage unit for cloud torage server +#################################################################################### +Function CreateStorageUnit() +{ + $stu_uri = $baseUri + "/storage/storage-units" + + $stu_cloud_json = '{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "cloud-stu", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 50000, + "maxConcurrentJobs": 10, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data" : { + "type": "diskPool", + "id": "STORAGE_SERVER_ID" + } + } + } + } + } + ' + + $response_create_stu = Invoke-WebRequest ` + -Uri $stu_uri ` + -Method POST ` + -Body ($stu_cloud_json) ` + -ContentType $contentType ` + -Headers $headers + + if ($response_create_stu.StatusCode -ne 201) + { + throw "Unable to create storage unit." + } + + Write-Host "storage unit created successfully.`n" + echo $response_create_stu + Write-Host $response_create_stu + + $response_create_stu = (ConvertFrom-Json -InputObject $response_create_stu) +} + +######################################################################## +# List all Storage Servers +######################################################################## +Function ListAllStorageServer() +{ + $sts_uri = $baseUri + "/storage/storage-servers" + + + $response_getAll_sts = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + + if ($response_getAll_sts.StatusCode -ne 200) + { + throw "Unable to fetch storage servers." + } + + Write-Host "storage servers fetched successfully.`n" + Write-Host $response_getAll_sts + + $response_getAll_sts = (ConvertFrom-Json -InputObject $response_getAll_sts) +} + +########################################################################### +# List all Disk Pools +########################################################################### +Function ListAllDiskPools() +{ + $dp_uri = $baseUri + "/storage/disk-pools" + + + $response_getAll_dp = Invoke-WebRequest ` + -Uri $dp_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + + if ($response_getAll_dp.StatusCode -ne 200) + { + throw "Unable to fetch disk pools." + } + + Write-Host "disk pools fetched successfully.`n" + Write-Host $response_getAll_dp + + $response_getAll_dp = (ConvertFrom-Json -InputObject $response_getAll_dp) +} + +############################################################################## +# List all Storage Units +############################################################################## +Function ListAllStorageUnits() +{ + $stu_uri = $baseUri + "/storage/storage-units" + + $response_getAll_stu = Invoke-WebRequest ` + -Uri $stu_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + + if ($response_getAll_stu.StatusCode -ne 200) + { + throw "Unable to fetch storage units." + } + + Write-Host "storage units fetched successfully.`n" + Write-Host $response_getAll_stu + + $response_getAll_stu = (ConvertFrom-Json -InputObject $response_getAll_stu) +} + +Setup +$loginResponse = Login +$headers = @{"Authorization" = $loginResponse.token} +CreateStorageServer +ListAllStorageServer +CreateDiskPool +ListAllDiskPools +CreateStorageUnit +ListAllStorageUnits \ No newline at end of file diff --git a/recipes/python/stoargeAPI/README.md b/recipes/python/stoargeAPI/README.md new file mode 100644 index 0000000..a709199 --- /dev/null +++ b/recipes/python/stoargeAPI/README.md @@ -0,0 +1,18 @@ +### NetBackup API Code Samples for Python + +This directory contains code samples to invoke NetBackup REST APIs using Python. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Executing the recipes in Python + +Pre-requisites: +- NetBackup 8.2 or higher +- python 3.5 or higher +- python modules: `requests` + + +Use the following commands to run the python samples. +- `python -W ignore configure_storage_unit_end_to_end.py -nbmaster -username -password -sts_payload -dp_payload -stu_payload [-domainname ] [-domaintype ]` diff --git a/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py b/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py new file mode 100644 index 0000000..afeee7e --- /dev/null +++ b/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py @@ -0,0 +1,88 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore configure_storage_unit_end_to_end.py -nbmaster -username -password -sts_payload -dp_payload -stu_payload [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global sts_payload + global dp_payload + global stu_payload + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-sts_payload": + sts_payload = sys.argv[i + 1] + elif sys.argv[i] == "-dp_payload": + dp_payload = sys.argv[i + 1] + elif sys.argv[i] == "-stu_payload": + stu_payload = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + elif sts_payload == "": + print("Please provide the value for 'sts_payload'") + exit() + elif dp_payload == "": + print("Please provide the value for 'dp_payload'") + exit() + elif stu_payload == "": + print("Please provide the value for 'stu_payload'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +response_sts = storage.create_storage_server(jwt, base_url, sts_payload) +print(response_sts) + +response_dp = storage.create_disk_pool(jwt, base_url, dp_payload) +print(response_dp) + +response_stu = storage.create_storage_unit(jwt, base_url, stu_payload) +print(response_stu) diff --git a/recipes/python/stoargeAPI/storage.py b/recipes/python/stoargeAPI/storage.py new file mode 100644 index 0000000..9e34c53 --- /dev/null +++ b/recipes/python/stoargeAPI/storage.py @@ -0,0 +1,284 @@ +import requests + +content_type = "application/vnd.netbackup+json; version=3.0" + + +def perform_login(username, password, base_url, domain_name, domain_type): + url = base_url + "/login" + + if domain_name != "" and domain_type != "": + req_body = {"userName": username, "password": password, "domainName": domain_name, "domainType": domain_type} + else: + req_body = {"userName": username, "password": password} + + headers = {'Content-Type': content_type} + + print("performing POST on {} for user '{}'\n".format(url, req_body['userName'])) + + resp = requests.post(url, headers=headers, json=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Login API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json()['token'] + +def get_storage_units(jwt, base_url): + url = base_url + "/storage/storage-units" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STU API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def get_storage_servers(jwt, base_url): + url = base_url + "/storage/storage-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STS API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def create_storage_server(jwt, base_url, file_name): + url = base_url + "/storage/storage-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url), req_body) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create STS API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def patch_storage_server(jwt, base_url, file_name, stsid): + url = base_url + "/storage/storage-servers/" + stsid + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + + if resp.status_code != 200: + raise Exception('Update STS API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe STS is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() + +def patch_storage_unit(jwt, base_url, file_name, stu_name): + url = base_url + "/storage/storage-units/" +stu_name + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + + if resp.status_code != 200: + raise Exception('Update STU API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe STU is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() + +def patch_disk_pool(jwt, base_url, file_name, dpid): + url = base_url + "/storage/disk-pools/" +dpid + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 200: + raise Exception('Update DP API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe DP is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() + + +def create_disk_pool(jwt, base_url, file_name): + url = base_url + "/storage/disk-pools" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url), req_body) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create DP API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def create_storage_unit(jwt, base_url, file_name): + url = base_url + "/storage/storage-units" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url), req_body) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create STU API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def get_disk_pools(jwt, base_url): + url = base_url + "/storage/disk-pools" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET DP API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_disk_pools_by_id(jwt, base_url, dpid): + url = base_url + "/storage/disk-pools/" +dpid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET DP with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_storage_server_by_id(jwt, base_url, stsid): + url = base_url + "/storage/storage-servers/" +stsid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STS with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_storage_unit_by_id(jwt, base_url, stu_name): + url = base_url + "/storage/storage-units/" +stu_name + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STU with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def delete_storage_server(jwt, base_url, stsid): + url = base_url + "/storage/storage-servers/" +stsid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + + if resp.status_code != 204: + raise Exception('DELETE STS with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + print("\nThe STS is deleted with status code: {}\n".format(resp.status_code)) + +def delete_storage_unit(jwt, base_url, stu_name): + url = base_url + "/storage/storage-units/" +stu_name + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + + if resp.status_code != 204: + raise Exception('DELETE STU with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe STU is deleted with status code: {}\n".format(resp.status_code)) + +def delete_disk_pools(jwt, base_url, dpid): + url = base_url + "/storage/disk-pools/" +dpid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + if resp.status_code != 204: + raise Exception('DELETE DP with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + print("\nThe DP is deleted with status code: {}\n".format(resp.status_code)) \ No newline at end of file diff --git a/snippets/perl/README.md b/snippets/perl/README.md index fa9549b..ad5921c 100644 --- a/snippets/perl/README.md +++ b/snippets/perl/README.md @@ -79,4 +79,66 @@ ISO 8601 formatted UTC timestamp. no a subscription associated with this asset. - Example: perl post_nb_asset_cleanup.pl -nbmaster -username -password -filter "workloadType eq 'VMware'" -cleanuptime 2018-06-29T15:58:45.678Z + +Create Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl storageAPI/post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] + +Update Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl storageAPI/patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ] + +Get Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl storageAPI/get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] + +Delete Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl storageAPI/delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ] + +Create Storage unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl storageAPI/post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] + +Update Storage unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl storageAPI/patch_storage_unit.pl -nbmaster -username -password -payload -stuname [-domainname ] [-domaintype ] + +Get Storage unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl storageAPI/get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ] + +Delete Storage Unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl storageAPI/delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ] + + +Create Disk Pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl storageAPI/post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ] + +Update Disk pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl storageAPI/patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ] + +Get Disk Pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl storageAPI/get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ] + +Delete Disk Pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl storageAPI/delete_storage_unit.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ] + diff --git a/snippets/perl/storage.pm b/snippets/perl/storage.pm new file mode 100644 index 0000000..44b7fd7 --- /dev/null +++ b/snippets/perl/storage.pm @@ -0,0 +1,468 @@ +#!/usr/bin/env perl + +package storage; + +use common; +use JSON; +use warnings; +use LWP::UserAgent; +use LWP::Protocol::https; + +$ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; +$CONTENT_TYPE = "application/vnd.netbackup+json;version=3.0"; +$PROTOCOL = "https://"; +$NB_PORT = 1556; + +# Create a storage server +sub post_storage_server { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to post_storage_server()\n"; + print "Usage : post_storage_server( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-servers"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = common::send_http_request($url, "POST", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed POST Storage Server Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: POST Storage Server Request Failed!\n"; + } +} + +# Update storage server +sub patch_storage_server { + my $arguments_count = scalar(@_); + if ($arguments_count != 4) { + print "ERROR :: Incorrect number of arguments passed to patch_storage_server()\n"; + print "Usage : patch_storage_server( , , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $stsid = $_[3]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-servers/$stsid"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = common::send_http_request($url, "PATCH", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed PATCH Storage Server Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: PATCH Storage Server Request Failed!\n"; + } +} + +# Create a storage unit +sub post_storage_unit { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to post_storage_unit()\n"; + print "Usage : post_storage_unit( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-units"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = common::send_http_request($url, "POST", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed POST Storage Unit Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: POST Storage Unit Request Failed!\n"; + } +} + +# Create a storage unit +sub post_disk_pool { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to post_disk_pool()\n"; + print "Usage : post_disk_pool( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/disk-pools"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = common::send_http_request($url, "POST", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed POST Disk Pool Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: POST Disk Pool Request Failed!\n"; + } +} + +# get storage unit +sub get_storage_unit { + my $arguments_count = scalar(@_); + if ($arguments_count != 2) { + print "ERROR :: Incorrect number of arguments passed to get_storage_unit()\n"; + print "Usage : get_storage_unit( , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-units"; + + my $json = common::send_http_request($url, "GET", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed GET Storage Unit Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: GET Storage Unit Request Failed!\n"; + } +} + +# Update disk pool +sub patch_disk_pool { + my $arguments_count = scalar(@_); + if ($arguments_count != 4) { + print "ERROR :: Incorrect number of arguments passed to patch_disk_pool()\n"; + print "Usage : patch_disk_pool( , , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $filename = $_[2]; + my $dpid = $_[3]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/disk-pools/$dpid"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = common::send_http_request($url, "PATCH", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed PATCH Disk Pool Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: PATCH Disk Pool Request Failed!\n"; + } +} + +# get Disk Pool +sub get_disk_pool { + my $arguments_count = scalar(@_); + if ($arguments_count != 2) { + print "ERROR :: Incorrect number of arguments passed to get_disk_pool()\n"; + print "Usage : get_disk_pool( , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/disk-pools"; + + my $json = common::send_http_request($url, "GET", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed GET DiskPool Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: GET DiskPool Request Failed!\n"; + } +} + +# update storage unit +sub patch_storage_unit { + my $arguments_count = scalar(@_); + if ($arguments_count != 4) { + print "ERROR :: Incorrect number of arguments passed to patch_storage_unit()\n"; + print "Usage : patch_storage_unit( , , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $stu_name = $_[3]; + my $token = $_[1]; + my $filename = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-units/$stu_name"; + open(my $fh, '<:encoding(UTF-8)', $filename) + or die "Could not open file '$filename' $!"; + + my $payload = ""; + while (my $row = <$fh>) { + chomp $row; + $payload .= $row; + } + print "payload: $payload\n"; + + my $json = common::send_http_request($url, "PATCH", $token, $payload, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed PATCH Storage unit Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: PATCH Storage unit Request Failed!\n"; + } +} + +# get storage server +sub get_storage_server { + my $arguments_count = scalar(@_); + if ($arguments_count != 2) { + print "ERROR :: Incorrect number of arguments passed to get_storage_server()\n"; + print "Usage : get_storage_server( , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-servers"; + + my $json = common::send_http_request($url, "GET", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed GET Storage Server Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: GET Storage Server Request Failed!\n"; + } +} + +# get storage server +sub delete_storage_server { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to delete_storage_server()\n"; + print "Usage : delete_storage_server( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $stsid = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-servers/$stsid"; + + my $json = common::send_http_request($url, "DELETE", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed DELETE Storage Server Request.\n"; + + } + else { + print "ERROR :: DELETE Storage Server Request Failed!\n"; + } +} + +# delete disk pool +sub delete_disk_pool { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to delete_disk_pool()\n"; + print "Usage : delete_disk_pool( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $dpid = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/disk-pools/$dpid"; + + my $json = common::send_http_request($url, "DELETE", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed DELETE Disk Pool Request.\n"; + } + else { + print "ERROR :: DELETE Disk pool Request Failed!\n"; + } +} + +# delete disk pool +sub delete_storage_unit { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to delete_storage_unit()\n"; + print "Usage : delete_storage_unit( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $stu_name = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-units/$stu_name"; + + my $json = common::send_http_request($url, "DELETE", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed DELETE Storage unit Request.\n"; + } + else { + print "ERROR :: DELETE Storage unit Request Failed!\n"; + } +} + +# get storage server +sub get_storage_server_by_id { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to get_storage_server_by_id()\n"; + print "Usage : get_storage_server_by_id( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $stsid = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-servers/$stsid"; + + my $json = common::send_http_request($url, "GET", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed GET Storage Server Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + + } + else { + print "ERROR :: GET Storage Server by ID Failed!\n"; + } +} + +# delete disk pool +sub get_disk_pool_by_id { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to get_disk_pool_by_id()\n"; + print "Usage : get_disk_pool_by_id( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $dpid = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/disk-pools/$dpid"; + + my $json = common::send_http_request($url, "GET", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed GET Disk Pool Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: GET Disk Pool by ID Request Failed!\n"; + } +} + +# delete disk pool +sub get_storage_unit_by_name { + my $arguments_count = scalar(@_); + if ($arguments_count != 3) { + print "ERROR :: Incorrect number of arguments passed to get_storage_unit_by_name()\n"; + print "Usage : get_storage_unit_by_name( , , ) \n"; + return; + } + + my $master_server = $_[0]; + my $token = $_[1]; + my $stu_name = $_[2]; + my $url = "$PROTOCOL$master_server:$NB_PORT/netbackup/storage/storage-units/$stu_name"; + + my $json = common::send_http_request($url, "GET", $token, undef, undef, $CONTENT_TYPE); + + if (defined $json) { + print "Successfully completed GET Storage Unit Request.\n"; + + my $pretty = JSON->new->pretty->encode($json); + return $pretty; + } + else { + print "ERROR :: GET Storage unit by Name Request Failed!\n"; + } +} +1; + diff --git a/snippets/perl/storageAPI/delete_disk_pool.pl b/snippets/perl/storageAPI/delete_disk_pool.pl new file mode 100644 index 0000000..740fe3e --- /dev/null +++ b/snippets/perl/storageAPI/delete_disk_pool.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/delete_disk_pool.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $dpid; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'dpid=s' => \$dpid, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::delete_disk_pool($master_server, $token, $dpid); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/delete_storage_server.pl b/snippets/perl/storageAPI/delete_storage_server.pl new file mode 100644 index 0000000..dabbd5c --- /dev/null +++ b/snippets/perl/storageAPI/delete_storage_server.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $stsid; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'stsid=s' => \$stsid, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::delete_storage_server($master_server, $token, $stsid); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/delete_storage_unit.pl b/snippets/perl/storageAPI/delete_storage_unit.pl new file mode 100644 index 0000000..cdf67d7 --- /dev/null +++ b/snippets/perl/storageAPI/delete_storage_unit.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $stu_name; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'stu_name=s' => \$stu_name, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::delete_storage_unit($master_server, $token, $stu_name); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/get_disk_pool.pl b/snippets/perl/storageAPI/get_disk_pool.pl new file mode 100644 index 0000000..03c8efc --- /dev/null +++ b/snippets/perl/storageAPI/get_disk_pool.pl @@ -0,0 +1,35 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::get_disk_pool($master_server, $token); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/get_disk_pool_by_id.pl b/snippets/perl/storageAPI/get_disk_pool_by_id.pl new file mode 100644 index 0000000..4734e28 --- /dev/null +++ b/snippets/perl/storageAPI/get_disk_pool_by_id.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/get_disk_pool_by_id.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $dpid; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'dpid=s' => \$dpid, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::get_disk_pool_by_id($master_server, $token, $dpid); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/get_storage_server.pl b/snippets/perl/storageAPI/get_storage_server.pl new file mode 100644 index 0000000..c623efa --- /dev/null +++ b/snippets/perl/storageAPI/get_storage_server.pl @@ -0,0 +1,35 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::get_storage_server($master_server, $token); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/get_storage_server_by_id.pl b/snippets/perl/storageAPI/get_storage_server_by_id.pl new file mode 100644 index 0000000..058dcd0 --- /dev/null +++ b/snippets/perl/storageAPI/get_storage_server_by_id.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/get_storage_server_by_id.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $stsid; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'stsid=s' => \$stsid, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::get_storage_server_by_id($master_server, $token, $stsid); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/get_storage_unit.pl b/snippets/perl/storageAPI/get_storage_unit.pl new file mode 100644 index 0000000..d119fe8 --- /dev/null +++ b/snippets/perl/storageAPI/get_storage_unit.pl @@ -0,0 +1,35 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::get_storage_unit($master_server, $token); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/get_storage_unit_by_id.pl b/snippets/perl/storageAPI/get_storage_unit_by_id.pl new file mode 100644 index 0000000..5e67ac1 --- /dev/null +++ b/snippets/perl/storageAPI/get_storage_unit_by_id.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/get_storage_unit_by_id.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $stu_name; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'stu_name=s' => \$stu_name, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::get_storage_unit_by_name($master_server, $token, $stu_name); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/patch_disk_pool.pl b/snippets/perl/storageAPI/patch_disk_pool.pl new file mode 100644 index 0000000..da9bebf --- /dev/null +++ b/snippets/perl/storageAPI/patch_disk_pool.pl @@ -0,0 +1,39 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $payload_file; +my $dpid; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'payload=s' => \$payload_file, +'dpid=s' => \$dpid, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::patch_disk_pool($master_server, $token, $payload_file, $dpid); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/patch_storage_server.pl b/snippets/perl/storageAPI/patch_storage_server.pl new file mode 100644 index 0000000..bc88dc5 --- /dev/null +++ b/snippets/perl/storageAPI/patch_storage_server.pl @@ -0,0 +1,39 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $payload_file; +my $stsid; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'payload=s' => \$payload_file, +'stsid=s' => \$stsid, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::patch_storage_server($master_server, $token, $payload_file, $stsid); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/patch_storage_unit.pl b/snippets/perl/storageAPI/patch_storage_unit.pl new file mode 100644 index 0000000..60c9371 --- /dev/null +++ b/snippets/perl/storageAPI/patch_storage_unit.pl @@ -0,0 +1,39 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/patch_storage_unit.pl -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $payload_file; +my $stu_name; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'payload=s' => \$payload_file, +'stu_name=s' => \$stu_name, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::patch_storage_unit($master_server, $token, $payload_file, $stu_name); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); \ No newline at end of file diff --git a/snippets/perl/storageAPI/post_disk_pool.pl b/snippets/perl/storageAPI/post_disk_pool.pl new file mode 100644 index 0000000..7d33368 --- /dev/null +++ b/snippets/perl/storageAPI/post_disk_pool.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $payload_file; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'payload=s' => \$payload_file, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::post_disk_pool($master_server, $token, $payload_file); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/post_storage_server.pl b/snippets/perl/storageAPI/post_storage_server.pl new file mode 100644 index 0000000..c82b5ab --- /dev/null +++ b/snippets/perl/storageAPI/post_storage_server.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $payload_file; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'payload=s' => \$payload_file, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::post_storage_server($master_server, $token, $payload_file); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/perl/storageAPI/post_storage_unit.pl b/snippets/perl/storageAPI/post_storage_unit.pl new file mode 100644 index 0000000..1a7b6c3 --- /dev/null +++ b/snippets/perl/storageAPI/post_storage_unit.pl @@ -0,0 +1,37 @@ +#Load module netbackup.pm from current directory +use lib"."; + +use gateway; +use storage; +use Getopt::Long qw(GetOptions); +sub printUsage { + print "\nUsage : perl storageAPI/post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; + die; +} + +my $master_server; +my $username; +my $password; +my $payload_file; +my $domainname; +my $domaintype; + +GetOptions( +'nbmaster=s' => \$master_server, +'username=s' => \$username, +'password=s' => \$password, +'payload=s' => \$payload_file, +'domainname=s' => \$domain_name, +'domaintype=s' => \$domain_type, +) or printUsage(); + +if (!$master_server || !$username || !$password) { + printUsage(); +} + +my $token = gateway::perform_login($master_server, $username, $password, $domain_name, $domain_type); + +my $jsonString = storage::post_storage_unit($master_server, $token, $payload_file); +print "$jsonString\n"; + +gateway::perform_logout($master_server, $token); diff --git a/snippets/powershell/storageAPI/Delete-NB-delete-disk-pool.ps1 b/snippets/powershell/storageAPI/Delete-NB-delete-disk-pool.ps1 new file mode 100644 index 0000000..0ab3792 --- /dev/null +++ b/snippets/powershell/storageAPI/Delete-NB-delete-disk-pool.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for deleting scpecified disk pool. + +.DESCRIPTION +This script will delete scpecified disk pool. + +.EXAMPLE +./Delete-NB-delete-disk-pool.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -dpid "disk pool id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$dpid = $(throw "Please specify the dpid using -dpid parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# Delete NetBackup Disk Pool +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/disk-pools/" + $dpid + + +$response_delete = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method DELETE ` + -ContentType $contentType ` + -Headers $headers + +if ($response_delete.StatusCode -ne 204 ) +{ + throw "Unable to delete disk pool." +} + +Write-Host "Disk pool deleted successfully.`n" +Write-Host $response_delete + +$response_delete = (ConvertFrom-Json -InputObject $response_delete) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Delete-NB-delete-storage-server.ps1 b/snippets/powershell/storageAPI/Delete-NB-delete-storage-server.ps1 new file mode 100644 index 0000000..0cb9bc0 --- /dev/null +++ b/snippets/powershell/storageAPI/Delete-NB-delete-storage-server.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for deleting scpecified storage server. + +.DESCRIPTION +This script will delete scpecified storage server. + +.EXAMPLE +./Delete-NB-delete-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stsid "storage server id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stsid = $(throw "Please specify the stsid using -stsid parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# Delete NetBackup Storage servers +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers/" + $stsid + + +$response_delete = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method DELETE ` + -ContentType $contentType ` + -Headers $headers + +if ($response_delete.StatusCode -ne 204) +{ + throw "Unable to delete storage server." +} + +Write-Host "storage server deleted successfully.`n" +Write-Host $response_delete + +$response_delete = (ConvertFrom-Json -InputObject $response_delete) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Delete-NB-delete-storage-unit.ps1 b/snippets/powershell/storageAPI/Delete-NB-delete-storage-unit.ps1 new file mode 100644 index 0000000..b83d671 --- /dev/null +++ b/snippets/powershell/storageAPI/Delete-NB-delete-storage-unit.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for deleting scpecified storage unit. + +.DESCRIPTION +This script will delete scpecified storage unit. + +.EXAMPLE +./Delete-NB-delete-storage-unit.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stu_name "storage unit name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stu_name = $(throw "Please specify the stu_name using -stu_name parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# Delete NetBackup storage units +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$stu_uri = $basepath + "/storage/storage-units/" + $stu_name + + +$response_delete = Invoke-WebRequest ` + -Uri $stu_uri ` + -Method DELETE ` + -ContentType $contentType ` + -Headers $headers + +if ($response_delete.StatusCode -ne 204) +{ + throw "Unable to delete storage unit." +} + +Write-Host "storage unit deleted successfully.`n" +Write-Host $response_delete + +$response_delete = (ConvertFrom-Json -InputObject $response_delete) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Get-NB-get-disk-pool-by-id.ps1 b/snippets/powershell/storageAPI/Get-NB-get-disk-pool-by-id.ps1 new file mode 100644 index 0000000..d412392 --- /dev/null +++ b/snippets/powershell/storageAPI/Get-NB-get-disk-pool-by-id.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching scpecified disk pool. + +.DESCRIPTION +This script will fetch scpecified disk pool. + +.EXAMPLE +./Get-NB-get-disk-pool-by-id.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -dpid "disk pool id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$dpid = $(throw "Please specify the dpid using -dpid parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Disk Pool +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/disk-pools/" + $dpid + + +$response_get = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_get.StatusCode -ne 200) +{ + throw "Unable to fetch disk pool." +} + +Write-Host "Disk pool fetched successfully.`n" +Write-Host $response_get + +$response_get = (ConvertFrom-Json -InputObject $response_get) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Get-NB-get-disk-pool.ps1 b/snippets/powershell/storageAPI/Get-NB-get-disk-pool.ps1 new file mode 100644 index 0000000..8cef2af --- /dev/null +++ b/snippets/powershell/storageAPI/Get-NB-get-disk-pool.ps1 @@ -0,0 +1,119 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching disk pools. + +.DESCRIPTION +This script will fetch disk pools. + +.EXAMPLE +./Get-NB-get-disk-pool.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Disk Pools +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/disk-pools" + + +$response_getAll = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_getAll.StatusCode -ne 200) +{ + throw "Unable to fetch disk pools." +} + +Write-Host "disk pools fetched successfully.`n" +Write-Host $response_getAll + +$response_getAll = (ConvertFrom-Json -InputObject $response_getAll) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-server-by-id.ps1 b/snippets/powershell/storageAPI/Get-NB-get-storage-server-by-id.ps1 new file mode 100644 index 0000000..4b45f1b --- /dev/null +++ b/snippets/powershell/storageAPI/Get-NB-get-storage-server-by-id.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching scpecified storage server. + +.DESCRIPTION +This script will fetch scpecified storage server. + +.EXAMPLE +./Get-NB-get-storage-server-by-id.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stsid "storage server id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stsid = $(throw "Please specify the stsid using -stsid parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Storage servers +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers/" + $stsid + + +$response_get = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_get.StatusCode -ne 200) +{ + throw "Unable to fetch storage server." +} + +Write-Host "storage server fetched successfully.`n" +Write-Host $response_get + +$response_get = (ConvertFrom-Json -InputObject $response_get) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-server.ps1 b/snippets/powershell/storageAPI/Get-NB-get-storage-server.ps1 new file mode 100644 index 0000000..2a15756 --- /dev/null +++ b/snippets/powershell/storageAPI/Get-NB-get-storage-server.ps1 @@ -0,0 +1,119 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching storage servers. + +.DESCRIPTION +This script will fetch storage servers. + +.EXAMPLE +./Get-NB-get-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Storage servers +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers" + + +$response_getAll = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_getAll.StatusCode -ne 200) +{ + throw "Unable to fetch storage servers." +} + +Write-Host "storage servers fetched successfully.`n" +Write-Host $response_getAll + +$response_getAll = (ConvertFrom-Json -InputObject $response_getAll) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-unit-by-id.ps1 b/snippets/powershell/storageAPI/Get-NB-get-storage-unit-by-id.ps1 new file mode 100644 index 0000000..34cc3bb --- /dev/null +++ b/snippets/powershell/storageAPI/Get-NB-get-storage-unit-by-id.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching scpecified storage unit. + +.DESCRIPTION +This script will fetch scpecified storage unit. + +.EXAMPLE +./Get-NB-get-storage-unit-by-id.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stu_name "storage unit name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stu_name = $(throw "Please specify the stu_name using -stu_name parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup storage unit +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-units/" + $stu_name + + +$response_get = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_get.StatusCode -ne 200) +{ + throw "Unable to fetch storage unit." +} + +Write-Host "storage unit fetched successfully.`n" +Write-Host $response_get + +$response_get = (ConvertFrom-Json -InputObject $response_get) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-unit.ps1 b/snippets/powershell/storageAPI/Get-NB-get-storage-unit.ps1 new file mode 100644 index 0000000..0ff7281 --- /dev/null +++ b/snippets/powershell/storageAPI/Get-NB-get-storage-unit.ps1 @@ -0,0 +1,119 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching storage units. + +.DESCRIPTION +This script will fetch storage units. + +.EXAMPLE +./Get-NB-get-storage-unit.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Storage Units +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-units" + + +$response_getAll = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_getAll.StatusCode -ne 200) +{ + throw "Unable to fetch storage units." +} + +Write-Host "storage units fetched successfully.`n" +Write-Host $response_getAll + +$response_getAll = (ConvertFrom-Json -InputObject $response_getAll) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Patch-NB-update-ad-storage-server.ps1 b/snippets/powershell/storageAPI/Patch-NB-update-ad-storage-server.ps1 new file mode 100644 index 0000000..b3f6773 --- /dev/null +++ b/snippets/powershell/storageAPI/Patch-NB-update-ad-storage-server.ps1 @@ -0,0 +1,136 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for updating Advanced disk storage server. + +.DESCRIPTION +This script will update Advanced disk storage server. + +.EXAMPLE +./Patch-NB-update-ad-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stsid "storage server id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stsid = $(throw "Please specify the stsid using -stsid parameter.") + +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# PATCH NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers/" + $stsid + +$json = '{ +"data": { + "type": "storageServer", + "attributes": { + "advancedDiskAttributes": { + "isPreferredForRestore": false, + "isRequiredForRestore": false, + "isRequiredForDuplication": false + } + + } + } +} +' +$response_update = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_update.StatusCode -ne 200) +{ + throw "Unable to update storage server." +} + +Write-Host "storage server updated successfully.`n" +echo $response_update +Write-Host $response_update + +$response_update = (ConvertFrom-Json -InputObject $response_update) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Patch-NB-update-cloud-storage-server.ps1 b/snippets/powershell/storageAPI/Patch-NB-update-cloud-storage-server.ps1 new file mode 100644 index 0000000..d738fea --- /dev/null +++ b/snippets/powershell/storageAPI/Patch-NB-update-cloud-storage-server.ps1 @@ -0,0 +1,144 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for updating cloud storage server. + +.DESCRIPTION +This script will update cloud storage server. + +.EXAMPLE +./Patch-NB-update-cloud-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stsid "storage server id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stsid = $(throw "Please specify the stsid using -stsid parameter.") + +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# PATCH NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers/" + $stsid + +$json = '{ + "data": { + "type": "storageServer", + "attributes": { + "cloudAttributes": { + "readBufferSizeBytes": 419430401, + "writeBufferSizeBytes": 419430401, + "curlDetails": { + "curlLoggingEnabled": true, + "curlTimeOutSeconds": 1200, + "curlConnectionTimeOutSeconds": 600 + }, + "sslDetails": { + "useSSLMode": "NONE", + "checkCertificateRevocation": false + } + } + } + } +} +' + +$response_update = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_update.StatusCode -ne 200) +{ + throw "Unable to update storage server." +} + +Write-Host "storage server updated successfully.`n" +echo $response_update +Write-Host $response_update + +$response_update = (ConvertFrom-Json -InputObject $response_update) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Patch-NB-update-disk-pool.ps1 b/snippets/powershell/storageAPI/Patch-NB-update-disk-pool.ps1 new file mode 100644 index 0000000..49abf54 --- /dev/null +++ b/snippets/powershell/storageAPI/Patch-NB-update-disk-pool.ps1 @@ -0,0 +1,136 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for updating disk pool. + +.DESCRIPTION +This script will update disk pool. + +.EXAMPLE +./Patch-NB-update-disk-pool.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -dpid "disk pool id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$dpid = $(throw "Please specify the dpid using -dpid parameter.") + +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# PATCH NetBackup disk pool +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/disk-pools/" + $dpid + +$json = '{ + "data": { + "type": "diskPool", + "attributes": { + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 100 + }, + "diskPoolState": "UP" + } + } +} +' + +$response_update = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_update.StatusCode -ne 200) +{ + throw "Unable to update disk pool." +} + +Write-Host "disk pool updated successfully.`n" +echo $response_update +Write-Host $response_update + +$response_update = (ConvertFrom-Json -InputObject $response_update) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Patch-NB-update-msdp-storage-server.ps1 b/snippets/powershell/storageAPI/Patch-NB-update-msdp-storage-server.ps1 new file mode 100644 index 0000000..ed3986f --- /dev/null +++ b/snippets/powershell/storageAPI/Patch-NB-update-msdp-storage-server.ps1 @@ -0,0 +1,135 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for updating msdp storage server. + +.DESCRIPTION +This script will update msdp storage server. + +.EXAMPLE +./Patch-NB-update-msdp-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stsid "storage server id" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stsid = $(throw "Please specify the stsid using -stsid parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# PATCH NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers/" + $stsid + +$json = '{ + "data": { + "type": "storageServer", + "attributes": { + "msdpAttributes": { + "credentials": { + "userName": "USER_NAME", + "password": "PASSWORD" + } + } + } + } +} +' +$response_update = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_update.StatusCode -ne 200) +{ + throw "Unable to update storage server." +} + +Write-Host "storage server updated successfully.`n" +echo $response_update +Write-Host $response_update + +$response_update = (ConvertFrom-Json -InputObject $response_update) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Patch-NB-update-storage-unit.ps1 b/snippets/powershell/storageAPI/Patch-NB-update-storage-unit.ps1 new file mode 100644 index 0000000..ad2f27c --- /dev/null +++ b/snippets/powershell/storageAPI/Patch-NB-update-storage-unit.ps1 @@ -0,0 +1,134 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for updating storage unit. + +.DESCRIPTION +This script will update storage unit. + +.EXAMPLE +./Patch-NB-update-storage-unit.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -stu_name "storage unit name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$stu_name = $(throw "Please specify the stu_name using -stu_name parameter.") + +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# PATCH NetBackup Storage Unit +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$stu_uri = $basepath + "/storage/storage-units/" + $stu_name + +$json = '{ + "data": { + "type": "storageUnit", + "attributes": { + "maxFragmentSizeMegabytes": 50100, + "maxConcurrentJobs": 8, + "onDemandOnly": true + } + } +} +' + +$response_update = Invoke-WebRequest ` + -Uri $stu_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_update.StatusCode -ne 200) +{ + throw "Unable to update storage unit." +} + +Write-Host "storage units updated successfully.`n" +echo $response_update +Write-Host $response_update + +$response_update = (ConvertFrom-Json -InputObject $response_update) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-ad-disk-pool.ps1 b/snippets/powershell/storageAPI/Post-NB-create-ad-disk-pool.ps1 new file mode 100644 index 0000000..8996721 --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-ad-disk-pool.ps1 @@ -0,0 +1,151 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating disk pool for Advanced Disk storage server. + +.DESCRIPTION +This script will create disk pool for Advanced Disk storage server. + +.EXAMPLE +./Post-NB-create-ad-disk-pool.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Disk Pool +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$dp_uri = $basepath + "/storage/disk-pools" + +$json = '{ + "data": { + "type": "diskPool", + "attributes": { + "name": "disk-pool1", + "diskVolumes": [ + { + "name": "C:\\" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 4 + } + }, + "relationships": { + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } +} +' +echo $json + +$response_create_dp = Invoke-WebRequest ` + -Uri $dp_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_dp.StatusCode -ne 201) +{ + Write-Host $response_create_dp + throw "Unable to create Disk Pool." +} + +Write-Host "Disk Pool created successfully.`n" +echo $response_create_dp +Write-Host $response_create_dp + +$response_create_dp = (ConvertFrom-Json -InputObject $response_create_dp) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-ad-storage-server.ps1 b/snippets/powershell/storageAPI/Post-NB-create-ad-storage-server.ps1 new file mode 100644 index 0000000..e0704a1 --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-ad-storage-server.ps1 @@ -0,0 +1,139 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating Advanced disk storage server. + +.DESCRIPTION +This script will create Advanced disk storage server. + +.EXAMPLE +./Post-NB-create-ad-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers" + +$json = '{ + "data": { + "type": "storageServer", + "attributes": { + "name": "STORAGE_SERVER_NAME", + "storageCategory": "ADVANCED_DISK", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "advancedDiskAttributes": { + "isPreferredForRestore": true, + "isRequiredForRestore": true, + "isRequiredForDuplication": false + } + } + } +} +' + +$response_create_sts = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_sts.StatusCode -ne 201) +{ + throw "Unable to create storage server." +} + +Write-Host "storage server created successfully.`n" +echo $response_create_sts +Write-Host $response_create_sts + +$response_create_sts = (ConvertFrom-Json -InputObject $response_create_sts) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-ad-storage-unit.ps1 b/snippets/powershell/storageAPI/Post-NB-create-ad-storage-unit.ps1 new file mode 100644 index 0000000..f641de1 --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-ad-storage-unit.ps1 @@ -0,0 +1,142 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating storage unit for Advanced disk storage server. + +.DESCRIPTION +This script will create storage unit for Advanced disk storage server. + +.EXAMPLE +./Post-NB-create-ad-storage-unit.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage unit +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-units" + +$json = '{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "my-stu", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 51200, + "maxConcurrentJobs": 5, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data": { + "type": "diskPool", + "id": "DISK_POOL_ID" + } + } + } + } +} +' + +$response_create_stu = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_stu.StatusCode -ne 201) +{ + throw "Unable to create storage unit." +} + +Write-Host "storage unit created successfully.`n" +echo $response_create_stu +Write-Host $response_create_stu + +$response_create_stu = (ConvertFrom-Json -InputObject $response_create_stu) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-cloud-disk-pool.ps1 b/snippets/powershell/storageAPI/Post-NB-create-cloud-disk-pool.ps1 new file mode 100644 index 0000000..cdd2c2f --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-cloud-disk-pool.ps1 @@ -0,0 +1,150 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating disk pool for cloud storage server. + +.DESCRIPTION +This script will create disk pool for cloud storage server. + +.EXAMPLE +./Post-NB-create-cloud-disk-pool.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Disk Pool +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/disk-pools" + +$json = '{ + "data": { + "type": "diskPool", + "attributes": { + "name": "disk-pool1", + "diskVolumes": [ + { + "name": "BUCKET_NAME" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 4 + } + }, + "relationships": { + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } +} + +' + +$response_create_dp = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_dp.StatusCode -ne 201) +{ + throw "Unable to create Disk Pool." +} + +Write-Host "Disk Pool created successfully.`n" +echo $response_create_dp +Write-Host $response_create_dp + +$response_create_dp = (ConvertFrom-Json -InputObject $response_create_dp) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-server.ps1 b/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-server.ps1 new file mode 100644 index 0000000..f76f7cb --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-server.ps1 @@ -0,0 +1,152 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating cloud storage server. + +.DESCRIPTION +This script will create cloud storage server. + +.EXAMPLE +./Post-NB-create-cloud-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers" + +$json = '{ + "data": { + "type": "storageServer", + "attributes": { + "name": "amazonstss.com", + "storageCategory": "CLOUD", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "cloudAttributes": { + "providerId": "amazon", + "compressionEnabled": true, + "s3RegionDetails": [ + { + "serviceHost": "SERVICE-HOST", + "regionName": "REGION_NAME", + "regionId": "REGION_ID" + } + ], + "cloudCredentials": { + "authType": "ACCESS_KEY", + "accessKeyDetails": { + "userName": "USER_ID", + "password": "PASSWORD" + } + } + } + } + } +} +' + +$response_create_sts = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_sts.StatusCode -ne 201) +{ + throw "Unable to create storage server." +} + +Write-Host "storage server created successfully.`n" +echo $response_create_sts +Write-Host $response_create_sts + +$response_create_sts = (ConvertFrom-Json -InputObject $response_create_sts) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-unit.ps1 b/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-unit.ps1 new file mode 100644 index 0000000..73d698e --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-unit.ps1 @@ -0,0 +1,142 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating storage unit for cloud storage server. + +.DESCRIPTION +This script will create storage unit for cloud storage server. + +.EXAMPLE +./Post-NB-create-cloud-storage-unit.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage unit +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-units" + +$json = '{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "cloud-stu", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 50000, + "maxConcurrentJobs": 10, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data" : { + "type": "diskPool", + "id": "DISK_POOL_ID" + } + } + } +} +} +' + +$response_create_stu = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_stu.StatusCode -ne 201) +{ + throw "Unable to create storage unit." +} + +Write-Host "storage unit created successfully.`n" +echo $response_create_stu +Write-Host $response_create_stu + +$response_create_stu = (ConvertFrom-Json -InputObject $response_create_stu) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-msdp-disk-pool.ps1 b/snippets/powershell/storageAPI/Post-NB-create-msdp-disk-pool.ps1 new file mode 100644 index 0000000..d7f4337 --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-msdp-disk-pool.ps1 @@ -0,0 +1,149 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating disk pool for msdp storage server. + +.DESCRIPTION +This script will create disk pool for msdp storage server. + +.EXAMPLE +./Post-NB-create-msdp-disk-pool.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Disk Pool +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/disk-pools" + +$json = '{ + "data": { + "type": "diskPool", + "attributes": { + "name": "msdp-dp1", + "diskVolumes": [ + { + "name":"PureDiskVolume" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 2 + } + }, + "relationships":{ + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } + }' + + +$response_create_dp = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_dp.StatusCode -ne 201) +{ + throw "Unable to create Disk Pool." +} + +Write-Host "Disk Pool created successfully.`n" +echo $response_create_dp +Write-Host $response_create_dp + +$response_create_dp = (ConvertFrom-Json -InputObject $response_create_dp) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-server.ps1 b/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-server.ps1 new file mode 100644 index 0000000..bcf3148 --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-server.ps1 @@ -0,0 +1,143 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating storage unit for msdp. + +.DESCRIPTION +This script will create msdp storage server. + +.EXAMPLE +./Post-NB-create-msdp-storage-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-servers" + +$json = '{ +"data": { + "type": "storageServer", + "attributes": { + "name": "STORAGE_SERVER", + "storageCategory": "MSDP", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "encryptionEnabled": true, + "msdpAttributes": { + "storagePath": "STORAGE_PATH", + "credentials": { + "userName": "MSDP_USERID", + "password": "MSDP_PASSWORD" + } + } + } + } + +} +' + +$response_create_sts = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_sts.StatusCode -ne 201) +{ + throw "Unable to create storage server." +} + +Write-Host "storage server created successfully.`n" +echo $response_create_sts +Write-Host $response_create_sts + +$response_create_sts = (ConvertFrom-Json -InputObject $response_create_sts) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-unit.ps1 b/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-unit.ps1 new file mode 100644 index 0000000..5264026 --- /dev/null +++ b/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-unit.ps1 @@ -0,0 +1,143 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for creating storage unit for msdp storage server. + +.DESCRIPTION +This script will create storage unit for msdp storage server. + +.EXAMPLE +./Post-NB-create-msdp-storage-unit.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage unit +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$sts_uri = $basepath + "/storage/storage-units" + +$json = '{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "STORAGE_UNIT", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 50000, + "maxConcurrentJobs": 10, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data": { + "type": "diskPool", + "id": "DISK_POOL_ID" + } + } + } + } +} + +' + +$response_create_stu = Invoke-WebRequest ` + -Uri $sts_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_stu.StatusCode -ne 201) +{ + throw "Unable to create storage unit." +} + +Write-Host "storage unit created successfully.`n" +echo $response_create_stu +Write-Host $response_create_stu + +$response_create_stu = (ConvertFrom-Json -InputObject $response_create_stu) \ No newline at end of file diff --git a/snippets/powershell/storageAPI/README.md b/snippets/powershell/storageAPI/README.md new file mode 100644 index 0000000..4123fed --- /dev/null +++ b/snippets/powershell/storageAPI/README.md @@ -0,0 +1,39 @@ +### NetBackup API Code Samples for PowerShell + +This directory contains code samples to invoke NetBackup REST APIs using PowerShell. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Pre-requisites: + +- NetBackup 8.2 or higher +- PowerShell 5.0 or higher + +#### Executing the snippets in PowerShell + +Use the following commands to run the PowerShell samples. +- `.\Post-NB-create-msdp-storage-unit.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-msdp-storage-server.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-msdp-disk-pool.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-cloud-storage-unit.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-cloud-storage-server.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-cloud-disk-pool.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-ad-storage-unit.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-ad-storage-server.ps1 -nbmaster -username -password ` +- `.\Post-NB-create-ad-disk-pool.ps1 -nbmaster -username -password ` +- `.\Get-NB-get-storage-server-by-id.ps1 -nbmaster -username -password -stsid ` +- `.\Get-NB-get-storage-server.ps1 -nbmaster -username -password ` +- `.\Get-NB-get-storage-unit.ps1 -nbmaster -username -password ` +- `.\Get-NB-get-disk-pool-by-id.ps1 -nbmaster -username -password -dpid ` +- `.\Get-NB-get-storage-unit-by-id.ps1 -nbmaster -username -password -stu_name ` +- `.\Get-NB-get-disk-pool.ps1 -nbmaster -username -password ` +- `.\Patch-NB-update-storage-unit.ps1 -nbmaster -username -password -stu_name ` +- `.\Patch-NB-update-msdp-storage-server.ps1 -nbmaster -username -password -stsid ` +- `.\Patch-NB-update-disk-pool.ps1 -nbmaster -username -password -dpid ` +- `.\Patch-NB-update-cloud-storage-server.ps1 -nbmaster -username -password -stsid ` +- `.\Patch-NB-update-ad-storage-server.ps1 -nbmaster -username -password -stsid ` +- `.\Delete-NB-delete-disk-pool.ps1 -nbmaster -username -password -dpid ` +- `.\Delete-NB-delete-storage-server.ps1 -nbmaster -username -password -stsid ` +- `.\Delete-NB-delete-storage-unit.ps1 -nbmaster -username -password -stu_name ` diff --git a/snippets/python/storageAPI/README.md b/snippets/python/storageAPI/README.md new file mode 100644 index 0000000..0bdfc30 --- /dev/null +++ b/snippets/python/storageAPI/README.md @@ -0,0 +1,32 @@ +### NetBackup API Code Samples for Python + +This directory contains code samples to invoke NetBackup REST APIs using Python. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Pre-requisites: + +- NetBackup 8.2 or higher +- python 3.5 or higher +- python modules: `requests, texttable` + +#### Executing the snippets in Python + +Use the following commands to run the python samples. +- `python -W ignore create_disk_pool.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]` +- `python -W ignore create_storage_server.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]` +- `python -W ignore create_storage_unit.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]` +- `python -W ignore delete_disk_pool.py -nbmaster -username -password -dpid [-domainname ] [-domaintype ]` +- `python -W ignore delete_storage_server.py -nbmaster -username -password -stsid [-domainname ] [-domaintype ]` +- `python -W ignore delete_storage_unit.py -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]` +- `python -W ignore get_disk_pool.py -nbmaster -username -password [-domainname ] [-domaintype ]` +- `python -W ignore get_disk_pool_by_id.py -nbmaster -username -password -dpid [-domainname ] [-domaintype ]` +- `python -W ignore get_storage_server.py -nbmaster -username -password [-domainname ] [-domaintype ]` +- `python -W ignore get_storage_unit.py -nbmaster -username -password [-domainname ] [-domaintype ]` +- `python -W ignore get_storage_unit_by_id.py -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]` +- `python -W ignore patch_disk_pool.py -nbmaster -username -password -payload -dpid [-domainname ]` +- `python -W ignore create_storage_server.py -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]` +- `python -W ignore patch_storage_unit.py -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]` + diff --git a/snippets/python/storageAPI/create_disk_pool.py b/snippets/python/storageAPI/create_disk_pool.py new file mode 100644 index 0000000..6e79a21 --- /dev/null +++ b/snippets/python/storageAPI/create_disk_pool.py @@ -0,0 +1,70 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore create_disk_pool.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +reponse = storage.create_disk_pool(jwt, base_url, payload) + +print(reponse) diff --git a/snippets/python/storageAPI/create_storage_server.py b/snippets/python/storageAPI/create_storage_server.py new file mode 100644 index 0000000..d951959 --- /dev/null +++ b/snippets/python/storageAPI/create_storage_server.py @@ -0,0 +1,74 @@ +import os +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore create_storage_server.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + if os.path.exists(payload): + print + os.path.basename(payload) + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +reponse = storage.create_storage_server(jwt, base_url, payload) + +print(reponse) diff --git a/snippets/python/storageAPI/create_storage_unit.py b/snippets/python/storageAPI/create_storage_unit.py new file mode 100644 index 0000000..244fc1d --- /dev/null +++ b/snippets/python/storageAPI/create_storage_unit.py @@ -0,0 +1,70 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore create_storage_unit.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +reponse = storage.create_storage_unit(jwt, base_url, payload) + +print(reponse) diff --git a/snippets/python/storageAPI/delete_disk_pool.py b/snippets/python/storageAPI/delete_disk_pool.py new file mode 100644 index 0000000..6cf1f24 --- /dev/null +++ b/snippets/python/storageAPI/delete_disk_pool.py @@ -0,0 +1,68 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore delete_disk_pool.py -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global dpid + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-dpid": + dpid = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif dpid == "": + print("Please provide the value for 'dpid'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +storage.delete_disk_pools(jwt, base_url, dpid) \ No newline at end of file diff --git a/snippets/python/storageAPI/delete_storage_server.py b/snippets/python/storageAPI/delete_storage_server.py new file mode 100644 index 0000000..7f14568 --- /dev/null +++ b/snippets/python/storageAPI/delete_storage_server.py @@ -0,0 +1,71 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + + +def print_usage(): + print("Example:") + print( + "python -W ignore delete_storage_server.py -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n\n") + + +def read_command_line_arguments(): + if len(sys.argv) % 2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global stsid + + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-stsid": + stsid = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif stsid == "": + print("Please provide the value for 'stsid'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) +storage.delete_storage_server(jwt, base_url, stsid) diff --git a/snippets/python/storageAPI/delete_storage_unit.py b/snippets/python/storageAPI/delete_storage_unit.py new file mode 100644 index 0000000..be74f8c --- /dev/null +++ b/snippets/python/storageAPI/delete_storage_unit.py @@ -0,0 +1,72 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + + +def print_usage(): + print("Example:") + print( + "python -W ignore delete_storage_unit.py -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n\n") + + +def read_command_line_arguments(): + if len(sys.argv) % 2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global stu_name + + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-stu_name": + stu_name = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif stu_name == "": + print("Please provide the value for 'stu_name'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +storage.delete_storage_unit(jwt, base_url, stu_name) \ No newline at end of file diff --git a/snippets/python/storageAPI/get_disk_pool.py b/snippets/python/storageAPI/get_disk_pool.py new file mode 100644 index 0000000..ae92ee4 --- /dev/null +++ b/snippets/python/storageAPI/get_disk_pool.py @@ -0,0 +1,65 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_disk_pool.py -nbmaster -username -password [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +jobs = storage.get_disk_pools(jwt, base_url) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/storageAPI/get_disk_pool_by_id.py b/snippets/python/storageAPI/get_disk_pool_by_id.py new file mode 100644 index 0000000..8dfa881 --- /dev/null +++ b/snippets/python/storageAPI/get_disk_pool_by_id.py @@ -0,0 +1,70 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_disk_pool_by_id.py -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global dpid + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-dpid": + dpid = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif dpid == "": + print("Please provide the value for 'dpid'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +jobs = storage.get_disk_pools_by_id(jwt, base_url, dpid) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/storageAPI/get_storage_server.py b/snippets/python/storageAPI/get_storage_server.py new file mode 100644 index 0000000..c063fe2 --- /dev/null +++ b/snippets/python/storageAPI/get_storage_server.py @@ -0,0 +1,65 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_storage_server.py -nbmaster -username -password [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +jobs = storage.get_storage_units(jwt, base_url) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/storageAPI/get_storage_server_by_id.py b/snippets/python/storageAPI/get_storage_server_by_id.py new file mode 100644 index 0000000..4f815a6 --- /dev/null +++ b/snippets/python/storageAPI/get_storage_server_by_id.py @@ -0,0 +1,74 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + + +def print_usage(): + print("Example:") + print( + "python -W ignore get_storage_server_by_id.py -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n\n") + + +def read_command_line_arguments(): + if len(sys.argv) % 2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global stsid + + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-stsid": + stsid = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif stsid == "": + print("Please provide the value for 'stsid'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +jobs = storage.get_storage_server_by_id(jwt, base_url, stsid) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/storageAPI/get_storage_unit.py b/snippets/python/storageAPI/get_storage_unit.py new file mode 100644 index 0000000..0a3ab34 --- /dev/null +++ b/snippets/python/storageAPI/get_storage_unit.py @@ -0,0 +1,63 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 +def print_usage(): + print("Example:") + print("python -W ignore get_storage_unit.py -nbmaster -username -password [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +jobs = storage.get_storage_units(jwt, base_url) +print (jobs) \ No newline at end of file diff --git a/snippets/python/storageAPI/get_storage_unit_by_id.py b/snippets/python/storageAPI/get_storage_unit_by_id.py new file mode 100644 index 0000000..5b9bc38 --- /dev/null +++ b/snippets/python/storageAPI/get_storage_unit_by_id.py @@ -0,0 +1,74 @@ +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + + +def print_usage(): + print("Example:") + print( + "python -W ignore get_storage_unit_by_id.py -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n\n") + + +def read_command_line_arguments(): + if len(sys.argv) % 2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global stu_name + + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-stu_name": + stu_name = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif stu_name == "": + print("Please provide the value for 'stu_name'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +jobs = storage.get_storage_unit_by_id(jwt, base_url, stu_name) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/storageAPI/patch_disk_pool.py b/snippets/python/storageAPI/patch_disk_pool.py new file mode 100644 index 0000000..d74c5ed --- /dev/null +++ b/snippets/python/storageAPI/patch_disk_pool.py @@ -0,0 +1,76 @@ +import os +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore patch_disk_pool.py -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + global dpid + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-dpid": + dpid = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + elif dpid == "": + print("Please provide the value for 'dpid'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +reponse = storage.patch_disk_pool(jwt, base_url, payload, dpid) + +print(reponse) diff --git a/snippets/python/storageAPI/patch_storage_server.py b/snippets/python/storageAPI/patch_storage_server.py new file mode 100644 index 0000000..d0693b6 --- /dev/null +++ b/snippets/python/storageAPI/patch_storage_server.py @@ -0,0 +1,76 @@ +import os +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore create_storage_server.py -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + global stsid + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-stsid": + stsid = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + elif stsid == "": + print("Please provide the value for 'stsid'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +reponse = storage.patch_storage_server(jwt, base_url, payload, stsid) + +print(reponse) diff --git a/snippets/python/storageAPI/patch_storage_unit.py b/snippets/python/storageAPI/patch_storage_unit.py new file mode 100644 index 0000000..bdb5e20 --- /dev/null +++ b/snippets/python/storageAPI/patch_storage_unit.py @@ -0,0 +1,76 @@ +import os +import sys +import storage +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore patch_storage_unit.py -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + global stu_name + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-stu_name": + stu_name = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + elif stu_name == "": + print("Please provide the value for 'stu_name'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = storage.perform_login(username, password, base_url, domainname, domaintype) + +reponse = storage.patch_storage_unit(jwt, base_url, payload, stu_name) + +print(reponse) diff --git a/snippets/python/storageAPI/storage.py b/snippets/python/storageAPI/storage.py new file mode 100644 index 0000000..d86dfa4 --- /dev/null +++ b/snippets/python/storageAPI/storage.py @@ -0,0 +1,284 @@ +import requests + +content_type = "application/vnd.netbackup+json; version=3.0" + + +def perform_login(username, password, base_url, domain_name, domain_type): + url = base_url + "/login" + + if domain_name != "" and domain_type != "": + req_body = {"userName": username, "password": password, "domainName": domain_name, "domainType": domain_type} + else: + req_body = {"userName": username, "password": password} + + headers = {'Content-Type': content_type} + + print("performing POST on {} for user '{}'\n".format(url, req_body['userName'])) + + resp = requests.post(url, headers=headers, json=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Login API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json()['token'] + +def get_storage_units(jwt, base_url): + url = base_url + "/storage/storage-units" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STU API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def get_storage_servers(jwt, base_url): + url = base_url + "/storage/storage-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STS API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def create_storage_server(jwt, base_url, file_name): + url = base_url + "/storage/storage-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url)) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create STS API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def patch_storage_server(jwt, base_url, file_name, stsid): + url = base_url + "/storage/storage-servers/" + stsid + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + + if resp.status_code != 200: + raise Exception('Update STS API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe STS is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() + +def patch_storage_unit(jwt, base_url, file_name, stu_name): + url = base_url + "/storage/storage-units/" +stu_name + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + + if resp.status_code != 200: + raise Exception('Update STU API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe STU is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() + +def patch_disk_pool(jwt, base_url, file_name, dpid): + url = base_url + "/storage/disk-pools/" +dpid + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 200: + raise Exception('Update DP API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe DP is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() + + +def create_disk_pool(jwt, base_url, file_name): + url = base_url + "/storage/disk-pools" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url)) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create DP API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def create_storage_unit(jwt, base_url, file_name): + url = base_url + "/storage/storage-units" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url), req_body) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create STU API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def get_disk_pools(jwt, base_url): + url = base_url + "/storage/disk-pools" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET DP API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_disk_pools_by_id(jwt, base_url, dpid): + url = base_url + "/storage/disk-pools/" +dpid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET DP with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_storage_server_by_id(jwt, base_url, stsid): + url = base_url + "/storage/storage-servers/" +stsid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STS with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_storage_unit_by_id(jwt, base_url, stu_name): + url = base_url + "/storage/storage-units/" +stu_name + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET STU with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + + +def delete_storage_server(jwt, base_url, stsid): + url = base_url + "/storage/storage-servers/" +stsid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + + if resp.status_code != 204: + raise Exception('DELETE STS with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + print("\nThe STS is deleted with status code: {}\n".format(resp.status_code)) + +def delete_storage_unit(jwt, base_url, stu_name): + url = base_url + "/storage/storage-units/" +stu_name + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + + if resp.status_code != 204: + raise Exception('DELETE STU with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe STU is deleted with status code: {}\n".format(resp.status_code)) + +def delete_disk_pools(jwt, base_url, dpid): + url = base_url + "/storage/disk-pools/" +dpid + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + if resp.status_code != 204: + raise Exception('DELETE DP with specific ID failed with status code {} and {}'.format(resp.status_code, resp.json())) + + print("\nThe DP is deleted with status code: {}\n".format(resp.status_code)) \ No newline at end of file From 502902c848a308d38d74b84c307da87de5f323da Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 28 Mar 2019 17:41:35 +0530 Subject: [PATCH 02/11] sample payloads --- .../patch_ad_dp_payload.json | 14 +++++++++ .../patch_ad_sts_payload.json | 13 ++++++++ .../patch_ad_stu_payload.json | 10 ++++++ .../patch_cloud_dp_payload.json | 12 +++++++ .../patch_cloud_sts_payload.json | 22 +++++++++++++ .../patch_cloud_stu_payload.json | 10 ++++++ .../patch_msdp_dp_payload.json | 14 +++++++++ .../patch_msdp_sts_payload.json | 13 ++++++++ .../patch_msdp_stu_payload.json | 11 +++++++ .../post_ad_dp_payload.json | 27 ++++++++++++++++ .../post_ad_sts_payload.json | 18 +++++++++++ .../post_ad_stu_payload.json | 20 ++++++++++++ .../post_cloud_dp_payload.json | 27 ++++++++++++++++ .../post_cloud_sts_payload.json | 31 +++++++++++++++++++ .../post_cloud_stu_payload.json | 20 ++++++++++++ .../post_msdp_dp_payload.json | 27 ++++++++++++++++ .../post_msdp_sts_payload.json | 22 +++++++++++++ .../post_msdp_stu_payload.json | 20 ++++++++++++ 18 files changed, 331 insertions(+) create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_dp_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_sts_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_stu_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_dp_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_sts_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_stu_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_dp_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_sts_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_stu_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_ad_dp_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_ad_sts_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_ad_stu_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_dp_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_sts_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_stu_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_dp_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_sts_payload.json create mode 100644 storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_stu_payload.json diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_dp_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_dp_payload.json new file mode 100644 index 0000000..ef6f7eb --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_dp_payload.json @@ -0,0 +1,14 @@ +{ + "data": { + "type": "diskPool", + "attributes": { + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 5 + }, + "highWaterMark": 99, + "lowWaterMark": 75, + "diskPoolState": "DOWN" + } + } +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_sts_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_sts_payload.json new file mode 100644 index 0000000..435cbb1 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_sts_payload.json @@ -0,0 +1,13 @@ +{ +"data": { + "type": "storageServer", + "attributes": { + "advancedDiskAttributes": { + "isPreferredForRestore": false, + "isRequiredForRestore": false, + "isRequiredForDuplication": false + } + + } + } +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_stu_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_stu_payload.json new file mode 100644 index 0000000..c99ded6 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_ad_stu_payload.json @@ -0,0 +1,10 @@ +{ + "data": { + "type": "storageUnit", + "attributes": { + "maxFragmentSizeMegabytes": 50100, + "maxConcurrentJobs": 8, + "onDemandOnly": true + } + } +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_dp_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_dp_payload.json new file mode 100644 index 0000000..fd2fc16 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_dp_payload.json @@ -0,0 +1,12 @@ +{ + "data": { + "type": "diskPool", + "attributes": { + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 100 + }, + "diskPoolState": "DP_STATE" + } + } +} diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_sts_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_sts_payload.json new file mode 100644 index 0000000..87c28a8 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_sts_payload.json @@ -0,0 +1,22 @@ +{ + "data": { + "type": "storageServer", + "attributes": { + "cloudAttributes": { + "proxyServerEnabled": false, + "serverSideEncryptionEnabled": true, + "readBufferSizeBytes": 419430401, + "writeBufferSizeBytes": 419430401, + "curlDetails": { + "curlLoggingEnabled": true, + "curlTimeOutSeconds": 1200, + "curlConnectionTimeOutSeconds": 600 + }, + "sslDetails": { + "useSSLMode": "NONE", + "checkCertificateRevocation": false + } + } + } + } +} diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_stu_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_stu_payload.json new file mode 100644 index 0000000..c99ded6 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_cloud_stu_payload.json @@ -0,0 +1,10 @@ +{ + "data": { + "type": "storageUnit", + "attributes": { + "maxFragmentSizeMegabytes": 50100, + "maxConcurrentJobs": 8, + "onDemandOnly": true + } + } +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_dp_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_dp_payload.json new file mode 100644 index 0000000..8b82de9 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_dp_payload.json @@ -0,0 +1,14 @@ +{ + "data": { + "type": "diskPool", + "attributes": { + "highWaterMark": 90, + "lowWaterMark": 30, + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 100 + }, + "diskPoolState": "DP_STATE" + } + } +} diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_sts_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_sts_payload.json new file mode 100644 index 0000000..ad31c93 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_sts_payload.json @@ -0,0 +1,13 @@ +{ + "data": { + "type": "storageServer", + "attributes": { + "msdpAttributes": { + "credentials": { + "userName": "USER_NAME", + "password": "PASSWORD" + } + } + } + } +} diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_stu_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_stu_payload.json new file mode 100644 index 0000000..28d146b --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/patch_msdp_stu_payload.json @@ -0,0 +1,11 @@ +{ + "data": { + "type": "storageUnit", + "attributes": { + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 50100, + "maxConcurrentJobs": 8, + "onDemandOnly": true + } + } +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_dp_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_dp_payload.json new file mode 100644 index 0000000..922bf98 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_dp_payload.json @@ -0,0 +1,27 @@ +{ + "data": { + "type": "diskPool", + "attributes": { + "name": "disk-pool1", + "diskVolumes": [ + { + "name": "VOLUME_NAME" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 4 + } + }, + "relationships": { + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } +} diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_sts_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_sts_payload.json new file mode 100644 index 0000000..fc87aa9 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_sts_payload.json @@ -0,0 +1,18 @@ +{ +"data": { + "type": "storageServer", + "attributes": { + "name": "STORAGE_SERVER_NAME", + "storageCategory": "ADVANCED_DISK", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "advancedDiskAttributes": { + "isPreferredForRestore": true, + "isRequiredForRestore": true, + "isRequiredForDuplication": false + } + } + } +} + diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_stu_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_stu_payload.json new file mode 100644 index 0000000..a78837a --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_ad_stu_payload.json @@ -0,0 +1,20 @@ +{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "my-stu", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 51200, + "maxConcurrentJobs": 5, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data": { + "type": "diskPool", + "id": "DISK_POOL_ID" + } + } + } + } +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_dp_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_dp_payload.json new file mode 100644 index 0000000..922bf98 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_dp_payload.json @@ -0,0 +1,27 @@ +{ + "data": { + "type": "diskPool", + "attributes": { + "name": "disk-pool1", + "diskVolumes": [ + { + "name": "VOLUME_NAME" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 4 + } + }, + "relationships": { + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } +} diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_sts_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_sts_payload.json new file mode 100644 index 0000000..83d67ca --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_sts_payload.json @@ -0,0 +1,31 @@ +{ + "data": { + "type": "storageServer", + "attributes": { + "name": "amazonstss.com", + "storageCategory": "CLOUD", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "cloudAttributes": { + "providerId": "amazon", + "compressionEnabled": true, + "s3RegionDetails": [ + { + "serviceHost": "SERVICE-HOST", + "regionName": "REGION_NAME", + "regionId": "REGION_ID" + } + ], + "cloudCredentials": { + "authType": "ACCESS_KEY", + "accessKeyDetails": { + "userName": "USER_ID", + "password": "PASSWORD" + } + } + } + } + } +} + diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_stu_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_stu_payload.json new file mode 100644 index 0000000..39b75f2 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_cloud_stu_payload.json @@ -0,0 +1,20 @@ +{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "cloud-stu", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 50000, + "maxConcurrentJobs": 10, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data" : { + "type": "diskPool", + "id": "DISK_POOL_ID" + } + } + } +} +} \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_dp_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_dp_payload.json new file mode 100644 index 0000000..f6ef511 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_dp_payload.json @@ -0,0 +1,27 @@ +{ + "data": { + "type": "diskPool", + "attributes": { + "name": "msdp-dp1", + "diskVolumes": [ + { + "name":"PureDiskVolume" + } + ], + "maximumIoStreams": { + "limitIoStreams": true, + "streamsPerVolume": 2 + } + }, + "relationships":{ + "storageServers": { + "data": [ + { + "type": "storageServer", + "id": "STORAGE_SERVER_ID" + } + ] + } + } + } + } \ No newline at end of file diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_sts_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_sts_payload.json new file mode 100644 index 0000000..f8f7e32 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_sts_payload.json @@ -0,0 +1,22 @@ +{ +"data": { + "type": "storageServer", + "attributes": { + "name": "STORAGE_SERVER", + "storageCategory": "MSDP", + "mediaServerDetails": { + "name": "MEDIA_SERVER" + }, + "encryptionEnabled": true, + "msdpAttributes": { + "storagePath": "STORAGE_PATH", + "credentials": { + "userName": "MSDP_USERID", + "password": "MSDP_PASSWORD" + } + } + } + } + +} + diff --git a/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_stu_payload.json b/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_stu_payload.json new file mode 100644 index 0000000..19fa667 --- /dev/null +++ b/storageApiRequestPayloadSample/requestPayloadSamples/post_msdp_stu_payload.json @@ -0,0 +1,20 @@ +{ + "data": { + "type": "storageUnit", + "attributes": { + "name": "STORAGE_UNIT", + "useAnyAvailableMediaServer": true, + "maxFragmentSizeMegabytes": 50000, + "maxConcurrentJobs": 10, + "onDemandOnly": true + }, + "relationships": { + "diskPool": { + "data": { + "type": "diskPool", + "id": "DISK_POOL_ID" + } + } + } + } +} From 54b78f68c1a53f60aa01500d47c442aaaacd8f5b Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Tue, 2 Apr 2019 16:18:25 +0530 Subject: [PATCH 03/11] added go code --- recipes/go/AIRAPIs/AIRAPIs.go | 70 ++++ recipes/go/ApiUtil/ApiUtil.go | 64 ++++ recipes/go/StorageHelper/StorageHelper.go | 381 ++++++++++++++++++++++ recipes/powershell/README.md | 3 +- recipes/python/README.md | 2 +- snippets/perl/README.md | 1 + 6 files changed, 519 insertions(+), 2 deletions(-) create mode 100644 recipes/go/AIRAPIs/AIRAPIs.go create mode 100644 recipes/go/ApiUtil/ApiUtil.go create mode 100644 recipes/go/StorageHelper/StorageHelper.go diff --git a/recipes/go/AIRAPIs/AIRAPIs.go b/recipes/go/AIRAPIs/AIRAPIs.go new file mode 100644 index 0000000..deac305 --- /dev/null +++ b/recipes/go/AIRAPIs/AIRAPIs.go @@ -0,0 +1,70 @@ +//This script can be run using NetBackup 8.2 and higher. + +package main + +import ( + "flag" + "fmt" + "log" + "os" + "storageHelper" +) + +//################### +// Global Variables +//################### +var ( + nbmaster = flag.String("nbmaster", "", "NetBackup Master Server") + username = flag.String("username", "", "User name to log into the NetBackup webservices") + password = flag.String("password", "", "Password for the given user") + domainName = flag.String("domainName", "", "Domain name of the given user") + domainType = flag.String("domainType", "", "Domain type of the given user") +) + +const usage = "\n\nUsage: go run ./AIRAPIs.go -nbmaster -username -password [-domainName ] [-domainType ]\n\n" + +func main() { + // Print usage + flag.Usage = func() { + fmt.Fprintf(os.Stderr, usage) + os.Exit(1) + } + + // Read command line arguments + flag.Parse() + + if len(*nbmaster) == 0 { + log.Fatalf("Please specify the name of the NetBackup Master Server using the -nbmaster parameter.\n") + } + if len(*username) == 0 { + log.Fatalf("Please specify the username using the -username parameter.\n") + } + if len(*password) == 0 { + log.Fatalf("Please specify the password using the -password parameter.\n") + } + + httpClient := storageHelper.GetHTTPClient() + jwt := storageHelper.Login(*nbmaster, httpClient, *username, *password, *domainName, *domainType) + + status, stsName := storageHelper.CreateMSDPStorageServer(*nbmaster, httpClient, jwt) + if( status != 201){ + panic("CreateMSDPStorageServer Failed. Exiting.\n") + } + + candInx, candId := storageHelper.GetReplicationCandidates(*nbmaster, httpClient, jwt) + if ( candInx == 0 ) { + fmt.Println("Exiting") + os.Exit(0) + } + + if ( storageHelper.AddReplicationTarget(*nbmaster, httpClient, jwt, stsName, candId) != 201 ) { + panic("AddReplicationTarget Failed. Exiting.\n") + } + + tarInx, tarId := storageHelper.GetReplicationTargets(*nbmaster, httpClient, jwt, stsName) + if ( tarInx == 0 ) { + fmt.Println("Exiting") + os.Exit(0) + } + storageHelper.DeleteReplicationTargets(*nbmaster, httpClient, jwt, stsName, tarId) +} diff --git a/recipes/go/ApiUtil/ApiUtil.go b/recipes/go/ApiUtil/ApiUtil.go new file mode 100644 index 0000000..fde81cc --- /dev/null +++ b/recipes/go/ApiUtil/ApiUtil.go @@ -0,0 +1,64 @@ +//This script consists of the helper functions to excute NetBackup APIs to assist in policy CRUD operations + +// 1. Get the HTTP client to perform API requests +// 2. Login to the NetBackup webservices +// 3. Create a policy with default values for the policy attributes +// 4. Create a policy with specific values for the policy attributes, schedules, clients, and backup selection +// 5. Read a policy +// 6. List all policies +// 7. Add/Update a schedule +// 8. Delete a schedule +// 9. Add/Update a client +// 10. Delete a client +// 11. Add/Update backup selection +// 12. Delete a policy + +package apiUtil + +import ( + "bufio" + "os" + "strings" + "io" + "fmt" + "bytes" +) + +func TakeInput(displayStr string)(string) { + + reader := bufio.NewReader(os.Stdin) + fmt.Print(displayStr) + output, _ := reader.ReadString('\n') + // convert CRLF to LF + output = strings.Replace(output, "\r\n", "", -1) + output = strings.Replace(output, "\n", "", -1) + return output +} + +func AskForResponseDisplay(response io.ReadCloser) { + if strings.Compare(TakeInput("Show response? (Yes/No)"), "Yes") == 0 { + buf := new(bytes.Buffer) + buf.ReadFrom(response) + responseStr := buf.String() + responseStr = strings.Replace(responseStr, "}", "}\r\n", -1) + responseStr = strings.Replace(responseStr, ",", ",\r\n", -1) + responseStr = strings.Replace(responseStr, "]", "]\r\n", -1) + + fmt.Print(responseStr) + } else { + fmt.Println("Response is not Yes!!") + } +} + +func AskForGETResponseDisplay(response []byte) { + if strings.Compare(TakeInput("Show response? (Yes/No)"), "Yes") == 0 { + responseStr := string(response) + responseStr = strings.Replace(responseStr, "}", "}\r\n", -1) + responseStr = strings.Replace(responseStr, ",", ",\r\n", -1) + responseStr = strings.Replace(responseStr, "]", "]\r\n", -1) + + fmt.Print(responseStr) + } else { + fmt.Println("Response is not Yes!!") + } +} \ No newline at end of file diff --git a/recipes/go/StorageHelper/StorageHelper.go b/recipes/go/StorageHelper/StorageHelper.go new file mode 100644 index 0000000..1e25a6c --- /dev/null +++ b/recipes/go/StorageHelper/StorageHelper.go @@ -0,0 +1,381 @@ +//This script consists of the helper functions to excute NetBackup APIs to assist in Air operation for MSDP sts + +// 1. Get the HTTP client to perform API requests +// 2. Login to the NetBackup webservices +// 3. Create MSDP storage server +// 4. Get Replication candidates +// 5. Add Replication target +// 6. Get Replication targets +// 7. Delete Replication target + +package storageHelper + +import ( + "bufio" + "os" + "strings" + "bytes" + "crypto/tls" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "strconv" + "apiUtil" +) + +type Data struct { + id string `json:"id"` + apiType string `json:"type"` + attr interface{} `json:"attributes"` +} + +type DataArray struct { + dataList []Data `json:"data"` +} + + +//################### +// Global Variables +//################### + +var mediaServerName string +const ( + port = "1556" + storageUri = "storage/" + storageServerUri = "storage-servers/" + storageUnitUri = "storage-units" + contentType = "application/vnd.netbackup+json;version=3.0" + replicationTargetsUri = "/replication-targets" + replicationCandidatesUri = "/target-storage-servers" +) + +//############################################################## +// Setup the HTTP client to make NetBackup Storage API requests +//############################################################## +func GetHTTPClient() *http.Client { + tlsConfig := &tls.Config { + InsecureSkipVerify: true, //for this test, ignore ssl certificate + } + + tr := &http.Transport{TLSClientConfig: tlsConfig} + client := &http.Client{Transport: tr} + + return client +} + +//##################################### +// Login to the NetBackup webservices +//##################################### +func Login(nbmaster string, httpClient *http.Client, username string, password string, domainName string, domainType string) string { + fmt.Printf("\nLogin to the NetBackup webservices...\n") + + loginDetails := map[string]string{"userName": username, "password": password} + if len(domainName) > 0 { + loginDetails["domainName"] = domainName + } + if len(domainType) > 0 { + loginDetails["domainType"] = domainType + } + loginRequest, _ := json.Marshal(loginDetails) + + uri := "https://" + nbmaster + ":" + port + "/netbackup/login" + + request, _ := http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(loginRequest)) + request.Header.Add("Content-Type", contentType); + + response, err := httpClient.Do(request) + + token := "" + if err != nil { + fmt.Printf("The HTTP request failed with error: %s\n", err) + panic("Unable to login to the NetBackup webservices") + } else { + if response.StatusCode == 201 { + data, _ := ioutil.ReadAll(response.Body) + var obj interface{} + json.Unmarshal(data, &obj) + loginResponse := obj.(map[string]interface{}) + token = loginResponse["token"].(string) + } else { + responseBody, _ := ioutil.ReadAll(response.Body) + fmt.Printf("%s\n", responseBody) + panic("Unable to login to the NetBackup webservices") + } + } + + return token +} + +//####################################################################### +// Create a MSDP Storage server +//####################################################################### +func CreateMSDPStorageServer(nbmaster string, httpClient *http.Client, jwt string)(int, string) { + fmt.Printf("\nSending a POST request to create with defaults...\n") + if strings.Compare(apiUtil.TakeInput("Want to create new MSDP storage server?(Or you can use existing)(Yes/No):"), "Yes") != 0 { + stsName := apiUtil.TakeInput("Enter MSDP/CloudCatalyst Storage Server Name for other operations:") + return 201, stsName; + } + + stsName := apiUtil.TakeInput("Enter Storage/Media Server Name:") + mediaServerName = stsName + + storagePath := apiUtil.TakeInput("Enter Storage Path:") + + MSDPstorageServer := map[string]interface{}{ + "data": map[string]interface{}{ + "type": "storageServer", + "id": stsName, + "attributes": map[string]interface{}{ + "name":stsName, + "storageCategory":"MSDP", + "mediaServerDetails": map[string]interface{}{ + "name": mediaServerName}, + "msdpAttributes": map[string]interface{}{ + "storagePath": storagePath, + "credentials":map[string]interface{}{ + "userName": "a", + "password": "a"}}}}} + + + + stsRequest, _ := json.Marshal(MSDPstorageServer) + + uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + + request, _ := http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(stsRequest)) + request.Header.Add("Content-Type", contentType); + request.Header.Add("Authorization", jwt); + + response, err := httpClient.Do(request) + + if err != nil { + fmt.Printf("The HTTP request failed with error: %s\n", err) + panic("Unable to create storage server.\n") + } else { + if response.StatusCode != 201 { + responseBody, _ := ioutil.ReadAll(response.Body) + fmt.Printf("%s\n", responseBody) + panic("Unable to create MSDP Sts.\n") + } else { + fmt.Printf("%s created successfully.\n", stsName); + //responseDetails, _ := httputil.DumpResponse(response, true); + apiUtil.AskForResponseDisplay(response.Body) + } + } + + return response.StatusCode, mediaServerName; +} + +//####################################################################### +// Get Replication candidates +//####################################################################### +func GetReplicationCandidates(nbmaster string, httpClient *http.Client, jwt string)(int, string) { + fmt.Printf("\nSending a GET request for replication candidates...\n") + + reader := bufio.NewReader(os.Stdin) + var candidateinx int + var candidateID string + uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + replicationCandidatesUri + + request, _ := http.NewRequest(http.MethodGet, uri, nil) + request.Header.Add("Content-Type", contentType); + request.Header.Add("Authorization", jwt); + + fmt.Println ("Firing request: GET: " + uri) + response, err := httpClient.Do(request) + + if err != nil { + fmt.Printf("The HTTP request failed with error: %s\n", err) + panic("Unable to create storage server.\n") + } else { + if response.StatusCode == 200 { + data, _ := ioutil.ReadAll(response.Body) + var obj interface{} + err := json.Unmarshal(data, &obj) + if(err == nil){ + //responseDetails, _ := httputil.DumpResponse(response, true); + apiUtil.AskForGETResponseDisplay(data) + dataArray := obj.(map[string]interface{}) + var dataObj = dataArray["data"].([]interface{}) + addRepTar := apiUtil.TakeInput("Do you want to add replication target?(Yes/No)") + if strings.Compare(addRepTar, "Yes") == 0 { + for i := 0; i < len(dataObj); i++ { + var indobj = dataObj[i].(map[string]interface{}) + candidateID = indobj["id"].(string) + fmt.Printf("%d. %s\n", i+1, candidateID) + } + fmt.Print("Select index of candidate to add as target: ") + loopCont := true + for ok := true; ok; ok = loopCont { + candInx, _ := reader.ReadString('\n') + candInx = strings.Replace(candInx, "\r\n", "", -1) + candInxInt, err := strconv.Atoi(candInx) + if err != nil || candInxInt > len(dataObj) { + fmt.Print("Invalid indexx. Try again. (0 to exit):") + } else { + loopCont = false + candidateinx = candInxInt + } + } + } + } + } else { + responseBody, _ := ioutil.ReadAll(response.Body) + fmt.Printf("%s\n", responseBody) + panic("Failed to successfully execute get replication candidates API ") + } + } + + return candidateinx, candidateID; +} + + +//####################################################################### +// Add replication target to MSDP Sts +//####################################################################### +func AddReplicationTarget(nbmaster string, httpClient *http.Client, jwt string, stsName string, candId string)(int) { + fmt.Printf("\nSending a POST request to create with defaults...\n") + + //reader := bufio.NewReader(os.Stdin) + IdSlice := strings.Split(candId, ":") + + username := apiUtil.TakeInput("Enter target storage server username:") + password := apiUtil.TakeInput("Enter target storage server password:") + + replicationtarget := map[string]interface{}{ + "data": map[string]interface{}{ + "type": "replicationTargetRequest", + "attributes": map[string]interface{}{ + "targetStorageServerInfo": map[string]interface{}{ + "targetMasterServer": IdSlice[3], + "targetStorageServer": IdSlice[1], + "targetStorageServerType": IdSlice[0], + "targetMediaServer": IdSlice[2]}, + "targetStorageServerCredentials": map[string]interface{}{ + "userName": username, + "password": password}}}} + + + + stsRequest, _ := json.Marshal(replicationtarget) + + uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + "PureDisk:" + stsName + replicationTargetsUri + + request, _ := http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(stsRequest)) + request.Header.Add("Content-Type", contentType); + request.Header.Add("Authorization", jwt); + + fmt.Println ("Firing request: POST: " + uri) + response, err := httpClient.Do(request) + + if err != nil { + fmt.Printf("The HTTP request failed with error: %s\n", err) + panic("Unable to add replication target.\n") + } else { + if response.StatusCode != 201 { + responseBody, _ := ioutil.ReadAll(response.Body) + fmt.Printf("%s\n", responseBody) + panic("Unable to add replication target.\n") + } else { + fmt.Printf("%s created successfully.\n", ""); + //responseDetails, _ := httputil.DumpResponse(response, true); + apiUtil.AskForResponseDisplay(response.Body) + } + } + + return response.StatusCode; +} + + +//####################################################################### +// Get Replication targets +//####################################################################### +func GetReplicationTargets(nbmaster string, httpClient *http.Client, jwt string, stsName string)(int, string) { + fmt.Printf("\nSending a GET request for replication targets...\n") + + reader := bufio.NewReader(os.Stdin) + var candidateinx int + var candidateID string + uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + "PureDisk:" + stsName + replicationTargetsUri + + request, _ := http.NewRequest(http.MethodGet, uri, nil) + request.Header.Add("Content-Type", contentType); + request.Header.Add("Authorization", jwt); + + fmt.Println ("Firing request: GET: " + uri) + response, err := httpClient.Do(request) + + if err != nil { + fmt.Printf("The HTTP request failed with error: %s\n", err) + panic("Unable to create storage server.\n") + } else { + if response.StatusCode == 200 { + data, _ := ioutil.ReadAll(response.Body) + var obj interface{} + err := json.Unmarshal(data, &obj) + if(err == nil){ + dataArray := obj.(map[string]interface{}) + var dataObj = dataArray["data"].([]interface{}) + apiUtil.AskForGETResponseDisplay(data) + delRepTar := apiUtil.TakeInput("Do you want to delete replication target?(Yes/No)") + if strings.Compare(delRepTar, "Yes") == 0 { + for i := 0; i < len(dataObj); i++ { + var indobj = dataObj[i].(map[string]interface{}) + candidateID = indobj["id"].(string) + fmt.Printf("%d. %s\n", i+1, candidateID) + } + fmt.Print("Select index to delete replication target: ") + loopCont := true + for ok := true; ok; ok = loopCont { + candInx, _ := reader.ReadString('\n') + candInx = strings.Replace(candInx, "\r\n", "", -1) + candInxInt, err := strconv.Atoi(candInx) + if err != nil || candInxInt > len(dataObj) { + fmt.Print("InvalidInx. Try again. (0 to exit):") + } else { + loopCont = false + candidateinx = candInxInt + } + } + } + } + } else { + responseBody, _ := ioutil.ReadAll(response.Body) + fmt.Printf("%s\n", responseBody) + panic("Unable to login to the NetBackup webservices") + } + } + return candidateinx, candidateID; +} + + +//####################################################################### +// Delete Replication targets +//####################################################################### +func DeleteReplicationTargets(nbmaster string, httpClient *http.Client, jwt string, stsName string, id string)(int) { + fmt.Printf("\nSending a GET request for replication targets...\n") + + uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + "PureDisk:" + stsName + replicationTargetsUri + "/" + id + + request, _ := http.NewRequest(http.MethodDelete, uri, nil) + request.Header.Add("Content-Type", contentType); + request.Header.Add("Authorization", jwt); + + fmt.Println ("Firing request: DELETE: " + uri) + response, err := httpClient.Do(request) + + if err != nil { + fmt.Printf("The HTTP request failed with error: %s\n", err) + panic("Unable to delete replication target.\n") + } else { + if response.StatusCode == 204 { + fmt.Printf("Replication Target deleted successfully.\n") + } else { + responseBody, _ := ioutil.ReadAll(response.Body) + fmt.Printf("%s\n", responseBody) + panic("Unable to login to the NetBackup webservices") + } + } + return response.StatusCode; +} diff --git a/recipes/powershell/README.md b/recipes/powershell/README.md index b6c8e00..6dc3895 100644 --- a/recipes/powershell/README.md +++ b/recipes/powershell/README.md @@ -9,8 +9,9 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Executing the recipes in PowerShell Pre-requisites: -- NetBackup 8.2 or higher +- NetBackup 8.1.2 or higher - PowerShell 4.0 or higher +- NetBackup 8.2 or higher is required for configuring storage API Use the following commands to run the PowerShell samples. - `.\create_policy_in_one_step.ps1 -nbmaster -username -password [-domainName ] [-domainType ]` diff --git a/recipes/python/README.md b/recipes/python/README.md index 95b7039..3735017 100644 --- a/recipes/python/README.md +++ b/recipes/python/README.md @@ -9,7 +9,7 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Executing the recipes in Python Pre-requisites: -- NetBackup 8.1.2 or higher +- NetBackup 8.2 or higher - python 3.5 or higher - python modules: `requests` diff --git a/snippets/perl/README.md b/snippets/perl/README.md index ad5921c..097bc8f 100644 --- a/snippets/perl/README.md +++ b/snippets/perl/README.md @@ -9,6 +9,7 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Pre-requisites: - NetBackup 8.1.1 or higher +- NetBackup 8.2 or higher is required for configuring storage API - Perl v5.18.2 - Perl modules Text::Table, JSON and LWP From f6a7c2565533ce99a0708724079694dd3383310a Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Wed, 24 Apr 2019 13:57:37 +0530 Subject: [PATCH 04/11] description changes --- .../configure_storage_unit_end_to_end.pl | 6 ++ recipes/python/README.md | 2 +- .../configure_storage_unit_end_to_end.py | 6 ++ snippets/perl/README.md | 65 +--------------- snippets/perl/storageAPI/README.md | 78 +++++++++++++++++++ snippets/perl/storageAPI/delete_disk_pool.pl | 4 +- .../perl/storageAPI/delete_storage_server.pl | 4 +- .../perl/storageAPI/delete_storage_unit.pl | 4 +- snippets/perl/storageAPI/get_disk_pool.pl | 4 +- .../perl/storageAPI/get_disk_pool_by_id.pl | 4 +- .../perl/storageAPI/get_storage_server.pl | 4 +- .../storageAPI/get_storage_server_by_id.pl | 4 +- snippets/perl/storageAPI/get_storage_unit.pl | 4 +- .../perl/storageAPI/get_storage_unit_by_id.pl | 4 +- snippets/perl/storageAPI/patch_disk_pool.pl | 4 +- .../perl/storageAPI/patch_storage_server.pl | 4 +- .../perl/storageAPI/patch_storage_unit.pl | 4 +- snippets/perl/storageAPI/post_disk_pool.pl | 4 +- .../perl/storageAPI/post_storage_server.pl | 4 +- snippets/perl/storageAPI/post_storage_unit.pl | 4 +- 20 files changed, 122 insertions(+), 95 deletions(-) create mode 100644 snippets/perl/storageAPI/README.md diff --git a/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl b/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl index d695e9c..c5a32e0 100644 --- a/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl +++ b/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl @@ -8,6 +8,12 @@ use Getopt::Long qw(GetOptions); use storage; +# This script consists of the helper functions to excute NetBackup APIs to create storage unit. +# 1) Login to Netbackup +# 2) Create storage server +# 3) Create disk Pool +# 4) Create storage unit + # # The token is the key to the NetBackup AuthN/AuthZ scheme. You must login and get a token # and use this token in your Authorization header for all subsequent requests. Token validity diff --git a/recipes/python/README.md b/recipes/python/README.md index 3735017..95b7039 100644 --- a/recipes/python/README.md +++ b/recipes/python/README.md @@ -9,7 +9,7 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Executing the recipes in Python Pre-requisites: -- NetBackup 8.2 or higher +- NetBackup 8.1.2 or higher - python 3.5 or higher - python modules: `requests` diff --git a/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py b/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py index afeee7e..a74e57b 100644 --- a/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py +++ b/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py @@ -3,6 +3,12 @@ import json import texttable as tt +# This script consists of the helper functions to excute NetBackup APIs to create storage unit. +# 1) Login to Netbackup +# 2) Create storage server +# 3) Create disk Pool +# 4) Create storage unit + protocol = "https" nbmaster = "" username = "" diff --git a/snippets/perl/README.md b/snippets/perl/README.md index 097bc8f..06e351e 100644 --- a/snippets/perl/README.md +++ b/snippets/perl/README.md @@ -9,7 +9,6 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Pre-requisites: - NetBackup 8.1.1 or higher -- NetBackup 8.2 or higher is required for configuring storage API - Perl v5.18.2 - Perl modules Text::Table, JSON and LWP @@ -80,66 +79,4 @@ ISO 8601 formatted UTC timestamp. no a subscription associated with this asset. - Example: perl post_nb_asset_cleanup.pl -nbmaster -username -password -filter "workloadType eq 'VMware'" -cleanuptime 2018-06-29T15:58:45.678Z - -Create Storage Server: - -Use the following command to create the storage server on NetBackup Master server: - - perl storageAPI/post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] - -Update Storage Server: - -Use the following command to create the storage server on NetBackup Master server: - - perl storageAPI/patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ] - -Get Storage Server: - -Use the following command to create the storage server on NetBackup Master server: - - perl storageAPI/get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] - -Delete Storage Server: - -Use the following command to create the storage server on NetBackup Master server: - - perl storageAPI/delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ] - -Create Storage unit: - -Use the following command to create the storage unit on NetBackup Master server: - - perl storageAPI/post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] - -Update Storage unit: - -Use the following command to create the storage unit on NetBackup Master server: - - perl storageAPI/patch_storage_unit.pl -nbmaster -username -password -payload -stuname [-domainname ] [-domaintype ] - -Get Storage unit: - -Use the following command to create the storage unit on NetBackup Master server: - - perl storageAPI/get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ] - -Delete Storage Unit: - -Use the following command to create the storage unit on NetBackup Master server: - - perl storageAPI/delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ] - - -Create Disk Pool: - -Use the following command to create the disk pool on NetBackup Master server: - - perl storageAPI/post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ] - -Update Disk pool: - -Use the following command to create the disk pool on NetBackup Master server: - - perl storageAPI/patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ] - -Get Disk Pool: - -Use the following command to create the disk pool on NetBackup Master server: - - perl storageAPI/get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ] - -Delete Disk Pool: - -Use the following command to create the disk pool on NetBackup Master server: - - perl storageAPI/delete_storage_unit.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ] - - + \ No newline at end of file diff --git a/snippets/perl/storageAPI/README.md b/snippets/perl/storageAPI/README.md new file mode 100644 index 0000000..55ee20d --- /dev/null +++ b/snippets/perl/storageAPI/README.md @@ -0,0 +1,78 @@ +### NetBackup API Code Samples for Perl + +This directory contains code samples to invoke NetBackup REST APIs using Perl. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Pre-requisites: + +- NetBackup 8.2 or higher is required for configuring storage API +- Perl v5.18.2 +- Perl modules Text::Table, JSON and LWP + +#### Executing the snippets in Perl + +Create Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] + +Update Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ] + +Get Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] + +Delete Storage Server: + +Use the following command to create the storage server on NetBackup Master server: + - perl delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ] + +Create Storage unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ] + +Update Storage unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl patch_storage_unit.pl -nbmaster -username -password -payload -stuname [-domainname ] [-domaintype ] + +Get Storage unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ] + +Delete Storage Unit: + +Use the following command to create the storage unit on NetBackup Master server: + - perl delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ] + + +Create Disk Pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ] + +Update Disk pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ] + +Get Disk Pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ] + +Delete Disk Pool: + +Use the following command to create the disk pool on NetBackup Master server: + - perl delete_storage_unit.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ] + + diff --git a/snippets/perl/storageAPI/delete_disk_pool.pl b/snippets/perl/storageAPI/delete_disk_pool.pl index 740fe3e..2f89263 100644 --- a/snippets/perl/storageAPI/delete_disk_pool.pl +++ b/snippets/perl/storageAPI/delete_disk_pool.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/delete_disk_pool.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl delete_disk_pool.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/delete_storage_server.pl b/snippets/perl/storageAPI/delete_storage_server.pl index dabbd5c..b3a1e32 100644 --- a/snippets/perl/storageAPI/delete_storage_server.pl +++ b/snippets/perl/storageAPI/delete_storage_server.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/delete_storage_unit.pl b/snippets/perl/storageAPI/delete_storage_unit.pl index cdf67d7..51dbef2 100644 --- a/snippets/perl/storageAPI/delete_storage_unit.pl +++ b/snippets/perl/storageAPI/delete_storage_unit.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/get_disk_pool.pl b/snippets/perl/storageAPI/get_disk_pool.pl index 03c8efc..826403a 100644 --- a/snippets/perl/storageAPI/get_disk_pool.pl +++ b/snippets/perl/storageAPI/get_disk_pool.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/get_disk_pool_by_id.pl b/snippets/perl/storageAPI/get_disk_pool_by_id.pl index 4734e28..7772709 100644 --- a/snippets/perl/storageAPI/get_disk_pool_by_id.pl +++ b/snippets/perl/storageAPI/get_disk_pool_by_id.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/get_disk_pool_by_id.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl get_disk_pool_by_id.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/get_storage_server.pl b/snippets/perl/storageAPI/get_storage_server.pl index c623efa..4cfb637 100644 --- a/snippets/perl/storageAPI/get_storage_server.pl +++ b/snippets/perl/storageAPI/get_storage_server.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/get_storage_server_by_id.pl b/snippets/perl/storageAPI/get_storage_server_by_id.pl index 058dcd0..7a67c75 100644 --- a/snippets/perl/storageAPI/get_storage_server_by_id.pl +++ b/snippets/perl/storageAPI/get_storage_server_by_id.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/get_storage_server_by_id.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl get_storage_server_by_id.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/get_storage_unit.pl b/snippets/perl/storageAPI/get_storage_unit.pl index d119fe8..319fc5c 100644 --- a/snippets/perl/storageAPI/get_storage_unit.pl +++ b/snippets/perl/storageAPI/get_storage_unit.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/get_storage_unit_by_id.pl b/snippets/perl/storageAPI/get_storage_unit_by_id.pl index 5e67ac1..f24a25b 100644 --- a/snippets/perl/storageAPI/get_storage_unit_by_id.pl +++ b/snippets/perl/storageAPI/get_storage_unit_by_id.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/get_storage_unit_by_id.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl get_storage_unit_by_id.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/patch_disk_pool.pl b/snippets/perl/storageAPI/patch_disk_pool.pl index da9bebf..3145ecc 100644 --- a/snippets/perl/storageAPI/patch_disk_pool.pl +++ b/snippets/perl/storageAPI/patch_disk_pool.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/patch_storage_server.pl b/snippets/perl/storageAPI/patch_storage_server.pl index bc88dc5..9f6eba2 100644 --- a/snippets/perl/storageAPI/patch_storage_server.pl +++ b/snippets/perl/storageAPI/patch_storage_server.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/patch_storage_unit.pl b/snippets/perl/storageAPI/patch_storage_unit.pl index 60c9371..9c27dd2 100644 --- a/snippets/perl/storageAPI/patch_storage_unit.pl +++ b/snippets/perl/storageAPI/patch_storage_unit.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/patch_storage_unit.pl -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl patch_storage_unit.pl -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/post_disk_pool.pl b/snippets/perl/storageAPI/post_disk_pool.pl index 7d33368..6c306f8 100644 --- a/snippets/perl/storageAPI/post_disk_pool.pl +++ b/snippets/perl/storageAPI/post_disk_pool.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/post_storage_server.pl b/snippets/perl/storageAPI/post_storage_server.pl index c82b5ab..627c7f3 100644 --- a/snippets/perl/storageAPI/post_storage_server.pl +++ b/snippets/perl/storageAPI/post_storage_server.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; die; } diff --git a/snippets/perl/storageAPI/post_storage_unit.pl b/snippets/perl/storageAPI/post_storage_unit.pl index 1a7b6c3..f9beecc 100644 --- a/snippets/perl/storageAPI/post_storage_unit.pl +++ b/snippets/perl/storageAPI/post_storage_unit.pl @@ -1,11 +1,11 @@ #Load module netbackup.pm from current directory -use lib"."; +use lib"../."; use gateway; use storage; use Getopt::Long qw(GetOptions); sub printUsage { - print "\nUsage : perl storageAPI/post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; + print "\nUsage : perl post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; die; } From ee7bb3631109e51e23dc8d1c5de15b6eb1174e8f Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 11 Jul 2019 15:42:29 +0530 Subject: [PATCH 05/11] review comments --- snippets/perl/storageAPI/delete_disk_pool.pl | 2 +- snippets/perl/storageAPI/delete_storage_server.pl | 2 +- snippets/perl/storageAPI/delete_storage_unit.pl | 2 +- snippets/perl/storageAPI/get_disk_pool.pl | 2 +- snippets/perl/storageAPI/get_disk_pool_by_id.pl | 2 +- snippets/perl/storageAPI/get_storage_server.pl | 2 +- snippets/perl/storageAPI/get_storage_server_by_id.pl | 2 +- snippets/perl/storageAPI/get_storage_unit.pl | 4 ++-- snippets/perl/storageAPI/get_storage_unit_by_id.pl | 2 +- snippets/perl/storageAPI/patch_disk_pool.pl | 2 +- snippets/perl/storageAPI/patch_storage_server.pl | 2 +- snippets/perl/storageAPI/patch_storage_unit.pl | 2 +- snippets/perl/storageAPI/post_disk_pool.pl | 2 +- snippets/perl/storageAPI/post_storage_server.pl | 2 +- snippets/perl/storageAPI/post_storage_unit.pl | 2 +- snippets/perl/{ => storageAPI}/storage.pm | 0 16 files changed, 16 insertions(+), 16 deletions(-) rename snippets/perl/{ => storageAPI}/storage.pm (100%) diff --git a/snippets/perl/storageAPI/delete_disk_pool.pl b/snippets/perl/storageAPI/delete_disk_pool.pl index 2f89263..6f283eb 100644 --- a/snippets/perl/storageAPI/delete_disk_pool.pl +++ b/snippets/perl/storageAPI/delete_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl delete_disk_pool.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/delete_storage_server.pl b/snippets/perl/storageAPI/delete_storage_server.pl index b3a1e32..9f6bb98 100644 --- a/snippets/perl/storageAPI/delete_storage_server.pl +++ b/snippets/perl/storageAPI/delete_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/delete_storage_unit.pl b/snippets/perl/storageAPI/delete_storage_unit.pl index 51dbef2..e2d4eab 100644 --- a/snippets/perl/storageAPI/delete_storage_unit.pl +++ b/snippets/perl/storageAPI/delete_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_disk_pool.pl b/snippets/perl/storageAPI/get_disk_pool.pl index 826403a..6a8ffb2 100644 --- a/snippets/perl/storageAPI/get_disk_pool.pl +++ b/snippets/perl/storageAPI/get_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_disk_pool_by_id.pl b/snippets/perl/storageAPI/get_disk_pool_by_id.pl index 7772709..c387e20 100644 --- a/snippets/perl/storageAPI/get_disk_pool_by_id.pl +++ b/snippets/perl/storageAPI/get_disk_pool_by_id.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_disk_pool_by_id.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_server.pl b/snippets/perl/storageAPI/get_storage_server.pl index 4cfb637..af185e8 100644 --- a/snippets/perl/storageAPI/get_storage_server.pl +++ b/snippets/perl/storageAPI/get_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_server_by_id.pl b/snippets/perl/storageAPI/get_storage_server_by_id.pl index 7a67c75..0a864c1 100644 --- a/snippets/perl/storageAPI/get_storage_server_by_id.pl +++ b/snippets/perl/storageAPI/get_storage_server_by_id.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_server_by_id.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_unit.pl b/snippets/perl/storageAPI/get_storage_unit.pl index 319fc5c..93c95e1 100644 --- a/snippets/perl/storageAPI/get_storage_unit.pl +++ b/snippets/perl/storageAPI/get_storage_unit.pl @@ -1,8 +1,8 @@ #Load module netbackup.pm from current directory -use lib"../."; +use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_unit_by_id.pl b/snippets/perl/storageAPI/get_storage_unit_by_id.pl index f24a25b..ec35c19 100644 --- a/snippets/perl/storageAPI/get_storage_unit_by_id.pl +++ b/snippets/perl/storageAPI/get_storage_unit_by_id.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_unit_by_id.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/patch_disk_pool.pl b/snippets/perl/storageAPI/patch_disk_pool.pl index 3145ecc..62b078d 100644 --- a/snippets/perl/storageAPI/patch_disk_pool.pl +++ b/snippets/perl/storageAPI/patch_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/patch_storage_server.pl b/snippets/perl/storageAPI/patch_storage_server.pl index 9f6eba2..393118e 100644 --- a/snippets/perl/storageAPI/patch_storage_server.pl +++ b/snippets/perl/storageAPI/patch_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/patch_storage_unit.pl b/snippets/perl/storageAPI/patch_storage_unit.pl index 9c27dd2..13ba57a 100644 --- a/snippets/perl/storageAPI/patch_storage_unit.pl +++ b/snippets/perl/storageAPI/patch_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl patch_storage_unit.pl -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/post_disk_pool.pl b/snippets/perl/storageAPI/post_disk_pool.pl index 6c306f8..2ecbef8 100644 --- a/snippets/perl/storageAPI/post_disk_pool.pl +++ b/snippets/perl/storageAPI/post_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/post_storage_server.pl b/snippets/perl/storageAPI/post_storage_server.pl index 627c7f3..87e1629 100644 --- a/snippets/perl/storageAPI/post_storage_server.pl +++ b/snippets/perl/storageAPI/post_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/post_storage_unit.pl b/snippets/perl/storageAPI/post_storage_unit.pl index f9beecc..59f271f 100644 --- a/snippets/perl/storageAPI/post_storage_unit.pl +++ b/snippets/perl/storageAPI/post_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storage; +use storageAPI::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storage.pm b/snippets/perl/storageAPI/storage.pm similarity index 100% rename from snippets/perl/storage.pm rename to snippets/perl/storageAPI/storage.pm From e5bab33ecad6a7a177c3ff10f84e505d794e05e3 Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 11 Jul 2019 17:42:49 +0530 Subject: [PATCH 06/11] removed go scripts from this PR --- recipes/go/AIRAPIs/AIRAPIs.go | 70 ---- recipes/go/ApiUtil/ApiUtil.go | 64 ---- recipes/go/StorageHelper/StorageHelper.go | 381 ---------------------- 3 files changed, 515 deletions(-) delete mode 100644 recipes/go/AIRAPIs/AIRAPIs.go delete mode 100644 recipes/go/ApiUtil/ApiUtil.go delete mode 100644 recipes/go/StorageHelper/StorageHelper.go diff --git a/recipes/go/AIRAPIs/AIRAPIs.go b/recipes/go/AIRAPIs/AIRAPIs.go deleted file mode 100644 index deac305..0000000 --- a/recipes/go/AIRAPIs/AIRAPIs.go +++ /dev/null @@ -1,70 +0,0 @@ -//This script can be run using NetBackup 8.2 and higher. - -package main - -import ( - "flag" - "fmt" - "log" - "os" - "storageHelper" -) - -//################### -// Global Variables -//################### -var ( - nbmaster = flag.String("nbmaster", "", "NetBackup Master Server") - username = flag.String("username", "", "User name to log into the NetBackup webservices") - password = flag.String("password", "", "Password for the given user") - domainName = flag.String("domainName", "", "Domain name of the given user") - domainType = flag.String("domainType", "", "Domain type of the given user") -) - -const usage = "\n\nUsage: go run ./AIRAPIs.go -nbmaster -username -password [-domainName ] [-domainType ]\n\n" - -func main() { - // Print usage - flag.Usage = func() { - fmt.Fprintf(os.Stderr, usage) - os.Exit(1) - } - - // Read command line arguments - flag.Parse() - - if len(*nbmaster) == 0 { - log.Fatalf("Please specify the name of the NetBackup Master Server using the -nbmaster parameter.\n") - } - if len(*username) == 0 { - log.Fatalf("Please specify the username using the -username parameter.\n") - } - if len(*password) == 0 { - log.Fatalf("Please specify the password using the -password parameter.\n") - } - - httpClient := storageHelper.GetHTTPClient() - jwt := storageHelper.Login(*nbmaster, httpClient, *username, *password, *domainName, *domainType) - - status, stsName := storageHelper.CreateMSDPStorageServer(*nbmaster, httpClient, jwt) - if( status != 201){ - panic("CreateMSDPStorageServer Failed. Exiting.\n") - } - - candInx, candId := storageHelper.GetReplicationCandidates(*nbmaster, httpClient, jwt) - if ( candInx == 0 ) { - fmt.Println("Exiting") - os.Exit(0) - } - - if ( storageHelper.AddReplicationTarget(*nbmaster, httpClient, jwt, stsName, candId) != 201 ) { - panic("AddReplicationTarget Failed. Exiting.\n") - } - - tarInx, tarId := storageHelper.GetReplicationTargets(*nbmaster, httpClient, jwt, stsName) - if ( tarInx == 0 ) { - fmt.Println("Exiting") - os.Exit(0) - } - storageHelper.DeleteReplicationTargets(*nbmaster, httpClient, jwt, stsName, tarId) -} diff --git a/recipes/go/ApiUtil/ApiUtil.go b/recipes/go/ApiUtil/ApiUtil.go deleted file mode 100644 index fde81cc..0000000 --- a/recipes/go/ApiUtil/ApiUtil.go +++ /dev/null @@ -1,64 +0,0 @@ -//This script consists of the helper functions to excute NetBackup APIs to assist in policy CRUD operations - -// 1. Get the HTTP client to perform API requests -// 2. Login to the NetBackup webservices -// 3. Create a policy with default values for the policy attributes -// 4. Create a policy with specific values for the policy attributes, schedules, clients, and backup selection -// 5. Read a policy -// 6. List all policies -// 7. Add/Update a schedule -// 8. Delete a schedule -// 9. Add/Update a client -// 10. Delete a client -// 11. Add/Update backup selection -// 12. Delete a policy - -package apiUtil - -import ( - "bufio" - "os" - "strings" - "io" - "fmt" - "bytes" -) - -func TakeInput(displayStr string)(string) { - - reader := bufio.NewReader(os.Stdin) - fmt.Print(displayStr) - output, _ := reader.ReadString('\n') - // convert CRLF to LF - output = strings.Replace(output, "\r\n", "", -1) - output = strings.Replace(output, "\n", "", -1) - return output -} - -func AskForResponseDisplay(response io.ReadCloser) { - if strings.Compare(TakeInput("Show response? (Yes/No)"), "Yes") == 0 { - buf := new(bytes.Buffer) - buf.ReadFrom(response) - responseStr := buf.String() - responseStr = strings.Replace(responseStr, "}", "}\r\n", -1) - responseStr = strings.Replace(responseStr, ",", ",\r\n", -1) - responseStr = strings.Replace(responseStr, "]", "]\r\n", -1) - - fmt.Print(responseStr) - } else { - fmt.Println("Response is not Yes!!") - } -} - -func AskForGETResponseDisplay(response []byte) { - if strings.Compare(TakeInput("Show response? (Yes/No)"), "Yes") == 0 { - responseStr := string(response) - responseStr = strings.Replace(responseStr, "}", "}\r\n", -1) - responseStr = strings.Replace(responseStr, ",", ",\r\n", -1) - responseStr = strings.Replace(responseStr, "]", "]\r\n", -1) - - fmt.Print(responseStr) - } else { - fmt.Println("Response is not Yes!!") - } -} \ No newline at end of file diff --git a/recipes/go/StorageHelper/StorageHelper.go b/recipes/go/StorageHelper/StorageHelper.go deleted file mode 100644 index 1e25a6c..0000000 --- a/recipes/go/StorageHelper/StorageHelper.go +++ /dev/null @@ -1,381 +0,0 @@ -//This script consists of the helper functions to excute NetBackup APIs to assist in Air operation for MSDP sts - -// 1. Get the HTTP client to perform API requests -// 2. Login to the NetBackup webservices -// 3. Create MSDP storage server -// 4. Get Replication candidates -// 5. Add Replication target -// 6. Get Replication targets -// 7. Delete Replication target - -package storageHelper - -import ( - "bufio" - "os" - "strings" - "bytes" - "crypto/tls" - "encoding/json" - "fmt" - "io/ioutil" - "net/http" - "strconv" - "apiUtil" -) - -type Data struct { - id string `json:"id"` - apiType string `json:"type"` - attr interface{} `json:"attributes"` -} - -type DataArray struct { - dataList []Data `json:"data"` -} - - -//################### -// Global Variables -//################### - -var mediaServerName string -const ( - port = "1556" - storageUri = "storage/" - storageServerUri = "storage-servers/" - storageUnitUri = "storage-units" - contentType = "application/vnd.netbackup+json;version=3.0" - replicationTargetsUri = "/replication-targets" - replicationCandidatesUri = "/target-storage-servers" -) - -//############################################################## -// Setup the HTTP client to make NetBackup Storage API requests -//############################################################## -func GetHTTPClient() *http.Client { - tlsConfig := &tls.Config { - InsecureSkipVerify: true, //for this test, ignore ssl certificate - } - - tr := &http.Transport{TLSClientConfig: tlsConfig} - client := &http.Client{Transport: tr} - - return client -} - -//##################################### -// Login to the NetBackup webservices -//##################################### -func Login(nbmaster string, httpClient *http.Client, username string, password string, domainName string, domainType string) string { - fmt.Printf("\nLogin to the NetBackup webservices...\n") - - loginDetails := map[string]string{"userName": username, "password": password} - if len(domainName) > 0 { - loginDetails["domainName"] = domainName - } - if len(domainType) > 0 { - loginDetails["domainType"] = domainType - } - loginRequest, _ := json.Marshal(loginDetails) - - uri := "https://" + nbmaster + ":" + port + "/netbackup/login" - - request, _ := http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(loginRequest)) - request.Header.Add("Content-Type", contentType); - - response, err := httpClient.Do(request) - - token := "" - if err != nil { - fmt.Printf("The HTTP request failed with error: %s\n", err) - panic("Unable to login to the NetBackup webservices") - } else { - if response.StatusCode == 201 { - data, _ := ioutil.ReadAll(response.Body) - var obj interface{} - json.Unmarshal(data, &obj) - loginResponse := obj.(map[string]interface{}) - token = loginResponse["token"].(string) - } else { - responseBody, _ := ioutil.ReadAll(response.Body) - fmt.Printf("%s\n", responseBody) - panic("Unable to login to the NetBackup webservices") - } - } - - return token -} - -//####################################################################### -// Create a MSDP Storage server -//####################################################################### -func CreateMSDPStorageServer(nbmaster string, httpClient *http.Client, jwt string)(int, string) { - fmt.Printf("\nSending a POST request to create with defaults...\n") - if strings.Compare(apiUtil.TakeInput("Want to create new MSDP storage server?(Or you can use existing)(Yes/No):"), "Yes") != 0 { - stsName := apiUtil.TakeInput("Enter MSDP/CloudCatalyst Storage Server Name for other operations:") - return 201, stsName; - } - - stsName := apiUtil.TakeInput("Enter Storage/Media Server Name:") - mediaServerName = stsName - - storagePath := apiUtil.TakeInput("Enter Storage Path:") - - MSDPstorageServer := map[string]interface{}{ - "data": map[string]interface{}{ - "type": "storageServer", - "id": stsName, - "attributes": map[string]interface{}{ - "name":stsName, - "storageCategory":"MSDP", - "mediaServerDetails": map[string]interface{}{ - "name": mediaServerName}, - "msdpAttributes": map[string]interface{}{ - "storagePath": storagePath, - "credentials":map[string]interface{}{ - "userName": "a", - "password": "a"}}}}} - - - - stsRequest, _ := json.Marshal(MSDPstorageServer) - - uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri - - request, _ := http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(stsRequest)) - request.Header.Add("Content-Type", contentType); - request.Header.Add("Authorization", jwt); - - response, err := httpClient.Do(request) - - if err != nil { - fmt.Printf("The HTTP request failed with error: %s\n", err) - panic("Unable to create storage server.\n") - } else { - if response.StatusCode != 201 { - responseBody, _ := ioutil.ReadAll(response.Body) - fmt.Printf("%s\n", responseBody) - panic("Unable to create MSDP Sts.\n") - } else { - fmt.Printf("%s created successfully.\n", stsName); - //responseDetails, _ := httputil.DumpResponse(response, true); - apiUtil.AskForResponseDisplay(response.Body) - } - } - - return response.StatusCode, mediaServerName; -} - -//####################################################################### -// Get Replication candidates -//####################################################################### -func GetReplicationCandidates(nbmaster string, httpClient *http.Client, jwt string)(int, string) { - fmt.Printf("\nSending a GET request for replication candidates...\n") - - reader := bufio.NewReader(os.Stdin) - var candidateinx int - var candidateID string - uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + replicationCandidatesUri - - request, _ := http.NewRequest(http.MethodGet, uri, nil) - request.Header.Add("Content-Type", contentType); - request.Header.Add("Authorization", jwt); - - fmt.Println ("Firing request: GET: " + uri) - response, err := httpClient.Do(request) - - if err != nil { - fmt.Printf("The HTTP request failed with error: %s\n", err) - panic("Unable to create storage server.\n") - } else { - if response.StatusCode == 200 { - data, _ := ioutil.ReadAll(response.Body) - var obj interface{} - err := json.Unmarshal(data, &obj) - if(err == nil){ - //responseDetails, _ := httputil.DumpResponse(response, true); - apiUtil.AskForGETResponseDisplay(data) - dataArray := obj.(map[string]interface{}) - var dataObj = dataArray["data"].([]interface{}) - addRepTar := apiUtil.TakeInput("Do you want to add replication target?(Yes/No)") - if strings.Compare(addRepTar, "Yes") == 0 { - for i := 0; i < len(dataObj); i++ { - var indobj = dataObj[i].(map[string]interface{}) - candidateID = indobj["id"].(string) - fmt.Printf("%d. %s\n", i+1, candidateID) - } - fmt.Print("Select index of candidate to add as target: ") - loopCont := true - for ok := true; ok; ok = loopCont { - candInx, _ := reader.ReadString('\n') - candInx = strings.Replace(candInx, "\r\n", "", -1) - candInxInt, err := strconv.Atoi(candInx) - if err != nil || candInxInt > len(dataObj) { - fmt.Print("Invalid indexx. Try again. (0 to exit):") - } else { - loopCont = false - candidateinx = candInxInt - } - } - } - } - } else { - responseBody, _ := ioutil.ReadAll(response.Body) - fmt.Printf("%s\n", responseBody) - panic("Failed to successfully execute get replication candidates API ") - } - } - - return candidateinx, candidateID; -} - - -//####################################################################### -// Add replication target to MSDP Sts -//####################################################################### -func AddReplicationTarget(nbmaster string, httpClient *http.Client, jwt string, stsName string, candId string)(int) { - fmt.Printf("\nSending a POST request to create with defaults...\n") - - //reader := bufio.NewReader(os.Stdin) - IdSlice := strings.Split(candId, ":") - - username := apiUtil.TakeInput("Enter target storage server username:") - password := apiUtil.TakeInput("Enter target storage server password:") - - replicationtarget := map[string]interface{}{ - "data": map[string]interface{}{ - "type": "replicationTargetRequest", - "attributes": map[string]interface{}{ - "targetStorageServerInfo": map[string]interface{}{ - "targetMasterServer": IdSlice[3], - "targetStorageServer": IdSlice[1], - "targetStorageServerType": IdSlice[0], - "targetMediaServer": IdSlice[2]}, - "targetStorageServerCredentials": map[string]interface{}{ - "userName": username, - "password": password}}}} - - - - stsRequest, _ := json.Marshal(replicationtarget) - - uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + "PureDisk:" + stsName + replicationTargetsUri - - request, _ := http.NewRequest(http.MethodPost, uri, bytes.NewBuffer(stsRequest)) - request.Header.Add("Content-Type", contentType); - request.Header.Add("Authorization", jwt); - - fmt.Println ("Firing request: POST: " + uri) - response, err := httpClient.Do(request) - - if err != nil { - fmt.Printf("The HTTP request failed with error: %s\n", err) - panic("Unable to add replication target.\n") - } else { - if response.StatusCode != 201 { - responseBody, _ := ioutil.ReadAll(response.Body) - fmt.Printf("%s\n", responseBody) - panic("Unable to add replication target.\n") - } else { - fmt.Printf("%s created successfully.\n", ""); - //responseDetails, _ := httputil.DumpResponse(response, true); - apiUtil.AskForResponseDisplay(response.Body) - } - } - - return response.StatusCode; -} - - -//####################################################################### -// Get Replication targets -//####################################################################### -func GetReplicationTargets(nbmaster string, httpClient *http.Client, jwt string, stsName string)(int, string) { - fmt.Printf("\nSending a GET request for replication targets...\n") - - reader := bufio.NewReader(os.Stdin) - var candidateinx int - var candidateID string - uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + "PureDisk:" + stsName + replicationTargetsUri - - request, _ := http.NewRequest(http.MethodGet, uri, nil) - request.Header.Add("Content-Type", contentType); - request.Header.Add("Authorization", jwt); - - fmt.Println ("Firing request: GET: " + uri) - response, err := httpClient.Do(request) - - if err != nil { - fmt.Printf("The HTTP request failed with error: %s\n", err) - panic("Unable to create storage server.\n") - } else { - if response.StatusCode == 200 { - data, _ := ioutil.ReadAll(response.Body) - var obj interface{} - err := json.Unmarshal(data, &obj) - if(err == nil){ - dataArray := obj.(map[string]interface{}) - var dataObj = dataArray["data"].([]interface{}) - apiUtil.AskForGETResponseDisplay(data) - delRepTar := apiUtil.TakeInput("Do you want to delete replication target?(Yes/No)") - if strings.Compare(delRepTar, "Yes") == 0 { - for i := 0; i < len(dataObj); i++ { - var indobj = dataObj[i].(map[string]interface{}) - candidateID = indobj["id"].(string) - fmt.Printf("%d. %s\n", i+1, candidateID) - } - fmt.Print("Select index to delete replication target: ") - loopCont := true - for ok := true; ok; ok = loopCont { - candInx, _ := reader.ReadString('\n') - candInx = strings.Replace(candInx, "\r\n", "", -1) - candInxInt, err := strconv.Atoi(candInx) - if err != nil || candInxInt > len(dataObj) { - fmt.Print("InvalidInx. Try again. (0 to exit):") - } else { - loopCont = false - candidateinx = candInxInt - } - } - } - } - } else { - responseBody, _ := ioutil.ReadAll(response.Body) - fmt.Printf("%s\n", responseBody) - panic("Unable to login to the NetBackup webservices") - } - } - return candidateinx, candidateID; -} - - -//####################################################################### -// Delete Replication targets -//####################################################################### -func DeleteReplicationTargets(nbmaster string, httpClient *http.Client, jwt string, stsName string, id string)(int) { - fmt.Printf("\nSending a GET request for replication targets...\n") - - uri := "https://" + nbmaster + ":" + port + "/netbackup/" + storageUri + storageServerUri + "PureDisk:" + stsName + replicationTargetsUri + "/" + id - - request, _ := http.NewRequest(http.MethodDelete, uri, nil) - request.Header.Add("Content-Type", contentType); - request.Header.Add("Authorization", jwt); - - fmt.Println ("Firing request: DELETE: " + uri) - response, err := httpClient.Do(request) - - if err != nil { - fmt.Printf("The HTTP request failed with error: %s\n", err) - panic("Unable to delete replication target.\n") - } else { - if response.StatusCode == 204 { - fmt.Printf("Replication Target deleted successfully.\n") - } else { - responseBody, _ := ioutil.ReadAll(response.Body) - fmt.Printf("%s\n", responseBody) - panic("Unable to login to the NetBackup webservices") - } - } - return response.StatusCode; -} From 642b33b1d2d281b9f7d8485b594f3c0af963555a Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 11 Jul 2019 18:39:55 +0530 Subject: [PATCH 07/11] renaming folder names from storageAPI to storage --- recipes/perl/{storageAPI => storage}/README.md | 0 .../configure_storage_unit_end_to_end.pl | 0 recipes/perl/{storageAPI => storage}/storage.pm | 0 recipes/python/{stoargeAPI => storage}/README.md | 0 .../configure_storage_unit_end_to_end.py | 0 recipes/python/{stoargeAPI => storage}/storage.py | 0 snippets/perl/{storageAPI => storage}/README.md | 0 snippets/perl/{storageAPI => storage}/delete_disk_pool.pl | 2 +- snippets/perl/{storageAPI => storage}/delete_storage_server.pl | 2 +- snippets/perl/{storageAPI => storage}/delete_storage_unit.pl | 2 +- snippets/perl/{storageAPI => storage}/get_disk_pool.pl | 2 +- snippets/perl/{storageAPI => storage}/get_disk_pool_by_id.pl | 2 +- snippets/perl/{storageAPI => storage}/get_storage_server.pl | 2 +- .../perl/{storageAPI => storage}/get_storage_server_by_id.pl | 2 +- snippets/perl/{storageAPI => storage}/get_storage_unit.pl | 2 +- snippets/perl/{storageAPI => storage}/get_storage_unit_by_id.pl | 2 +- snippets/perl/{storageAPI => storage}/patch_disk_pool.pl | 2 +- snippets/perl/{storageAPI => storage}/patch_storage_server.pl | 2 +- snippets/perl/{storageAPI => storage}/patch_storage_unit.pl | 2 +- snippets/perl/{storageAPI => storage}/post_disk_pool.pl | 2 +- snippets/perl/{storageAPI => storage}/post_storage_server.pl | 2 +- snippets/perl/{storageAPI => storage}/post_storage_unit.pl | 2 +- snippets/perl/{storageAPI => storage}/storage.pm | 0 .../{storageAPI => storage}/Delete-NB-delete-disk-pool.ps1 | 0 .../{storageAPI => storage}/Delete-NB-delete-storage-server.ps1 | 0 .../{storageAPI => storage}/Delete-NB-delete-storage-unit.ps1 | 0 .../{storageAPI => storage}/Get-NB-get-disk-pool-by-id.ps1 | 0 .../powershell/{storageAPI => storage}/Get-NB-get-disk-pool.ps1 | 0 .../{storageAPI => storage}/Get-NB-get-storage-server-by-id.ps1 | 0 .../{storageAPI => storage}/Get-NB-get-storage-server.ps1 | 0 .../{storageAPI => storage}/Get-NB-get-storage-unit-by-id.ps1 | 0 .../{storageAPI => storage}/Get-NB-get-storage-unit.ps1 | 0 .../Patch-NB-update-ad-storage-server.ps1 | 0 .../Patch-NB-update-cloud-storage-server.ps1 | 0 .../{storageAPI => storage}/Patch-NB-update-disk-pool.ps1 | 0 .../Patch-NB-update-msdp-storage-server.ps1 | 0 .../{storageAPI => storage}/Patch-NB-update-storage-unit.ps1 | 0 .../{storageAPI => storage}/Post-NB-create-ad-disk-pool.ps1 | 0 .../Post-NB-create-ad-storage-server.ps1 | 0 .../{storageAPI => storage}/Post-NB-create-ad-storage-unit.ps1 | 0 .../{storageAPI => storage}/Post-NB-create-cloud-disk-pool.ps1 | 0 .../Post-NB-create-cloud-storage-server.ps1 | 0 .../Post-NB-create-cloud-storage-unit.ps1 | 0 .../{storageAPI => storage}/Post-NB-create-msdp-disk-pool.ps1 | 0 .../Post-NB-create-msdp-storage-server.ps1 | 0 .../Post-NB-create-msdp-storage-unit.ps1 | 0 snippets/powershell/{storageAPI => storage}/README.md | 0 snippets/python/{storageAPI => storage}/README.md | 0 snippets/python/{storageAPI => storage}/create_disk_pool.py | 0 .../python/{storageAPI => storage}/create_storage_server.py | 0 snippets/python/{storageAPI => storage}/create_storage_unit.py | 0 snippets/python/{storageAPI => storage}/delete_disk_pool.py | 0 .../python/{storageAPI => storage}/delete_storage_server.py | 0 snippets/python/{storageAPI => storage}/delete_storage_unit.py | 0 snippets/python/{storageAPI => storage}/get_disk_pool.py | 0 snippets/python/{storageAPI => storage}/get_disk_pool_by_id.py | 0 snippets/python/{storageAPI => storage}/get_storage_server.py | 0 .../python/{storageAPI => storage}/get_storage_server_by_id.py | 0 snippets/python/{storageAPI => storage}/get_storage_unit.py | 0 .../python/{storageAPI => storage}/get_storage_unit_by_id.py | 0 snippets/python/{storageAPI => storage}/patch_disk_pool.py | 0 snippets/python/{storageAPI => storage}/patch_storage_server.py | 0 snippets/python/{storageAPI => storage}/patch_storage_unit.py | 0 snippets/python/{storageAPI => storage}/storage.py | 0 64 files changed, 15 insertions(+), 15 deletions(-) rename recipes/perl/{storageAPI => storage}/README.md (100%) rename recipes/perl/{storageAPI => storage}/configure_storage_unit_end_to_end.pl (100%) rename recipes/perl/{storageAPI => storage}/storage.pm (100%) rename recipes/python/{stoargeAPI => storage}/README.md (100%) rename recipes/python/{stoargeAPI => storage}/configure_storage_unit_end_to_end.py (100%) rename recipes/python/{stoargeAPI => storage}/storage.py (100%) rename snippets/perl/{storageAPI => storage}/README.md (100%) rename snippets/perl/{storageAPI => storage}/delete_disk_pool.pl (97%) rename snippets/perl/{storageAPI => storage}/delete_storage_server.pl (97%) rename snippets/perl/{storageAPI => storage}/delete_storage_unit.pl (97%) rename snippets/perl/{storageAPI => storage}/get_disk_pool.pl (97%) rename snippets/perl/{storageAPI => storage}/get_disk_pool_by_id.pl (97%) rename snippets/perl/{storageAPI => storage}/get_storage_server.pl (97%) rename snippets/perl/{storageAPI => storage}/get_storage_server_by_id.pl (97%) rename snippets/perl/{storageAPI => storage}/get_storage_unit.pl (97%) rename snippets/perl/{storageAPI => storage}/get_storage_unit_by_id.pl (97%) rename snippets/perl/{storageAPI => storage}/patch_disk_pool.pl (97%) rename snippets/perl/{storageAPI => storage}/patch_storage_server.pl (97%) rename snippets/perl/{storageAPI => storage}/patch_storage_unit.pl (97%) rename snippets/perl/{storageAPI => storage}/post_disk_pool.pl (97%) rename snippets/perl/{storageAPI => storage}/post_storage_server.pl (97%) rename snippets/perl/{storageAPI => storage}/post_storage_unit.pl (97%) rename snippets/perl/{storageAPI => storage}/storage.pm (100%) rename snippets/powershell/{storageAPI => storage}/Delete-NB-delete-disk-pool.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Delete-NB-delete-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Delete-NB-delete-storage-unit.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Get-NB-get-disk-pool-by-id.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Get-NB-get-disk-pool.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Get-NB-get-storage-server-by-id.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Get-NB-get-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Get-NB-get-storage-unit-by-id.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Get-NB-get-storage-unit.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Patch-NB-update-ad-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Patch-NB-update-cloud-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Patch-NB-update-disk-pool.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Patch-NB-update-msdp-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Patch-NB-update-storage-unit.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-ad-disk-pool.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-ad-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-ad-storage-unit.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-cloud-disk-pool.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-cloud-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-cloud-storage-unit.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-msdp-disk-pool.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-msdp-storage-server.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/Post-NB-create-msdp-storage-unit.ps1 (100%) rename snippets/powershell/{storageAPI => storage}/README.md (100%) rename snippets/python/{storageAPI => storage}/README.md (100%) rename snippets/python/{storageAPI => storage}/create_disk_pool.py (100%) rename snippets/python/{storageAPI => storage}/create_storage_server.py (100%) rename snippets/python/{storageAPI => storage}/create_storage_unit.py (100%) rename snippets/python/{storageAPI => storage}/delete_disk_pool.py (100%) rename snippets/python/{storageAPI => storage}/delete_storage_server.py (100%) rename snippets/python/{storageAPI => storage}/delete_storage_unit.py (100%) rename snippets/python/{storageAPI => storage}/get_disk_pool.py (100%) rename snippets/python/{storageAPI => storage}/get_disk_pool_by_id.py (100%) rename snippets/python/{storageAPI => storage}/get_storage_server.py (100%) rename snippets/python/{storageAPI => storage}/get_storage_server_by_id.py (100%) rename snippets/python/{storageAPI => storage}/get_storage_unit.py (100%) rename snippets/python/{storageAPI => storage}/get_storage_unit_by_id.py (100%) rename snippets/python/{storageAPI => storage}/patch_disk_pool.py (100%) rename snippets/python/{storageAPI => storage}/patch_storage_server.py (100%) rename snippets/python/{storageAPI => storage}/patch_storage_unit.py (100%) rename snippets/python/{storageAPI => storage}/storage.py (100%) diff --git a/recipes/perl/storageAPI/README.md b/recipes/perl/storage/README.md similarity index 100% rename from recipes/perl/storageAPI/README.md rename to recipes/perl/storage/README.md diff --git a/recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl b/recipes/perl/storage/configure_storage_unit_end_to_end.pl similarity index 100% rename from recipes/perl/storageAPI/configure_storage_unit_end_to_end.pl rename to recipes/perl/storage/configure_storage_unit_end_to_end.pl diff --git a/recipes/perl/storageAPI/storage.pm b/recipes/perl/storage/storage.pm similarity index 100% rename from recipes/perl/storageAPI/storage.pm rename to recipes/perl/storage/storage.pm diff --git a/recipes/python/stoargeAPI/README.md b/recipes/python/storage/README.md similarity index 100% rename from recipes/python/stoargeAPI/README.md rename to recipes/python/storage/README.md diff --git a/recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py b/recipes/python/storage/configure_storage_unit_end_to_end.py similarity index 100% rename from recipes/python/stoargeAPI/configure_storage_unit_end_to_end.py rename to recipes/python/storage/configure_storage_unit_end_to_end.py diff --git a/recipes/python/stoargeAPI/storage.py b/recipes/python/storage/storage.py similarity index 100% rename from recipes/python/stoargeAPI/storage.py rename to recipes/python/storage/storage.py diff --git a/snippets/perl/storageAPI/README.md b/snippets/perl/storage/README.md similarity index 100% rename from snippets/perl/storageAPI/README.md rename to snippets/perl/storage/README.md diff --git a/snippets/perl/storageAPI/delete_disk_pool.pl b/snippets/perl/storage/delete_disk_pool.pl similarity index 97% rename from snippets/perl/storageAPI/delete_disk_pool.pl rename to snippets/perl/storage/delete_disk_pool.pl index 6f283eb..f1217d1 100644 --- a/snippets/perl/storageAPI/delete_disk_pool.pl +++ b/snippets/perl/storage/delete_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl delete_disk_pool.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/delete_storage_server.pl b/snippets/perl/storage/delete_storage_server.pl similarity index 97% rename from snippets/perl/storageAPI/delete_storage_server.pl rename to snippets/perl/storage/delete_storage_server.pl index 9f6bb98..9467332 100644 --- a/snippets/perl/storageAPI/delete_storage_server.pl +++ b/snippets/perl/storage/delete_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl delete_storage_server.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/delete_storage_unit.pl b/snippets/perl/storage/delete_storage_unit.pl similarity index 97% rename from snippets/perl/storageAPI/delete_storage_unit.pl rename to snippets/perl/storage/delete_storage_unit.pl index e2d4eab..48e8a46 100644 --- a/snippets/perl/storageAPI/delete_storage_unit.pl +++ b/snippets/perl/storage/delete_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl delete_storage_unit.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_disk_pool.pl b/snippets/perl/storage/get_disk_pool.pl similarity index 97% rename from snippets/perl/storageAPI/get_disk_pool.pl rename to snippets/perl/storage/get_disk_pool.pl index 6a8ffb2..c262eaf 100644 --- a/snippets/perl/storageAPI/get_disk_pool.pl +++ b/snippets/perl/storage/get_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_disk_pool.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_disk_pool_by_id.pl b/snippets/perl/storage/get_disk_pool_by_id.pl similarity index 97% rename from snippets/perl/storageAPI/get_disk_pool_by_id.pl rename to snippets/perl/storage/get_disk_pool_by_id.pl index c387e20..1f4a1a3 100644 --- a/snippets/perl/storageAPI/get_disk_pool_by_id.pl +++ b/snippets/perl/storage/get_disk_pool_by_id.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_disk_pool_by_id.pl -nbmaster -username -password -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_server.pl b/snippets/perl/storage/get_storage_server.pl similarity index 97% rename from snippets/perl/storageAPI/get_storage_server.pl rename to snippets/perl/storage/get_storage_server.pl index af185e8..077c563 100644 --- a/snippets/perl/storageAPI/get_storage_server.pl +++ b/snippets/perl/storage/get_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_server_by_id.pl b/snippets/perl/storage/get_storage_server_by_id.pl similarity index 97% rename from snippets/perl/storageAPI/get_storage_server_by_id.pl rename to snippets/perl/storage/get_storage_server_by_id.pl index 0a864c1..a13d983 100644 --- a/snippets/perl/storageAPI/get_storage_server_by_id.pl +++ b/snippets/perl/storage/get_storage_server_by_id.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_server_by_id.pl -nbmaster -username -password -stsid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_unit.pl b/snippets/perl/storage/get_storage_unit.pl similarity index 97% rename from snippets/perl/storageAPI/get_storage_unit.pl rename to snippets/perl/storage/get_storage_unit.pl index 93c95e1..4c272dc 100644 --- a/snippets/perl/storageAPI/get_storage_unit.pl +++ b/snippets/perl/storage/get_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_unit.pl -nbmaster -username -password [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/get_storage_unit_by_id.pl b/snippets/perl/storage/get_storage_unit_by_id.pl similarity index 97% rename from snippets/perl/storageAPI/get_storage_unit_by_id.pl rename to snippets/perl/storage/get_storage_unit_by_id.pl index ec35c19..744a8c9 100644 --- a/snippets/perl/storageAPI/get_storage_unit_by_id.pl +++ b/snippets/perl/storage/get_storage_unit_by_id.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl get_storage_unit_by_id.pl -nbmaster -username -password -stu_name [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/patch_disk_pool.pl b/snippets/perl/storage/patch_disk_pool.pl similarity index 97% rename from snippets/perl/storageAPI/patch_disk_pool.pl rename to snippets/perl/storage/patch_disk_pool.pl index 62b078d..008c678 100644 --- a/snippets/perl/storageAPI/patch_disk_pool.pl +++ b/snippets/perl/storage/patch_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl patch_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/patch_storage_server.pl b/snippets/perl/storage/patch_storage_server.pl similarity index 97% rename from snippets/perl/storageAPI/patch_storage_server.pl rename to snippets/perl/storage/patch_storage_server.pl index 393118e..fc8b102 100644 --- a/snippets/perl/storageAPI/patch_storage_server.pl +++ b/snippets/perl/storage/patch_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl patch_storage_server.pl -nbmaster -username -password -payload -stsid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/patch_storage_unit.pl b/snippets/perl/storage/patch_storage_unit.pl similarity index 97% rename from snippets/perl/storageAPI/patch_storage_unit.pl rename to snippets/perl/storage/patch_storage_unit.pl index 13ba57a..87f6dbb 100644 --- a/snippets/perl/storageAPI/patch_storage_unit.pl +++ b/snippets/perl/storage/patch_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl patch_storage_unit.pl -nbmaster -username -password -payload -stu_name [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/post_disk_pool.pl b/snippets/perl/storage/post_disk_pool.pl similarity index 97% rename from snippets/perl/storageAPI/post_disk_pool.pl rename to snippets/perl/storage/post_disk_pool.pl index 2ecbef8..d4136f2 100644 --- a/snippets/perl/storageAPI/post_disk_pool.pl +++ b/snippets/perl/storage/post_disk_pool.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl post_disk_pool.pl -nbmaster -username -password -payload -dpid [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/post_storage_server.pl b/snippets/perl/storage/post_storage_server.pl similarity index 97% rename from snippets/perl/storageAPI/post_storage_server.pl rename to snippets/perl/storage/post_storage_server.pl index 87e1629..25c787e 100644 --- a/snippets/perl/storageAPI/post_storage_server.pl +++ b/snippets/perl/storage/post_storage_server.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl post_storage_server.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/post_storage_unit.pl b/snippets/perl/storage/post_storage_unit.pl similarity index 97% rename from snippets/perl/storageAPI/post_storage_unit.pl rename to snippets/perl/storage/post_storage_unit.pl index 59f271f..a7c8496 100644 --- a/snippets/perl/storageAPI/post_storage_unit.pl +++ b/snippets/perl/storage/post_storage_unit.pl @@ -2,7 +2,7 @@ use lib"../."; use gateway; -use storageAPI::storage; +use storage::storage; use Getopt::Long qw(GetOptions); sub printUsage { print "\nUsage : perl post_storage_unit.pl -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n"; diff --git a/snippets/perl/storageAPI/storage.pm b/snippets/perl/storage/storage.pm similarity index 100% rename from snippets/perl/storageAPI/storage.pm rename to snippets/perl/storage/storage.pm diff --git a/snippets/powershell/storageAPI/Delete-NB-delete-disk-pool.ps1 b/snippets/powershell/storage/Delete-NB-delete-disk-pool.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Delete-NB-delete-disk-pool.ps1 rename to snippets/powershell/storage/Delete-NB-delete-disk-pool.ps1 diff --git a/snippets/powershell/storageAPI/Delete-NB-delete-storage-server.ps1 b/snippets/powershell/storage/Delete-NB-delete-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Delete-NB-delete-storage-server.ps1 rename to snippets/powershell/storage/Delete-NB-delete-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Delete-NB-delete-storage-unit.ps1 b/snippets/powershell/storage/Delete-NB-delete-storage-unit.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Delete-NB-delete-storage-unit.ps1 rename to snippets/powershell/storage/Delete-NB-delete-storage-unit.ps1 diff --git a/snippets/powershell/storageAPI/Get-NB-get-disk-pool-by-id.ps1 b/snippets/powershell/storage/Get-NB-get-disk-pool-by-id.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Get-NB-get-disk-pool-by-id.ps1 rename to snippets/powershell/storage/Get-NB-get-disk-pool-by-id.ps1 diff --git a/snippets/powershell/storageAPI/Get-NB-get-disk-pool.ps1 b/snippets/powershell/storage/Get-NB-get-disk-pool.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Get-NB-get-disk-pool.ps1 rename to snippets/powershell/storage/Get-NB-get-disk-pool.ps1 diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-server-by-id.ps1 b/snippets/powershell/storage/Get-NB-get-storage-server-by-id.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Get-NB-get-storage-server-by-id.ps1 rename to snippets/powershell/storage/Get-NB-get-storage-server-by-id.ps1 diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-server.ps1 b/snippets/powershell/storage/Get-NB-get-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Get-NB-get-storage-server.ps1 rename to snippets/powershell/storage/Get-NB-get-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-unit-by-id.ps1 b/snippets/powershell/storage/Get-NB-get-storage-unit-by-id.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Get-NB-get-storage-unit-by-id.ps1 rename to snippets/powershell/storage/Get-NB-get-storage-unit-by-id.ps1 diff --git a/snippets/powershell/storageAPI/Get-NB-get-storage-unit.ps1 b/snippets/powershell/storage/Get-NB-get-storage-unit.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Get-NB-get-storage-unit.ps1 rename to snippets/powershell/storage/Get-NB-get-storage-unit.ps1 diff --git a/snippets/powershell/storageAPI/Patch-NB-update-ad-storage-server.ps1 b/snippets/powershell/storage/Patch-NB-update-ad-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Patch-NB-update-ad-storage-server.ps1 rename to snippets/powershell/storage/Patch-NB-update-ad-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Patch-NB-update-cloud-storage-server.ps1 b/snippets/powershell/storage/Patch-NB-update-cloud-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Patch-NB-update-cloud-storage-server.ps1 rename to snippets/powershell/storage/Patch-NB-update-cloud-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Patch-NB-update-disk-pool.ps1 b/snippets/powershell/storage/Patch-NB-update-disk-pool.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Patch-NB-update-disk-pool.ps1 rename to snippets/powershell/storage/Patch-NB-update-disk-pool.ps1 diff --git a/snippets/powershell/storageAPI/Patch-NB-update-msdp-storage-server.ps1 b/snippets/powershell/storage/Patch-NB-update-msdp-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Patch-NB-update-msdp-storage-server.ps1 rename to snippets/powershell/storage/Patch-NB-update-msdp-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Patch-NB-update-storage-unit.ps1 b/snippets/powershell/storage/Patch-NB-update-storage-unit.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Patch-NB-update-storage-unit.ps1 rename to snippets/powershell/storage/Patch-NB-update-storage-unit.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-ad-disk-pool.ps1 b/snippets/powershell/storage/Post-NB-create-ad-disk-pool.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-ad-disk-pool.ps1 rename to snippets/powershell/storage/Post-NB-create-ad-disk-pool.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-ad-storage-server.ps1 b/snippets/powershell/storage/Post-NB-create-ad-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-ad-storage-server.ps1 rename to snippets/powershell/storage/Post-NB-create-ad-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-ad-storage-unit.ps1 b/snippets/powershell/storage/Post-NB-create-ad-storage-unit.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-ad-storage-unit.ps1 rename to snippets/powershell/storage/Post-NB-create-ad-storage-unit.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-cloud-disk-pool.ps1 b/snippets/powershell/storage/Post-NB-create-cloud-disk-pool.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-cloud-disk-pool.ps1 rename to snippets/powershell/storage/Post-NB-create-cloud-disk-pool.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-server.ps1 b/snippets/powershell/storage/Post-NB-create-cloud-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-cloud-storage-server.ps1 rename to snippets/powershell/storage/Post-NB-create-cloud-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-cloud-storage-unit.ps1 b/snippets/powershell/storage/Post-NB-create-cloud-storage-unit.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-cloud-storage-unit.ps1 rename to snippets/powershell/storage/Post-NB-create-cloud-storage-unit.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-msdp-disk-pool.ps1 b/snippets/powershell/storage/Post-NB-create-msdp-disk-pool.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-msdp-disk-pool.ps1 rename to snippets/powershell/storage/Post-NB-create-msdp-disk-pool.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-server.ps1 b/snippets/powershell/storage/Post-NB-create-msdp-storage-server.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-msdp-storage-server.ps1 rename to snippets/powershell/storage/Post-NB-create-msdp-storage-server.ps1 diff --git a/snippets/powershell/storageAPI/Post-NB-create-msdp-storage-unit.ps1 b/snippets/powershell/storage/Post-NB-create-msdp-storage-unit.ps1 similarity index 100% rename from snippets/powershell/storageAPI/Post-NB-create-msdp-storage-unit.ps1 rename to snippets/powershell/storage/Post-NB-create-msdp-storage-unit.ps1 diff --git a/snippets/powershell/storageAPI/README.md b/snippets/powershell/storage/README.md similarity index 100% rename from snippets/powershell/storageAPI/README.md rename to snippets/powershell/storage/README.md diff --git a/snippets/python/storageAPI/README.md b/snippets/python/storage/README.md similarity index 100% rename from snippets/python/storageAPI/README.md rename to snippets/python/storage/README.md diff --git a/snippets/python/storageAPI/create_disk_pool.py b/snippets/python/storage/create_disk_pool.py similarity index 100% rename from snippets/python/storageAPI/create_disk_pool.py rename to snippets/python/storage/create_disk_pool.py diff --git a/snippets/python/storageAPI/create_storage_server.py b/snippets/python/storage/create_storage_server.py similarity index 100% rename from snippets/python/storageAPI/create_storage_server.py rename to snippets/python/storage/create_storage_server.py diff --git a/snippets/python/storageAPI/create_storage_unit.py b/snippets/python/storage/create_storage_unit.py similarity index 100% rename from snippets/python/storageAPI/create_storage_unit.py rename to snippets/python/storage/create_storage_unit.py diff --git a/snippets/python/storageAPI/delete_disk_pool.py b/snippets/python/storage/delete_disk_pool.py similarity index 100% rename from snippets/python/storageAPI/delete_disk_pool.py rename to snippets/python/storage/delete_disk_pool.py diff --git a/snippets/python/storageAPI/delete_storage_server.py b/snippets/python/storage/delete_storage_server.py similarity index 100% rename from snippets/python/storageAPI/delete_storage_server.py rename to snippets/python/storage/delete_storage_server.py diff --git a/snippets/python/storageAPI/delete_storage_unit.py b/snippets/python/storage/delete_storage_unit.py similarity index 100% rename from snippets/python/storageAPI/delete_storage_unit.py rename to snippets/python/storage/delete_storage_unit.py diff --git a/snippets/python/storageAPI/get_disk_pool.py b/snippets/python/storage/get_disk_pool.py similarity index 100% rename from snippets/python/storageAPI/get_disk_pool.py rename to snippets/python/storage/get_disk_pool.py diff --git a/snippets/python/storageAPI/get_disk_pool_by_id.py b/snippets/python/storage/get_disk_pool_by_id.py similarity index 100% rename from snippets/python/storageAPI/get_disk_pool_by_id.py rename to snippets/python/storage/get_disk_pool_by_id.py diff --git a/snippets/python/storageAPI/get_storage_server.py b/snippets/python/storage/get_storage_server.py similarity index 100% rename from snippets/python/storageAPI/get_storage_server.py rename to snippets/python/storage/get_storage_server.py diff --git a/snippets/python/storageAPI/get_storage_server_by_id.py b/snippets/python/storage/get_storage_server_by_id.py similarity index 100% rename from snippets/python/storageAPI/get_storage_server_by_id.py rename to snippets/python/storage/get_storage_server_by_id.py diff --git a/snippets/python/storageAPI/get_storage_unit.py b/snippets/python/storage/get_storage_unit.py similarity index 100% rename from snippets/python/storageAPI/get_storage_unit.py rename to snippets/python/storage/get_storage_unit.py diff --git a/snippets/python/storageAPI/get_storage_unit_by_id.py b/snippets/python/storage/get_storage_unit_by_id.py similarity index 100% rename from snippets/python/storageAPI/get_storage_unit_by_id.py rename to snippets/python/storage/get_storage_unit_by_id.py diff --git a/snippets/python/storageAPI/patch_disk_pool.py b/snippets/python/storage/patch_disk_pool.py similarity index 100% rename from snippets/python/storageAPI/patch_disk_pool.py rename to snippets/python/storage/patch_disk_pool.py diff --git a/snippets/python/storageAPI/patch_storage_server.py b/snippets/python/storage/patch_storage_server.py similarity index 100% rename from snippets/python/storageAPI/patch_storage_server.py rename to snippets/python/storage/patch_storage_server.py diff --git a/snippets/python/storageAPI/patch_storage_unit.py b/snippets/python/storage/patch_storage_unit.py similarity index 100% rename from snippets/python/storageAPI/patch_storage_unit.py rename to snippets/python/storage/patch_storage_unit.py diff --git a/snippets/python/storageAPI/storage.py b/snippets/python/storage/storage.py similarity index 100% rename from snippets/python/storageAPI/storage.py rename to snippets/python/storage/storage.py From 3ba54a473945c1452e238e250cef9065ab79f72f Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Fri, 12 Jul 2019 15:11:41 +0530 Subject: [PATCH 08/11] minor --- recipes/powershell/README.md | 17 ----------------- recipes/powershell/storage/README.md | 2 -- 2 files changed, 19 deletions(-) delete mode 100644 recipes/powershell/README.md diff --git a/recipes/powershell/README.md b/recipes/powershell/README.md deleted file mode 100644 index 99015e9..0000000 --- a/recipes/powershell/README.md +++ /dev/null @@ -1,17 +0,0 @@ -### NetBackup API Code Samples for PowerShell - -This directory contains code samples to invoke NetBackup REST APIs using PowerShell. - -#### Disclaimer - -These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. - -#### Executing the recipes in PowerShell - -Pre-requisites: -- NetBackup 8.1.2 or higher -- PowerShell 4.0 or higher -- NetBackup 8.2 or higher is required for configuring storage API - -Use the following commands to run the PowerShell samples. -- `.\configure_storage_unit_end_to_end.ps1 -nbmaster -username -password [-domainName -domainType ]` diff --git a/recipes/powershell/storage/README.md b/recipes/powershell/storage/README.md index 6dc3895..99015e9 100644 --- a/recipes/powershell/storage/README.md +++ b/recipes/powershell/storage/README.md @@ -14,6 +14,4 @@ Pre-requisites: - NetBackup 8.2 or higher is required for configuring storage API Use the following commands to run the PowerShell samples. -- `.\create_policy_in_one_step.ps1 -nbmaster -username -password [-domainName ] [-domainType ]` -- `.\rbac_filtering_in_policy.ps1 -nbmaster -username -password [-domainName ] [-domainType ]` - `.\configure_storage_unit_end_to_end.ps1 -nbmaster -username -password [-domainName -domainType ]` From def8da7e84a6f8142d0d0bac4cc3f43ba9e5a59f Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Fri, 12 Jul 2019 15:14:45 +0530 Subject: [PATCH 09/11] correct readme --- snippets/perl/storage/README.md | 2 +- snippets/python/storage/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/snippets/perl/storage/README.md b/snippets/perl/storage/README.md index aae2c50..d217d30 100644 --- a/snippets/perl/storage/README.md +++ b/snippets/perl/storage/README.md @@ -14,7 +14,7 @@ These scripts are only meant to be used as a reference. If you intend to use the #### Executing the snippets in Perl -#### NOTE - Sample payloads from the snippets\sample-payloads\storage-samples location can be used as input when to run the scripts. +#### NOTE - Sample payloads from the snippets\sample-payloads\storage-samples location can be used as input to run the scripts. Create Storage Server: diff --git a/snippets/python/storage/README.md b/snippets/python/storage/README.md index 62a0879..04eb6d2 100644 --- a/snippets/python/storage/README.md +++ b/snippets/python/storage/README.md @@ -12,7 +12,7 @@ These scripts are only meant to be used as a reference. If you intend to use the - python 3.5 or higher - python modules: `requests, texttable` -#### NOTE - Sample payloads from the snippets\sample-payloads\storage-samples location can be used as input when to run the scripts. +#### NOTE - Sample payloads from the snippets\sample-payloads\storage-samples location can be used as input to run the scripts. #### Executing the snippets in Python From fd2c4107b9c2075a34144f4bb09ae1c43007dec4 Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 14 Nov 2019 14:29:08 +0530 Subject: [PATCH 10/11] config API --- ...Config_trust_management_crud_operation.ps1 | 237 ++++++++++++++++++ recipes/powershell/config/README.md | 1 + recipes/python/config/config.py | 74 ++++++ .../config/trust_management_crud_operation.py | 88 +++++++ .../config/Delete-NB-delete-trust.ps1 | 121 +++++++++ .../Get-NB-get-media-server-by-name.ps1 | 121 +++++++++ .../config/Get-NB-get-media-server.ps1 | 120 +++++++++ ...et-remote-master-server-cacert-by-name.ps1 | 121 +++++++++ ...t-NB-get-trusted-master-server-by-name.ps1 | 121 +++++++++ .../Get-NB-get-trusted-master-server-list.ps1 | 119 +++++++++ .../Patch-NB-update-trusted-master-server.ps1 | 134 ++++++++++ .../Post-NB-create-trusted-master-server.ps1 | 137 ++++++++++ snippets/powershell/config/README.md | 24 ++ snippets/python/config/README.md | 27 ++ snippets/python/config/config.py | 158 ++++++++++++ .../config/create_trusted_master_server.py | 70 ++++++ snippets/python/config/delete_trust.py | 68 +++++ snippets/python/config/get_media_server.py | 65 +++++ .../python/config/get_media_server_by_name.py | 70 ++++++ ...get_remote_master_server_cacert_by_name.py | 70 ++++++ .../get_trusted_master_server_by_name.py | 70 ++++++ .../config/get_trusted_master_server_list.py | 65 +++++ .../config/patch_trusted_master_server.py | 76 ++++++ .../patch_trusted_master_server.json | 9 + .../post_trusted_master_server.json | 14 ++ 25 files changed, 2180 insertions(+) create mode 100644 recipes/powershell/config/Config_trust_management_crud_operation.ps1 create mode 100644 recipes/python/config/config.py create mode 100644 recipes/python/config/trust_management_crud_operation.py create mode 100644 snippets/powershell/config/Delete-NB-delete-trust.ps1 create mode 100644 snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 create mode 100644 snippets/powershell/config/Get-NB-get-media-server.ps1 create mode 100644 snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 create mode 100644 snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 create mode 100644 snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 create mode 100644 snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 create mode 100644 snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 create mode 100644 snippets/powershell/config/README.md create mode 100644 snippets/python/config/README.md create mode 100644 snippets/python/config/config.py create mode 100644 snippets/python/config/create_trusted_master_server.py create mode 100644 snippets/python/config/delete_trust.py create mode 100644 snippets/python/config/get_media_server.py create mode 100644 snippets/python/config/get_media_server_by_name.py create mode 100644 snippets/python/config/get_remote_master_server_cacert_by_name.py create mode 100644 snippets/python/config/get_trusted_master_server_by_name.py create mode 100644 snippets/python/config/get_trusted_master_server_list.py create mode 100644 snippets/python/config/patch_trusted_master_server.py create mode 100644 snippets/sample-payloads/config-samples/patch_trusted_master_server.json create mode 100644 snippets/sample-payloads/config-samples/post_trusted_master_server.json diff --git a/recipes/powershell/config/Config_trust_management_crud_operation.ps1 b/recipes/powershell/config/Config_trust_management_crud_operation.ps1 new file mode 100644 index 0000000..f6b7cce --- /dev/null +++ b/recipes/powershell/config/Config_trust_management_crud_operation.ps1 @@ -0,0 +1,237 @@ +<# +.SYNOPSIS +This sample script demonstrates the use of NetBackup Trust Management APIs. +.DESCRIPTION +The script can be run using NetBackup 8.2 or higher. +It updates the exclude list configuration on the specified client. The exclude list is specified within the script below. +.EXAMPLE +./Config_trust_management_crud_operation.ps1 -MasterServer -UserName -Password -TrustedMasterServerName [-DomainName -DomainType ] +#> + +#Requires -Version 4.0 + +Param ( + [string]$MasterServer = $(Throw "Please specify the name of the NetBackup Master Server using the -MasterServer parameter."), + [string]$UserName = $(Throw "Please specify the user name using the -UserName parameter."), + [string]$Password = $(Throw "Please specify the password using the -Password parameter."), + [string]$TrustedMasterServerName = $(Throw "Please specify the name of the NetBackup remote Master Server using the -TrustedMasterServerName parameter."), + [string]$DomainName, + [string]$DomainType +) + + +############################################################### +# Setup to allow self-signed certificates and enable TLS v1.2 +############################################################### +Function Setup() +{ + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + } + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host "`n"$_.Exception.InnerException.Message + } +} + +#################### +# Global Variables +#################### + +$port = 1556 +$basepath = "https://" + $MasterServer + ":" + $port + "/netbackup" +$contentType = "application/vnd.netbackup+json;version=4.0" +$hostName = $client + +###################################### +# Login to the NetBackup webservices +###################################### +Function Login() +{ + + $uri = $basepath + "/login" + + $body = @{ + userName=$UserName + password=$Password + } + if ($DomainName -ne "") { + $body.add("domainName", $DomainName) + } + if ($DomainType -ne "") { + $body.add("domainType", $DomainType) + } + Write-Host "`nSending a POST request to login to the NetBackup webservices...`n" + + $response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $contentType + + if ($response.StatusCode -ne 201) + { + throw "Unable to connect to the NetBackup Master Server" + } + + Write-Host "Login successful.`n" + $content = (ConvertFrom-Json -InputObject $response) + return $content +} +##################################################################### +# POST NetBackup Storage server +##################################################################### +Function CreateTrust() +{ + $base_uri = $basepath + "/config/servers/trusted-master-servers" + + $json = '{ + "data": { + "type": "trustedMasterServer", + "attributes": { + "trustedMasterServerName": "'+$TrustedMasterServerName+'", + "rootCAType": "NBCA", + "authenticationType": "CREDENTIAL", + "domainName": "DOMAIN", + "userName": "USER", + "password": "PASSWORD", + "fingerprint": "FINGERPRINT" + } + } + } + ' + $response_create_trust = Invoke-WebRequest ` + -Uri $base_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $contentType ` + -Headers $headers + + if ($response_create_trust.StatusCode -ne 201) + { + throw "Unable to create trust between master servers." + } + + Write-Host "Trust between master servers created successfully.`n" + echo $response_create_trust + Write-Host $response_create_trust + + $response_create_trust = (ConvertFrom-Json -InputObject $response_create_trust) +} +##################################################################### +# GET NetBackup Trusted Master Server +##################################################################### +Function GetTrustedMaster() +{ + + $base_uri = $basepath + "/config/servers/trusted-master-servers/" + $TrustedMasterServerName + + + $response_get = Invoke-WebRequest ` + -Uri $base_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + + if ($response_get.StatusCode -ne 200) + { + throw "Unable to fetch scpecified trusted master server" + } + + Write-Host "Scpecified trusted master server fetched successfully.`n" + Write-Host $response_get + + $response_get = (ConvertFrom-Json -InputObject $response_get) +} +##################################################################### +# PATCH NetBackup trust between master servers +##################################################################### +Function UpdateTrust() +{ + $base_uri = $basepath + "/config/servers/trusted-master-servers/" + $TrustedMasterServerName + + $json = '{ + "data": { + "type": "trustedMasterServer", + "attributes": { + "trustedMasterServerName": "'+$TrustedMasterServerName+'", + "rootCAType": "ECA" + } + } + } + ' + + $response_update = Invoke-WebRequest ` + -Uri $base_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $contentType ` + -Headers $headers + + if ($response_update.StatusCode -ne 200) + { + throw "Unable to update trust between masters." + } + + Write-Host "Trust between masters updated successfully.`n" + echo $response_update + Write-Host $response_update + + $response_update = (ConvertFrom-Json -InputObject $response_update) + +} + + +##################################################################### +# Delete NetBackup Trust between master Server +##################################################################### +Function DeleteTrust() +{ + $base_uri = $basepath + "/config/servers/trusted-master-servers/" + $TrustedMasterServerName + + + $response_delete = Invoke-WebRequest ` + -Uri $base_uri ` + -Method DELETE ` + -ContentType $contentType ` + -Headers $headers + + if ($response_delete.StatusCode -ne 204 ) + { + throw "Unable to delete trust between masters." + } + + Write-Host "Trust between masters deleted successfully.`n" + Write-Host $response_delete + + $response_delete = (ConvertFrom-Json -InputObject $response_delete) +} + +########################################################################### + +Setup +$loginResponse = Login +$headers = @{"Authorization" = $loginResponse.token} +CreateTrust +GetTrustedMaster +UpdateTrust +DeleteTrust \ No newline at end of file diff --git a/recipes/powershell/config/README.md b/recipes/powershell/config/README.md index 8ec6979..1b8a141 100644 --- a/recipes/powershell/config/README.md +++ b/recipes/powershell/config/README.md @@ -14,3 +14,4 @@ Pre-requisites: Use the following commands to run the PowerShell samples. - `./configManagement_curd_operations.ps1 -MasterServer -UserName -Password -Client [-DomainName -DomainType ]` +- `./Config_trust_management_crud_operation.ps1 -MasterServer -UserName -Password -TrustedMasterServerName [-DomainName -DomainType ]` \ No newline at end of file diff --git a/recipes/python/config/config.py b/recipes/python/config/config.py new file mode 100644 index 0000000..82ef88b --- /dev/null +++ b/recipes/python/config/config.py @@ -0,0 +1,74 @@ +import requests + +content_type = "application/vnd.netbackup+json; version=4.0" + + +def perform_login(username, password, base_url, domain_name, domain_type): + url = base_url + "/login" + + if domain_name != "" and domain_type != "": + req_body = {"userName": username, "password": password, "domainName": domain_name, "domainType": domain_type} + else: + req_body = {"userName": username, "password": password} + + headers = {'Content-Type': content_type} + + print("performing POST on {} for user '{}'\n".format(url, req_body['userName'])) + + resp = requests.post(url, headers=headers, json=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Login API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json()['token'] + + +def get_trusted_master_server_by_name(jwt, base_url, trustedmasterservername): + url = base_url + "/config/servers/trusted-master-servers/" + trustedmasterservername + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET trusted master server with specific name failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def delete_trust(jwt, base_url, trustedmasterservername): + url = base_url + "/config/servers/trusted-master-servers/" +trustedmasterservername + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + if resp.status_code != 204: + raise Exception('DELETE trust with specific trusted master failed with status code {} and {}'.format(resp.status_code, resp.json())) + + print("\nThe Trust is deleted with status code: {}\n".format(resp.status_code)) + +def create_trusted_master_server(jwt, base_url, file_name): + url = base_url + "/config/servers/trusted-master-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url)) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create trust between master servers API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() diff --git a/recipes/python/config/trust_management_crud_operation.py b/recipes/python/config/trust_management_crud_operation.py new file mode 100644 index 0000000..257dd57 --- /dev/null +++ b/recipes/python/config/trust_management_crud_operation.py @@ -0,0 +1,88 @@ +import sys +import config +import json +import texttable as tt + +# This script consists of the helper functions to excute NetBackup APIs for trust management crud operations. +# 1) Login to Netbackup +# 2) Create Trust between masters +# 3) Get Trusted master server +# 4) Delete Trust between master servers + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore configure_storage_unit_end_to_end.py -nbmaster -username -password -trust_payload -trusted_master_server_name [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global trust_payload + global trusted_master_server_name + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-trust_payload": + trust_payload = sys.argv[i + 1] + elif sys.argv[i] == "-trusted_master_server_name": + trusted_master_server_name = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + elif trust_payload == "": + print("Please provide the value for 'trust_payload'") + exit() + elif trusted_master_server_name == "": + print("Please provide the value for 'trusted_master_server_name'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +response_create_trust = config.create_trusted_master_server(jwt, base_url, trust_payload) +print(response_create_trust) + +response_get_trust = config.get_trusted_master_server_by_name(jwt, base_url, trusted_master_server_name) +print(response_get_trust) + +response_delete_trust = config.delete_trust(jwt, base_url, trusted_master_server_name) +print(response_delete_trust) diff --git a/snippets/powershell/config/Delete-NB-delete-trust.ps1 b/snippets/powershell/config/Delete-NB-delete-trust.ps1 new file mode 100644 index 0000000..3855625 --- /dev/null +++ b/snippets/powershell/config/Delete-NB-delete-trust.ps1 @@ -0,0 +1,121 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for deleting trust between masters. + +.DESCRIPTION +This script will delete trust between masters. + +.EXAMPLE +./Delete-NB-delete-trust.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -trustedmasterservername "Trusted Master Server Name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$trustedmasterservername = $(throw "Please specify the trusted master server name using -trustedmasterservername parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# Delete NetBackup Trust between master Server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/servers/trusted-master-servers/" + $trustedmasterservername + + +$response_delete = Invoke-WebRequest ` + -Uri $base_uri ` + -Method DELETE ` + -ContentType $contentType ` + -Headers $headers + +if ($response_delete.StatusCode -ne 204 ) +{ + throw "Unable to delete trust between masters." +} + +Write-Host "Trust between masters deleted successfully.`n" +Write-Host $response_delete + +$response_delete = (ConvertFrom-Json -InputObject $response_delete) \ No newline at end of file diff --git a/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 b/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 new file mode 100644 index 0000000..405095d --- /dev/null +++ b/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 @@ -0,0 +1,121 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching scpecified media server details. + +.DESCRIPTION +This script will fetch scpecified media server. + +.EXAMPLE +./Get-NB-get-media-server-by-name.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -medianame "Media Server Name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$medianame = $(throw "Please specify the media name using -medianame parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Media Server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/media-servers/" + $medianame + + +$response_get = Invoke-WebRequest ` + -Uri $base_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_get.StatusCode -ne 200) +{ + throw "Unable to fetch media server." +} + +Write-Host "Media server fetched successfully.`n" +Write-Host $response_get + +$response_get = (ConvertFrom-Json -InputObject $response_get) \ No newline at end of file diff --git a/snippets/powershell/config/Get-NB-get-media-server.ps1 b/snippets/powershell/config/Get-NB-get-media-server.ps1 new file mode 100644 index 0000000..b37a7ec --- /dev/null +++ b/snippets/powershell/config/Get-NB-get-media-server.ps1 @@ -0,0 +1,120 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching media server details configured with provided master. + +.DESCRIPTION +This script will fetch media server details configured with provided master. + +.EXAMPLE +./Get-NB-get-media-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Media Servers +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/media-servers" + + +$response_getAll = Invoke-WebRequest ` + -Uri $base_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_getAll.StatusCode -ne 200) +{ + throw "Unable to fetch media servers." +} + +Write-Host "Media servers fetched successfully.`n" +Write-Host $response_getAll + +$response_getAll = (ConvertFrom-Json -InputObject $response_getAll) \ No newline at end of file diff --git a/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 b/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 new file mode 100644 index 0000000..6ca6852 --- /dev/null +++ b/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 @@ -0,0 +1,121 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching scpecified remote master server cacert details. + +.DESCRIPTION +This script will fetch scpecified remote master server cacert details. + +.EXAMPLE +./Get-NB-get-remote-master-server-cacert-by-name.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -remotemasterserver "Remote Master Server Name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$remotemasterserver = $(throw "Please specify the remote master server name using -remotemasterserver parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Remote Master Server Cacert Details +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/remote-master-server-cacerts/" + $remotemasterserver + + +$response_get = Invoke-WebRequest ` + -Uri $base_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_get.StatusCode -ne 200) +{ + throw "Unable to Master server cacert details." +} + +Write-Host "Master server cacert details fetched successfully.`n" +Write-Host $response_get + +$response_get = (ConvertFrom-Json -InputObject $response_get) \ No newline at end of file diff --git a/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 b/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 new file mode 100644 index 0000000..f2722df --- /dev/null +++ b/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 @@ -0,0 +1,121 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching scpecified trusted master server. + +.DESCRIPTION +This script will fetch scpecified scpecified trusted master server. + +.EXAMPLE +./Get-NB-get-trusted-master-server-by-name.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -trustedmasterservername "Trusted master Server Name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$trustedmasterservername = $(throw "Please specify the trusted master server name using -trustedmasterservername parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Trusted Master Server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/servers/trusted-master-servers/" + $trustedmasterservername + + +$response_get = Invoke-WebRequest ` + -Uri $base_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_get.StatusCode -ne 200) +{ + throw "Unable to fetch scpecified trusted master server" +} + +Write-Host "Scpecified trusted master server fetched successfully.`n" +Write-Host $response_get + +$response_get = (ConvertFrom-Json -InputObject $response_get) \ No newline at end of file diff --git a/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 b/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 new file mode 100644 index 0000000..9fcdf52 --- /dev/null +++ b/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 @@ -0,0 +1,119 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for fetching trusted master server list. + +.DESCRIPTION +This script will fetch trusted master server list. + +.EXAMPLE +./Get-NB-get-trusted-master-server-list.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" + + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# GET NetBackup Trusted master Server List +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/servers/trusted-master-servers" + + +$response_getAll = Invoke-WebRequest ` + -Uri $base_uri ` + -Method GET ` + -ContentType $contentType ` + -Headers $headers + +if ($response_getAll.StatusCode -ne 200) +{ + throw "Unable to fetch trusted master server list." +} + +Write-Host "Trusted master server list fetched successfully.`n" +Write-Host $response_getAll + +$response_getAll = (ConvertFrom-Json -InputObject $response_getAll) \ No newline at end of file diff --git a/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 b/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 new file mode 100644 index 0000000..3b9a5d6 --- /dev/null +++ b/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 @@ -0,0 +1,134 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for updating trust between masters. + +.DESCRIPTION +This script will update trust between masters. + +.EXAMPLE +./Patch-NB-update-trusted-master-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -trustedmasterservername "Trusted Master Server Name" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter."), + [string]$trustedmasterservername = $(throw "Please specify the trusted master server name using -trustedmasterservername parameter.") + +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# PATCH NetBackup trust between master servers +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/servers/trusted-master-servers/" + $trustedmasterservername + +$json = '{ + "data": { + "type": "trustedMasterServer", + "attributes": { + "trustedMasterServerName": "TRUSTED_MASTER_SERVER_NAME", + "rootCAType": "ECA" + } + } +} +' + +$response_update = Invoke-WebRequest ` + -Uri $base_uri ` + -Method PATCH ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_update.StatusCode -ne 200) +{ + throw "Unable to update trust between masters." +} + +Write-Host "Trust between masters updated successfully.`n" +echo $response_update +Write-Host $response_update + +$response_update = (ConvertFrom-Json -InputObject $response_update) \ No newline at end of file diff --git a/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 b/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 new file mode 100644 index 0000000..23d8d0a --- /dev/null +++ b/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 @@ -0,0 +1,137 @@ +<# + +.SYNOPSIS +This sample script demonstrates the use of NetBackup REST API for adding trust between masters. + +.DESCRIPTION +This script will create adding trust between masters. + +.EXAMPLE +./Post-NB-create-trusted-master-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" +#> + +param ( + [string]$nbmaster = $(throw "Please specify the name of NetBackup master server using -nbmaster parameter."), + [string]$username = $(throw "Please specify the user name using -username parameter."), + [string]$password = $(throw "Please specify the password using -password parameter.") +) + +##################################################################### +# Initial Setup +# Note: This allows self-signed certificates and enables TLS v1.2 +##################################################################### + +function InitialSetup() +{ + + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Allow self-signed certificates + if ([System.Net.ServicePointManager]::CertificatePolicy -notlike 'TrustAllCertsPolicy') + { + Add-Type -TypeDefinition @" + using System.Net; + using System.Security.Cryptography.X509Certificates; + public class TrustAllCertsPolicy : ICertificatePolicy { + public bool CheckValidationResult( + ServicePoint srvPoint, X509Certificate certificate, + WebRequest request, int certificateProblem) { + return true; + } + } +"@ + [System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName TrustAllCertsPolicy + [Net.ServicePointManager]::SecurityProtocol = "Tls12" + + # Force TLS v1.2 + try { + if ([Net.ServicePointManager]::SecurityProtocol -notcontains 'Tls12') { + [Net.ServicePointManager]::SecurityProtocol += [Net.SecurityProtocolType]::Tls12 + } + } + catch { + Write-Host $_.Exception.InnerException.Message + } + } +} + +InitialSetup + +##################################################################### +# Global Variables +##################################################################### + +$port = 1556 +$basepath = "https://" + $nbmaster + ":" + $port + "/netbackup" +$content_type1 = "application/vnd.netbackup+json;version=1.0" +$content_type2 = "application/vnd.netbackup+json;version=2.0" +$content_type3 = "application/vnd.netbackup+json;version=3.0" +$content_type4 = "application/vnd.netbackup+json;version=4.0" + +##################################################################### +# Login +##################################################################### + +$uri = $basepath + "/login" + +$body = @{ + userName=$username + password=$password +} + +$response = Invoke-WebRequest ` + -Uri $uri ` + -Method POST ` + -Body (ConvertTo-Json -InputObject $body) ` + -ContentType $content_type1 + +if ($response.StatusCode -ne 201) +{ + throw "Unable to connect to the Netbackup master server!" +} +Write-Host "Login successful.`n" +$content = (ConvertFrom-Json -InputObject $response) + +##################################################################### +# POST NetBackup Storage server +##################################################################### + +$headers = @{ + "Authorization" = $content.token +} + +$base_uri = $basepath + "/config/servers/trusted-master-servers" + +$json = '{ + "data": { + "type": "trustedMasterServer", + "attributes": { + "trustedMasterServerName": "remote.master.com", + "rootCAType": "NBCA", + "authenticationType": "CREDENTIAL", + "domainName": "DOMAIN", + "userName": "USER", + "password": "PASSWORD", + "fingerprint": "FINGERPRINT" + } + } +} +' + +$response_create_trust = Invoke-WebRequest ` + -Uri $base_uri ` + -Method POST ` + -Body ($json) ` + -ContentType $content_type3 ` + -Headers $headers + +if ($response_create_trust.StatusCode -ne 201) +{ + throw "Unable to create trust between master servers." +} + +Write-Host "Trust between master servers created successfully.`n" +echo $response_create_trust +Write-Host $response_create_trust + +$response_create_trust = (ConvertFrom-Json -InputObject $response_create_trust) \ No newline at end of file diff --git a/snippets/powershell/config/README.md b/snippets/powershell/config/README.md new file mode 100644 index 0000000..f3c79a0 --- /dev/null +++ b/snippets/powershell/config/README.md @@ -0,0 +1,24 @@ +### NetBackup API Code Samples for PowerShell + +This directory contains code samples to invoke NetBackup REST APIs using PowerShell. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Pre-requisites: + +- NetBackup 8.2 or higher +- PowerShell 5.0 or higher + +#### Executing the snippets in PowerShell + +Use the following commands to run the PowerShell samples. +- `./Get-NB-get-media-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret"` +- `./Get-NB-get-media-server-by-name.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -medianame "Media Server Name"` +- `./Get-NB-get-remote-master-server-cacert-by-name.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -remotemasterserver "remote Master Server Name"` +- `./Get-NB-get-trusted-master-server-list.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret"` +- `./Get-NB-get-trusted-master-server-by-name.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -trustedmasterservername "Trusted master Server Name"` +- `./Post-NB-create-trusted-master-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret"` +- `./Patch-NB-update-trusted-master-server.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -trustedmasterservername "Trusted Master Server Name"` +- `./Delete-NB-delete-trust.ps1 -nbmaster "nb-master.example.com" -username "administrator" -password "secret" -trustedmasterservername "Trusted Master Server Name"` \ No newline at end of file diff --git a/snippets/python/config/README.md b/snippets/python/config/README.md new file mode 100644 index 0000000..ce0647f --- /dev/null +++ b/snippets/python/config/README.md @@ -0,0 +1,27 @@ +### NetBackup API Code Samples for Python + +This directory contains code samples to invoke NetBackup REST APIs using Python. + +#### Disclaimer + +These scripts are only meant to be used as a reference. If you intend to use them in production, use it at your own risk. + +#### Pre-requisites: + +- NetBackup 8.2 or higher +- python 3.5 or higher +- python modules: `requests, texttable` + +#### NOTE - Sample payloads from the snippets\sample-payloads\config-samples location can be used as input to run the scripts. + +#### Executing the snippets in Python + +Use the following commands to run the python samples. +- `python -W ignore get_trusted_master_server_list.py -nbmaster -username -password [-domainname ] [-domaintype ]` +- `python -W ignore get_trusted_master_server_by_name.py -nbmaster -username -password -trustedmasterservername [-domainname ] [-domaintype ]` +- `python -W ignore get_remote_master_server_cacert_by_name.py -nbmaster -username -password -remotemasterserver [-domainname ] [-domaintype ]` +- `python -W ignore get_media_server_by_name.py -nbmaster -username -password -medianame [-domainname ] [-domaintype ]` +- `python -W ignore get_media_server.py -nbmaster -username -password [-domainname ] [-domaintype ]` +- `python -W ignore delete_trust.py -nbmaster -username -password -trustedmasterservername [-domainname ] [-domaintype ]` +- `python -W ignore create_trusted_master_server.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]` +- `python -W ignore patch_trusted_master_server.py -nbmaster -username -password -payload -trustedmasterservername [-domainname ] [-domaintype ]` \ No newline at end of file diff --git a/snippets/python/config/config.py b/snippets/python/config/config.py new file mode 100644 index 0000000..a039629 --- /dev/null +++ b/snippets/python/config/config.py @@ -0,0 +1,158 @@ +import requests + +content_type = "application/vnd.netbackup+json; version=4.0" + + +def perform_login(username, password, base_url, domain_name, domain_type): + url = base_url + "/login" + + if domain_name != "" and domain_type != "": + req_body = {"userName": username, "password": password, "domainName": domain_name, "domainType": domain_type} + else: + req_body = {"userName": username, "password": password} + + headers = {'Content-Type': content_type} + + print("performing POST on {} for user '{}'\n".format(url, req_body['userName'])) + + resp = requests.post(url, headers=headers, json=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Login API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json()['token'] + +def get_media_servers(jwt, base_url): + url = base_url + "/config/media-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET Media server API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_media_server_by_name(jwt, base_url, medianame): + url = base_url + "/config/media-servers/" + medianame + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET Media server with specific name failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_remote_master_server_cacert_by_name(jwt, base_url, remotemasterserver): + url = base_url + "/config/remote-master-server-cacerts/" + remotemasterserver + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET Remote master server cacert info with specific name failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_trusted_master_server_list(jwt, base_url): + url = base_url + "/config/servers/trusted-master-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET trusted master server list API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def get_trusted_master_server_by_name(jwt, base_url, trustedmasterservername): + url = base_url + "/config/servers/trusted-master-servers/" + trustedmasterservername + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing GET on {}\n".format(url)) + + resp = requests.get(url, headers=headers, params=query_params, verify=False) + + if resp.status_code != 200: + raise Exception('GET trusted master server with specific name failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def delete_trust(jwt, base_url, trustedmasterservername): + url = base_url + "/config/servers/trusted-master-servers/" +trustedmasterservername + headers = {'Content-Type': content_type, 'Authorization': jwt} + query_params = { + # "page[limit]": 100, #This changes the default page size to 100 + # "filter": "jobType eq 'RESTORE'" #This adds a filter to only show RESTORE Jobs + } + + print("performing DELETE on {}\n".format(url)) + + resp = requests.delete(url, headers=headers, verify=False) + if resp.status_code != 204: + raise Exception('DELETE trust with specific trusted master failed with status code {} and {}'.format(resp.status_code, resp.json())) + + print("\nThe Trust is deleted with status code: {}\n".format(resp.status_code)) + +def create_trusted_master_server(jwt, base_url, file_name): + url = base_url + "/config/servers/trusted-master-servers" + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing POST on {}\n".format(url)) + + resp = requests.post(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 201: + raise Exception('Create trust between master servers API failed with status code {} and {}'.format(resp.status_code, resp.json())) + + return resp.json() + +def patch_trusted_master_server(jwt, base_url, file_name, trustedmasterservername): + url = base_url + "/config/servers/trusted-master-servers/" +trustedmasterservername + headers = {'Content-Type': content_type, 'Authorization': jwt} + + path = file_name + + req_body = open(path, 'r').read() + + print("performing PATCH on {}\n".format(url)) + + resp = requests.patch(url, headers=headers, data=req_body, verify=False) + + if resp.status_code != 200: + raise Exception('Update trust between masters API failed with status code {} and {}'.format(resp.status_code, resp.json())) + print("\nThe trust is Upadated with status code: {}\n".format(resp.status_code)) + return resp.json() diff --git a/snippets/python/config/create_trusted_master_server.py b/snippets/python/config/create_trusted_master_server.py new file mode 100644 index 0000000..0d2bf8d --- /dev/null +++ b/snippets/python/config/create_trusted_master_server.py @@ -0,0 +1,70 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore create_trusted_master_server.py -nbmaster -username -password -payload [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +reponse = config.create_trusted_master_server(jwt, base_url, payload) + +print(reponse) diff --git a/snippets/python/config/delete_trust.py b/snippets/python/config/delete_trust.py new file mode 100644 index 0000000..ab942a9 --- /dev/null +++ b/snippets/python/config/delete_trust.py @@ -0,0 +1,68 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore delete_trust.py -nbmaster -username -password -trustedmasterservername [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global trustedmasterservername + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-trustedmasterservername": + trustedmasterservername = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif trustedmasterservername == "": + print("Please provide the value for 'trustedmasterservername'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +config.delete_trust(jwt, base_url, trustedmasterservername) \ No newline at end of file diff --git a/snippets/python/config/get_media_server.py b/snippets/python/config/get_media_server.py new file mode 100644 index 0000000..a30adbf --- /dev/null +++ b/snippets/python/config/get_media_server.py @@ -0,0 +1,65 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_media_server.py -nbmaster -username -password [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +jobs = config.get_media_servers(jwt, base_url) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/config/get_media_server_by_name.py b/snippets/python/config/get_media_server_by_name.py new file mode 100644 index 0000000..6cf4893 --- /dev/null +++ b/snippets/python/config/get_media_server_by_name.py @@ -0,0 +1,70 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_media_server_by_name.py -nbmaster -username -password -medianame [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global medianame + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-medianame": + medianame = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif medianame == "": + print("Please provide the value for 'medianame'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +jobs = config.get_media_server_by_name(jwt, base_url, medianame) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/config/get_remote_master_server_cacert_by_name.py b/snippets/python/config/get_remote_master_server_cacert_by_name.py new file mode 100644 index 0000000..d2d10b9 --- /dev/null +++ b/snippets/python/config/get_remote_master_server_cacert_by_name.py @@ -0,0 +1,70 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_remote_master_server_cacert_by_name.py -nbmaster -username -password -remotemasterserver [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global remotemasterserver + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-remotemasterserver": + remotemasterserver = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif remotemasterserver == "": + print("Please provide the value for 'remotemasterserver'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +jobs = config.get_remote_master_server_cacert_by_name(jwt, base_url, remotemasterserver) + +print(jobs) diff --git a/snippets/python/config/get_trusted_master_server_by_name.py b/snippets/python/config/get_trusted_master_server_by_name.py new file mode 100644 index 0000000..79b950e --- /dev/null +++ b/snippets/python/config/get_trusted_master_server_by_name.py @@ -0,0 +1,70 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_trusted_master_server_by_name.py -nbmaster -username -password -trustedmasterservername [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global trustedmasterservername + +for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-trustedmasterservername": + trustedmasterservername = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + +if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() +elif username == "": + print("Please provide the value for 'username'") + exit() +elif password == "": + print("Please provide the value for 'password'") +elif trustedmasterservername == "": + print("Please provide the value for 'trustedmasterservername'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +jobs = config.get_trusted_master_server_by_name(jwt, base_url, trustedmasterservername) + +print(jobs) \ No newline at end of file diff --git a/snippets/python/config/get_trusted_master_server_list.py b/snippets/python/config/get_trusted_master_server_list.py new file mode 100644 index 0000000..79c9166 --- /dev/null +++ b/snippets/python/config/get_trusted_master_server_list.py @@ -0,0 +1,65 @@ +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore get_trusted_master_server_list.py -nbmaster -username -password [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +jobs = config.get_trusted_master_server_list(jwt, base_url) + +print(jobs) diff --git a/snippets/python/config/patch_trusted_master_server.py b/snippets/python/config/patch_trusted_master_server.py new file mode 100644 index 0000000..bdccbfb --- /dev/null +++ b/snippets/python/config/patch_trusted_master_server.py @@ -0,0 +1,76 @@ +import os +import sys +import config +import json +import texttable as tt + +protocol = "https" +nbmaster = "" +username = "" +password = "" +domainname = "" +domaintype = "" + +port = 1556 + +def print_usage(): + print("Example:") + print("python -W ignore patch_trusted_master_server.py -nbmaster -username -password -payload -trustedmasterservername [-domainname ] [-domaintype ]\n\n\n") + +def read_command_line_arguments(): + if len(sys.argv)%2 == 0: + print_usage() + exit() + + global nbmaster + global username + global password + global domainname + global domaintype + global payload + global trustedmasterservername + + for i in range(1, len(sys.argv), 2): + if sys.argv[i] == "-nbmaster": + nbmaster = sys.argv[i + 1] + elif sys.argv[i] == "-username": + username = sys.argv[i + 1] + elif sys.argv[i] == "-password": + password = sys.argv[i + 1] + elif sys.argv[i] == "-payload": + payload = sys.argv[i + 1] + elif sys.argv[i] == "-trustedmasterservername": + trustedmasterservername = sys.argv[i + 1] + elif sys.argv[i] == "-domainname": + domainname = sys.argv[i + 1] + elif sys.argv[i] == "-domaintype": + domaintype = sys.argv[i + 1] + else: + print_usage() + exit() + + if nbmaster == "": + print("Please provide the value for 'nbmaster'") + exit() + elif username == "": + print("Please provide the value for 'username'") + exit() + elif password == "": + print("Please provide the value for 'password'") + elif payload == "": + print("Please provide the value for 'payload'") + elif trustedmasterservername == "": + print("Please provide the value for 'trustedmasterservername'") + exit() + +print_usage() + +read_command_line_arguments() + +base_url = protocol + "://" + nbmaster + ":" + str(port) + "/netbackup" + +jwt = config.perform_login(username, password, base_url, domainname, domaintype) + +reponse = config.patch_trusted_master_server(jwt, base_url, payload, trustedmasterservername) + +print(reponse) diff --git a/snippets/sample-payloads/config-samples/patch_trusted_master_server.json b/snippets/sample-payloads/config-samples/patch_trusted_master_server.json new file mode 100644 index 0000000..b938367 --- /dev/null +++ b/snippets/sample-payloads/config-samples/patch_trusted_master_server.json @@ -0,0 +1,9 @@ +{ + "data": { + "type": "trustedMasterServer", + "attributes": { + "trustedMasterServerName": "TRUSTED_MASTER_SERVER_NAME", + "rootCAType": "ECA" + } + } +} \ No newline at end of file diff --git a/snippets/sample-payloads/config-samples/post_trusted_master_server.json b/snippets/sample-payloads/config-samples/post_trusted_master_server.json new file mode 100644 index 0000000..74dde60 --- /dev/null +++ b/snippets/sample-payloads/config-samples/post_trusted_master_server.json @@ -0,0 +1,14 @@ +{ + "data": { + "type": "trustedMasterServer", + "attributes": { + "trustedMasterServerName": "remote.master.com", + "rootCAType": "NBCA", + "authenticationType": "CREDENTIAL", + "domainName": "DOMAIN", + "userName": "USER", + "password": "PASSWORD", + "fingerprint": "FINGERPRINT" + } + } +} \ No newline at end of file From 5acf0aa99e342581dc8bf1368dace62dfd832739 Mon Sep 17 00:00:00 2001 From: Suruchi Malewar Date: Thu, 14 Nov 2019 15:34:50 +0530 Subject: [PATCH 11/11] config changes --- .../config/Config_trust_management_crud_operation.ps1 | 2 ++ recipes/powershell/config/README.md | 2 +- recipes/python/config/README.md | 3 ++- recipes/python/config/config.py | 2 +- recipes/python/config/trust_management_crud_operation.py | 1 + snippets/powershell/config/Delete-NB-delete-trust.ps1 | 1 - snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 | 1 - snippets/powershell/config/Get-NB-get-media-server.ps1 | 1 - .../config/Get-NB-get-remote-master-server-cacert-by-name.ps1 | 1 - .../config/Get-NB-get-trusted-master-server-by-name.ps1 | 1 - .../config/Get-NB-get-trusted-master-server-list.ps1 | 1 - .../config/Patch-NB-update-trusted-master-server.ps1 | 1 - .../powershell/config/Post-NB-create-trusted-master-server.ps1 | 2 -- snippets/powershell/config/README.md | 2 +- snippets/python/config/README.md | 2 +- snippets/python/config/config.py | 2 +- snippets/python/config/create_trusted_master_server.py | 1 + snippets/python/config/delete_trust.py | 1 + snippets/python/config/get_media_server.py | 1 + snippets/python/config/get_media_server_by_name.py | 1 + .../python/config/get_remote_master_server_cacert_by_name.py | 1 + snippets/python/config/get_trusted_master_server_by_name.py | 1 + snippets/python/config/get_trusted_master_server_list.py | 1 + snippets/python/config/patch_trusted_master_server.py | 1 + 24 files changed, 18 insertions(+), 15 deletions(-) diff --git a/recipes/powershell/config/Config_trust_management_crud_operation.ps1 b/recipes/powershell/config/Config_trust_management_crud_operation.ps1 index f6b7cce..b4f4e50 100644 --- a/recipes/powershell/config/Config_trust_management_crud_operation.ps1 +++ b/recipes/powershell/config/Config_trust_management_crud_operation.ps1 @@ -1,9 +1,11 @@ <# .SYNOPSIS This sample script demonstrates the use of NetBackup Trust Management APIs. + .DESCRIPTION The script can be run using NetBackup 8.2 or higher. It updates the exclude list configuration on the specified client. The exclude list is specified within the script below. + .EXAMPLE ./Config_trust_management_crud_operation.ps1 -MasterServer -UserName -Password -TrustedMasterServerName [-DomainName -DomainType ] #> diff --git a/recipes/powershell/config/README.md b/recipes/powershell/config/README.md index 1b8a141..160f18a 100644 --- a/recipes/powershell/config/README.md +++ b/recipes/powershell/config/README.md @@ -1,4 +1,4 @@ -### NetBackup API Code Samples for PowerShell +#### NetBackup API Code Samples for PowerShell This directory contains code samples to invoke NetBackup config APIs using PowerShell. diff --git a/recipes/python/config/README.md b/recipes/python/config/README.md index bcce2bb..11120d6 100644 --- a/recipes/python/config/README.md +++ b/recipes/python/config/README.md @@ -1,4 +1,4 @@ -### NetBackup Hosts Configuration Management API Code Samples +#### NetBackup Hosts Configuration Management API Code Samples This directory contains Python scripts demonstrating the use of NetBackup Hosts Configuration Management APIs to update exclude list on a NetBackup host. @@ -18,4 +18,5 @@ Use the following command to run the script. The command should be run from the `python -W ignore -m config.hosts_exclude_list -hostName -nbmaster -username -password [-domainName ] [-domainType ]` +`python -W ignore configure_storage_unit_end_to_end.py -nbmaster -username -password -trust_payload -trusted_master_server_name [-domainname ] [-domaintype ]` `Note: hostName is the name of the NetBackup host to set the exclude configuration. The exclude list is specified in the config/exclude_list file.` diff --git a/recipes/python/config/config.py b/recipes/python/config/config.py index 82ef88b..3a61e81 100644 --- a/recipes/python/config/config.py +++ b/recipes/python/config/config.py @@ -36,7 +36,7 @@ def get_trusted_master_server_by_name(jwt, base_url, trustedmasterservername): resp = requests.get(url, headers=headers, params=query_params, verify=False) if resp.status_code != 200: - raise Exception('GET trusted master server with specific name failed with status code {} and {}'.format(resp.status_code, resp.json())) + raise Exception('GET Trusted master server with specific name failed with status code {} and {}'.format(resp.status_code, resp.json())) return resp.json() diff --git a/recipes/python/config/trust_management_crud_operation.py b/recipes/python/config/trust_management_crud_operation.py index 257dd57..1c309b2 100644 --- a/recipes/python/config/trust_management_crud_operation.py +++ b/recipes/python/config/trust_management_crud_operation.py @@ -69,6 +69,7 @@ def read_command_line_arguments(): elif trusted_master_server_name == "": print("Please provide the value for 'trusted_master_server_name'") exit() + print_usage() diff --git a/snippets/powershell/config/Delete-NB-delete-trust.ps1 b/snippets/powershell/config/Delete-NB-delete-trust.ps1 index 3855625..cc8490d 100644 --- a/snippets/powershell/config/Delete-NB-delete-trust.ps1 +++ b/snippets/powershell/config/Delete-NB-delete-trust.ps1 @@ -57,7 +57,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 b/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 index 405095d..b4aa66c 100644 --- a/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 +++ b/snippets/powershell/config/Get-NB-get-media-server-by-name.ps1 @@ -57,7 +57,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Get-NB-get-media-server.ps1 b/snippets/powershell/config/Get-NB-get-media-server.ps1 index b37a7ec..9343a27 100644 --- a/snippets/powershell/config/Get-NB-get-media-server.ps1 +++ b/snippets/powershell/config/Get-NB-get-media-server.ps1 @@ -56,7 +56,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 b/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 index 6ca6852..da6ee24 100644 --- a/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 +++ b/snippets/powershell/config/Get-NB-get-remote-master-server-cacert-by-name.ps1 @@ -57,7 +57,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 b/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 index f2722df..7055a3c 100644 --- a/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 +++ b/snippets/powershell/config/Get-NB-get-trusted-master-server-by-name.ps1 @@ -57,7 +57,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 b/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 index 9fcdf52..8be212b 100644 --- a/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 +++ b/snippets/powershell/config/Get-NB-get-trusted-master-server-list.ps1 @@ -56,7 +56,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 b/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 index 3b9a5d6..5428f90 100644 --- a/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 +++ b/snippets/powershell/config/Patch-NB-update-trusted-master-server.ps1 @@ -58,7 +58,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### diff --git a/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 b/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 index 23d8d0a..7d4ee3a 100644 --- a/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 +++ b/snippets/powershell/config/Post-NB-create-trusted-master-server.ps1 @@ -56,7 +56,6 @@ function InitialSetup() } InitialSetup - ##################################################################### # Global Variables ##################################################################### @@ -117,7 +116,6 @@ $json = '{ } } ' - $response_create_trust = Invoke-WebRequest ` -Uri $base_uri ` -Method POST ` diff --git a/snippets/powershell/config/README.md b/snippets/powershell/config/README.md index f3c79a0..673b44e 100644 --- a/snippets/powershell/config/README.md +++ b/snippets/powershell/config/README.md @@ -1,4 +1,4 @@ -### NetBackup API Code Samples for PowerShell +#### NetBackup API Code Samples for PowerShell This directory contains code samples to invoke NetBackup REST APIs using PowerShell. diff --git a/snippets/python/config/README.md b/snippets/python/config/README.md index ce0647f..43aa8ba 100644 --- a/snippets/python/config/README.md +++ b/snippets/python/config/README.md @@ -1,4 +1,4 @@ -### NetBackup API Code Samples for Python +#### NetBackup API Code Samples for Python This directory contains code samples to invoke NetBackup REST APIs using Python. diff --git a/snippets/python/config/config.py b/snippets/python/config/config.py index a039629..856b161 100644 --- a/snippets/python/config/config.py +++ b/snippets/python/config/config.py @@ -154,5 +154,5 @@ def patch_trusted_master_server(jwt, base_url, file_name, trustedmasterservernam if resp.status_code != 200: raise Exception('Update trust between masters API failed with status code {} and {}'.format(resp.status_code, resp.json())) - print("\nThe trust is Upadated with status code: {}\n".format(resp.status_code)) + print("\nThe Trust is Upadated with status code: {}\n".format(resp.status_code)) return resp.json() diff --git a/snippets/python/config/create_trusted_master_server.py b/snippets/python/config/create_trusted_master_server.py index 0d2bf8d..2a68f4b 100644 --- a/snippets/python/config/create_trusted_master_server.py +++ b/snippets/python/config/create_trusted_master_server.py @@ -57,6 +57,7 @@ def read_command_line_arguments(): print("Please provide the value for 'payload'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/delete_trust.py b/snippets/python/config/delete_trust.py index ab942a9..fd4fa55 100644 --- a/snippets/python/config/delete_trust.py +++ b/snippets/python/config/delete_trust.py @@ -57,6 +57,7 @@ def read_command_line_arguments(): print("Please provide the value for 'trustedmasterservername'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/get_media_server.py b/snippets/python/config/get_media_server.py index a30adbf..7d895ba 100644 --- a/snippets/python/config/get_media_server.py +++ b/snippets/python/config/get_media_server.py @@ -52,6 +52,7 @@ def read_command_line_arguments(): print("Please provide the value for 'password'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/get_media_server_by_name.py b/snippets/python/config/get_media_server_by_name.py index 6cf4893..240d61c 100644 --- a/snippets/python/config/get_media_server_by_name.py +++ b/snippets/python/config/get_media_server_by_name.py @@ -57,6 +57,7 @@ def read_command_line_arguments(): print("Please provide the value for 'medianame'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/get_remote_master_server_cacert_by_name.py b/snippets/python/config/get_remote_master_server_cacert_by_name.py index d2d10b9..392c466 100644 --- a/snippets/python/config/get_remote_master_server_cacert_by_name.py +++ b/snippets/python/config/get_remote_master_server_cacert_by_name.py @@ -57,6 +57,7 @@ def read_command_line_arguments(): print("Please provide the value for 'remotemasterserver'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/get_trusted_master_server_by_name.py b/snippets/python/config/get_trusted_master_server_by_name.py index 79b950e..805823f 100644 --- a/snippets/python/config/get_trusted_master_server_by_name.py +++ b/snippets/python/config/get_trusted_master_server_by_name.py @@ -57,6 +57,7 @@ def read_command_line_arguments(): print("Please provide the value for 'trustedmasterservername'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/get_trusted_master_server_list.py b/snippets/python/config/get_trusted_master_server_list.py index 79c9166..e509305 100644 --- a/snippets/python/config/get_trusted_master_server_list.py +++ b/snippets/python/config/get_trusted_master_server_list.py @@ -52,6 +52,7 @@ def read_command_line_arguments(): print("Please provide the value for 'password'") exit() + print_usage() read_command_line_arguments() diff --git a/snippets/python/config/patch_trusted_master_server.py b/snippets/python/config/patch_trusted_master_server.py index bdccbfb..7424ed3 100644 --- a/snippets/python/config/patch_trusted_master_server.py +++ b/snippets/python/config/patch_trusted_master_server.py @@ -63,6 +63,7 @@ def read_command_line_arguments(): print("Please provide the value for 'trustedmasterservername'") exit() + print_usage() read_command_line_arguments()