Skip to content

Commit e09016d

Browse files
Sample Perl scripts for converting rbac principals behind registered API Keys
1 parent c850f79 commit e09016d

5 files changed

Lines changed: 248 additions & 0 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# NetBackup API Code Examples for Perl
2+
3+
This directory contains code samples for converting RBAC principals behind registered API keys.
4+
5+
## Disclaimer
6+
7+
These scripts are only meant to be used as reference. They are not intended to be used in production environment.
8+
9+
## Prerequisites
10+
11+
- NetBackup 8.3 or higher
12+
- Perl 5.20.2 or higher
13+
14+
## Executing the recipes in Perl
15+
16+
Use the following command to get RBAC principals behind registered API keys, get existing roles for RBAC gen1 roles, and create new access control roles accordingly.
17+
18+
- `perl list_api_keys.pl -hostname <hostname> -username <username> -password <password> [-domain_name <domain_name>] [-domain_type <domain_type>]`
19+
20+
- `perl list_gen1_roles.pl -hostname <hostname> -username <username> -password <password> [-domain_name <domain_name>] [-domain_type <domain_type>]`
21+
22+
- `perl create_access_control_role.pl -hostname <hostname> -username <username> -password <password> -role_name <role_name> [-role_description <role_description>] [-domain_name <domain_name>] [-domain_type <domain_type>]`
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/usr/bin/env perl
2+
3+
use LWP::UserAgent;
4+
use JSON;
5+
6+
my $content_type = "application/vnd.netbackup+json; version=4.0";
7+
8+
# Initialize HTTP client
9+
my $http = LWP::UserAgent->new(
10+
ssl_opts => { verify_hostname => 0, verify_peer => 0 },
11+
protocols_allowed => ['https']
12+
);
13+
14+
# List api keys
15+
sub list_api_keys {
16+
my ($base_url, $token) = @_;
17+
18+
my $media_type = "application/vnd.netbackup+json;version=4";
19+
my $api_keys_url = "$base_url/security/api-keys";
20+
21+
# Update http client with default header
22+
$http->default_header('Accept' => $media_type);
23+
$http->default_header('Authorization' => $token);
24+
25+
my $response = $http->get($api_keys_url);
26+
27+
unless ($response->is_success) {
28+
print "HTTP GET error code: ", $response->code, "\n";
29+
print "HTTP GET error message: ", $response->message, "\n";
30+
31+
die "Failed to get api keys.\n";
32+
}
33+
34+
my $response_content = decode_json($response->content);
35+
print "API Keys: ", $response_content, "\n";
36+
}
37+
38+
# List rbac roles
39+
sub list_gen1_roles {
40+
my ($base_url, $token) = @_;
41+
42+
my $media_type = "application/vnd.netbackup+json;version=1";
43+
my $gen1_roles_url = "$base_url/rbac/roles";
44+
45+
$http->default_header('Accept' => $media_type);
46+
$http->default_header('Authorization' => $token);
47+
48+
my $response = $http->get($gen1_roles_url);
49+
50+
unless ($response->is_success) {
51+
print "HTTP GET error code: ", $response->code, "\n";
52+
print "HTTP GET error message: ", $response->message, "\n";
53+
54+
die "Failed to get Gen-1 roles.\n";
55+
}
56+
57+
my $response_content = decode_json($response->content);
58+
print "Gen-1 roles: ", $response_content, "\n";
59+
}
60+
61+
# Create access control role
62+
sub create_access_control_role {
63+
my ($base_url, $token, $name, $desc) = @_;
64+
65+
my $media_type = "application/vnd.netbackup+json;version=4";
66+
my $access_control_roles_url = "$base_url/access-control/roles";
67+
68+
$http->default_header('Accept' => $media_type);
69+
$http->default_header('Authorization' => $token);
70+
71+
my %role = (
72+
'data' => {
73+
'type' => 'accessControlRole',
74+
'attribute' => {
75+
'name' => $name,
76+
'description' => $desc
77+
}
78+
}
79+
);
80+
81+
my $role_body = encode_json(\%role);
82+
83+
my $response = $http->post($access_control_role_url, 'Content-Type' => $media_type, Content => $role_body);
84+
85+
unless ($response->is_success) {
86+
print "HTTP POST error code: ", $response->code, "\n";
87+
print "HTTP POST error message: ", $response->message, "\n";
88+
89+
die "Failed to create $name role.\n";
90+
}
91+
92+
my $response_content = decode_json($response->content);
93+
my $new_role_id = $response_content->{data}{id};
94+
print "$name role created with ID $new_role_id\n";
95+
}
96+
97+
1;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
#!/usr/bin/env perl
2+
3+
use Getopt::Long;
4+
5+
require 'api_requests.pl';
6+
require 'access_control_api_requests.pl';
7+
8+
my $hostname;
9+
my $username;
10+
my $password;
11+
my $domain_name;
12+
my $domain_type;
13+
my $role_name;
14+
my $role_description;
15+
16+
my $base_url;
17+
my $token;
18+
19+
GetOptions(
20+
'hostname=s' => \$hostname,
21+
'username=s' => \$username,
22+
'password=s' => \$password,
23+
'domain_name=s' => \$domain_name,
24+
'domain_type=s' => \$domain_type,
25+
'role_name=s' => \$role_name,
26+
'role_description=s' => \$role_description
27+
) or pod2usage(2);
28+
29+
$hostname ne "" or die "Please provide a value for '--hostname'\n";
30+
31+
$username ne "" or die "Please provide a value for '--username'\n";
32+
33+
$password ne "" or die "Please provide a value for '--password'\n";
34+
35+
$role_name ne "" or die "Please provide a value for '--role_name'\n";
36+
37+
$base_url = "https://$hostname/netbackup";
38+
$token = perform_login($base_url, $username, $password, $domain_name, $domain_type);
39+
40+
create_access_control_role($base_url, $token, $role_name, $role_description);
41+
42+
43+
sub print_usage {
44+
say "Usage:";
45+
say "perl create_access_control_role.pl -hostname <master_server> -username <username> -password <password> -role_name <role_name> [-role_description <role_description>] [-domain_name <domain_name>] [-domain_type <domain_type>]";
46+
}
47+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env perl
2+
3+
use Getopt::Long;
4+
5+
require 'api_requests.pl';
6+
require 'access_control_api_requests.pl';
7+
8+
my $hostname;
9+
my $username;
10+
my $password;
11+
my $domain_name;
12+
my $domain_type;
13+
14+
my $base_url;
15+
my $token;
16+
17+
GetOptions(
18+
'hostname=s' => \$hostname,
19+
'username=s' => \$username,
20+
'password=s' => \$password,
21+
'domain_name=s' => \$domain_name,
22+
'domain_type=s' => \$domain_type
23+
) or pod2usage(2);
24+
25+
$hostname ne "" or die "Please provide a value for '--hostname'\n";
26+
27+
$username ne "" or die "Please provide a value for '--username'\n";
28+
29+
$password ne "" or die "Please provide a value for '--password'\n";
30+
31+
$base_url = "https://$hostname/netbackup";
32+
$token = perform_login($base_url, $username, $password, $domain_name, $domain_type);
33+
34+
list_api_keys($base_url, $token);
35+
36+
37+
sub print_usage {
38+
say "Usage:";
39+
say "perl list_api_keys.pl -hostname <master_server> -username <username> -password <password> [-domain_name <domain_name>] [-domain_type <domain_type>]";
40+
}
41+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env perl
2+
3+
use Getopt::Long;
4+
5+
require 'api_requests.pl';
6+
require 'access_control_api_requests.pl';
7+
8+
my $hostname;
9+
my $username;
10+
my $password;
11+
my $domain_name;
12+
my $domain_type;
13+
14+
my $base_url;
15+
my $token;
16+
17+
GetOptions(
18+
'hostname=s' => \$hostname,
19+
'username=s' => \$username,
20+
'password=s' => \$password,
21+
'domain_name=s' => \$domain_name,
22+
'domain_type=s' => \$domain_type
23+
) or pod2usage(2);
24+
25+
$hostname ne "" or die "Please provide a value for '--hostname'\n";
26+
27+
$username ne "" or die "Please provide a value for '--username'\n";
28+
29+
$password ne "" or die "Please provide a value for '--password'\n";
30+
31+
$base_url = "https://$hostname/netbackup";
32+
$token = perform_login($base_url, $username, $password, $domain_name, $domain_type);
33+
34+
list_gen1_roles($base_url, $token);
35+
36+
37+
sub print_usage {
38+
say "Usage:";
39+
say "perl list_gen1_roles.pl -hostname <master_server> -username <username> -password <password> [-domain_name <domain_name>] [-domain_type <domain_type>]";
40+
}
41+

0 commit comments

Comments
 (0)