Skip to content

Commit

Permalink
Merge pull request #452 from rubrikinc/mwpreston-244
Browse files Browse the repository at this point in the history
Issue 244 - cmdlets to manage user accounts
  • Loading branch information
shamsway authored Sep 23, 2019
2 parents 9619512 + 3e8afaf commit 1237425
Show file tree
Hide file tree
Showing 11 changed files with 652 additions and 6 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/).

## [Unreleased]

## 2019-09-19

### Added [Cmdlets to manage Rubrik users]

* Added Get-RubrikUser, New-RubrikUser, Remove-RubrikUser and Set-RubrikUser and respective unit tests to manage user accounts.
* Addresses [Issue 244](https://github.com/rubrikinc/rubrik-sdk-for-powershell/issues/244)

## 2019-09-12

### Changed [Added ability to rename Managed Volumes]
Expand Down
66 changes: 66 additions & 0 deletions Rubrik/Private/Get-RubrikAPIData.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,21 @@ function Get-RubrikAPIData($endpoint) {
Success = '200'
}
}
'Get-RubrikUser' = @{
'1.0' = @{
Description = 'Retrieves settings related to a given user within the Rubrik cluster'
URI = '/api/internal/user'
Method = 'Get'
Body = ''
Query = @{
username = 'username'
auth_domain_id = 'auth_domain_id'
}
Result = ''
Filter = ''
Success = '200'
}
}
'Get-RubrikManagedVolume' = @{
'1.0' = @{
Description = 'Returns a list of summary information for Rubrik Managed Volumes'
Expand Down Expand Up @@ -1188,6 +1203,26 @@ function Get-RubrikAPIData($endpoint) {
Success = '201'
}
}
'New-RubrikUser' = @{
'1.0' = @{
Description = 'Creates a new Rubrik user.'
URI = '/api/internal/user'
Method = 'Post'
Body = @{
username = 'username'
password = 'password'
firstName = 'firstName'
lastName = 'lastName'
emailAddress = 'emailAddress'
contactNumber = 'contactNumber'
mfaServerId = 'mfaServerId'
}
Query = ''
Result = ''
Filter = ''
Success = '200'
}
}
'New-RubrikSnapshot' = @{
'1.0' = @{
Description = 'Create an on-demand snapshot for the given object ID'
Expand Down Expand Up @@ -1863,6 +1898,25 @@ function Get-RubrikAPIData($endpoint) {
Success = '200'
}
}
'Set-RubrikUser' = @{
'1.0' = @{
Description = 'Updates a Rubrik user.'
URI = '/api/internal/user/{id}'
Method = 'Patch'
Body = @{
password = 'password'
firstName = 'firstName'
lastName = 'lastName'
emailAddress = 'emailAddress'
contactNumber = 'contactNumber'
mfaServerId = 'mfaServerId'
}
Query = ''
Result = ''
Filter = ''
Success = '200'
}
}
'Set-RubrikVM' = @{
'1.0' = @{
Description = 'Update VM with specified properties'
Expand Down Expand Up @@ -2031,6 +2085,18 @@ function Get-RubrikAPIData($endpoint) {
Success = '202'
}
}
'Remove-RubrikUser' = @{
'1.0' = @{
Description = 'Deletes a specified user from the Rubrik cluster'
URI = '/api/internal/user/{id}'
Method = 'Delete'
Body = ''
Query = ''
Result = ''
Filter = ''
Success = '200'
}
}
'Set-RubrikLogShipping' = @{
'1.0' = @{
Description = 'Update a specified log shipping configuration'
Expand Down
97 changes: 97 additions & 0 deletions Rubrik/Public/Get-RubrikUser.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#requires -Version 3
function Get-RubrikUser
{
<#
.SYNOPSIS
Gets settings of a Rubrik user
.DESCRIPTION
The Get-RubrikUser cmdlet is used to query the Rubrik cluster to retrieve a list of settings around a Rubrik user account.
.NOTES
Written by Mike Preston for community usage
Twitter: @mwpreston
GitHub: mwpreston
.LINK
http://rubrikinc.github.io/rubrik-sdk-for-powershell/reference/Get-RubrikUser.html
.EXAMPLE
Get-RubrikUser
This will return settings of all of the user accounts (local and LDAP) configured within the Rubrik cluster.
.EXAMPLE
Get-RubrikUser -authDomainId 'local'
This will return settings of all of the user accounts belonging to the local authoriation domain.
.EXAMPLE
Get-RubrikUser -username 'john.doe'
This will return settings for the user account with the username of john.doe configured within the Rubrik cluster.
.EXAMPLE
Get-RubrikUser -authDomainId '1111-222-333'
This will return settings of all of the user accounts belonging to the specified authoriation domain.
.EXAMPLE
Get-RubrikUser -id '1111-22222-33333-4444-5555'
This will return detailed information about the user with the specified ID.
#>

[CmdletBinding()]
Param(
# Username to filter on
[Parameter(ParameterSetName='Query')]
[String] $Username,
# AuthDomainId to filter on
[Parameter(ParameterSetName='Query')]
[Alias('auth_domain_id')]
[String]$AuthDomainId,
# User ID
[Parameter(ParameterSetName='ID',Mandatory = $true,ValueFromPipelineByPropertyName = $true)]
[String]$Id,
# Rubrik server IP or FQDN
[Parameter(ParameterSetName='Query')]
[Parameter(ParameterSetName='ID')]
[String]$Server = $global:RubrikConnection.server,
# API version
[Parameter(ParameterSetName='Query')]
[Parameter(ParameterSetName='ID')]
[String]$api = $global:RubrikConnection.api
)

Begin {

# The Begin section is used to perform one-time loads of data necessary to carry out the function's purpose
# If a command needs to be run with each iteration or pipeline input, place it in the Process section

# Check to ensure that a session to the Rubrik cluster exists and load the needed header data for authentication
Test-RubrikConnection

# API data references the name of the function
# For convenience, that name is saved here to $function
$function = $MyInvocation.MyCommand.Name

# Retrieve all of the URI, method, body, query, result, filter, and success details for the API endpoint
Write-Verbose -Message "Gather API Data for $function"
$resources = Get-RubrikAPIData -endpoint $function
Write-Verbose -Message "Load API data for $($resources.Function)"
Write-Verbose -Message "Description: $($resources.Description)"

}

Process {

# If local is passed for auth domain, get the local auth domain ID.
if ($AuthDomainId -eq 'local') {
$AuthDomainId = (Get-RubrikLDAP | Where-Object {$_.domainType -eq 'LOCAL'}).id
}
$uri = New-URIString -server $Server -endpoint ($resources.URI) -id $id
$uri = Test-QueryParam -querykeys ($resources.Query.Keys) -parameters ((Get-Command $function).Parameters.Values) -uri $uri
$body = New-BodyString -bodykeys ($resources.Body.Keys) -parameters ((Get-Command $function).Parameters.Values)
$result = Submit-Request -uri $uri -header $Header -method $($resources.Method) -body $body
$result = Test-ReturnFormat -api $api -result $result -location $resources.Result
$result = Test-FilterObject -filter ($resources.Filter) -result $result

return $result
} # End of process
} # End of function
90 changes: 90 additions & 0 deletions Rubrik/Public/New-RubrikUser.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
#requires -Version 3
function New-RubrikUser
{
<#
.SYNOPSIS
Creates a new user
.DESCRIPTION
The New-RubrikUser cmdlet is used to create a new user within the Rubrik cluster.
NOTE: The underlying API endpoints used by this cmdlet are restricted. API token authentication cannot be used with this cmdlet. You must use username/password authentication.
.NOTES
Written by Mike Preston for community usage
Twitter: @mwpreston
GitHub: mwpreston
.LINK
http://rubrikinc.github.io/rubrik-sdk-for-powershell/reference/New-RubrikUser.html
.EXAMPLE
New-RubrikUser -Username 'jdoe' -password (ConvertTo-SecureString -String 'secretpassword123!secret' -asplaintext -force)
This will create a new user with a username of jdoe and the specified password
.EXAMPLE
New-RubrikUser -Username 'jdoe' -password (ConvertTo-SecureString -String 'secretpassword123!secret' -asplaintext -force) -FirstName 'John' -LastName 'Doe'
This will create a new user with a username of jdoe, the specified password, firstname of John, and LastName as Doe
#>

[CmdletBinding(SupportsShouldProcess = $true,ConfirmImpact = 'High')]
Param(
# Username to assign to the created user
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[String]$Username,
# Password for newly created user
[Parameter(Mandatory=$true)]
[ValidateNotNullorEmpty()]
[SecureString]$Password,
# Users first name
[String]$FirstName,
#Users last name
[String]$LastName,
#Users email
[String]$EmailAddress,
#Users Contact Number
[String]$ContactNumber,
#MFA Server ID associated to user
[String]$MfaServerId,
# Rubrik server IP or FQDN
[String]$Server = $global:RubrikConnection.server,
# API version
[String]$api = $global:RubrikConnection.api
)

Begin {

# The Begin section is used to perform one-time loads of data necessary to carry out the function's purpose
# If a command needs to be run with each iteration or pipeline input, place it in the Process section

# Check to ensure that a session to the Rubrik cluster exists and load the needed header data for authentication
Test-RubrikConnection

# API data references the name of the function
# For convenience, that name is saved here to $function
$function = $MyInvocation.MyCommand.Name

# Retrieve all of the URI, method, body, query, result, filter, and success details for the API endpoint
Write-Verbose -Message "Gather API Data for $function"
$resources = Get-RubrikAPIData -endpoint $function
Write-Verbose -Message "Load API data for $($resources.Function)"
Write-Verbose -Message "Description: $($resources.Description)"

}

Process {

# Convert SecureString password to send to API endpoint as string
[String]$Password = [String](New-Object PSCredential "user",$Password).GetNetworkCredential().Password

$uri = New-URIString -server $Server -endpoint ($resources.URI) -id $id
$uri = Test-QueryParam -querykeys ($resources.Query.Keys) -parameters ((Get-Command $function).Parameters.Values) -uri $uri
$body = New-BodyString -bodykeys ($resources.Body.Keys) -parameters ((Get-Command $function).Parameters.Values)
$result = Submit-Request -uri $uri -header $Header -method $($resources.Method) -body $body
$result = Test-ReturnFormat -api $api -result $result -location $resources.Result
$result = Test-FilterObject -filter ($resources.Filter) -result $result

return $result

} # End of process
} # End of function
73 changes: 73 additions & 0 deletions Rubrik/Public/Remove-RubrikUser.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#requires -Version 3
function Remove-RubrikUser
{
<#
.SYNOPSIS
Removes a Rubrik user
.DESCRIPTION
The Remove-RubrikUser cmdlet is used to remove a user from the Rubrik cluster.
.NOTES
Written by Mike Preston for community usage
Twitter: @mwpreston
GitHub: mwpreston
.LINK
http://rubrikinc.github.io/rubrik-sdk-for-powershell/reference/Remove-RubrikUser.html
.EXAMPLE
Remove-RubrikUser -id "11111111-2222-3333-4444-555555555555"
This will remove the user matching id "11111111-2222-3333-4444-555555555555".
.EXAMPLE
Get-RubrikUser -Username 'john.doe' | Remove-RubrikUser
This will remove the user with the matching username of john.doe
#>

[CmdletBinding(SupportsShouldProcess = $true,ConfirmImpact = 'High')]
Param(
# ID of user to remove.
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName = $true)]
[ValidateNotNullOrEmpty()]
[String]$Id,
# Rubrik server IP or FQDN
[String]$Server = $global:RubrikConnection.server,
# API version
[String]$api = $global:RubrikConnection.api
)

Begin {

# The Begin section is used to perform one-time loads of data necessary to carry out the function's purpose
# If a command needs to be run with each iteration or pipeline input, place it in the Process section

# Check to ensure that a session to the Rubrik cluster exists and load the needed header data for authentication
Test-RubrikConnection

# API data references the name of the function
# For convenience, that name is saved here to $function
$function = $MyInvocation.MyCommand.Name

# Retrieve all of the URI, method, body, query, result, filter, and success details for the API endpoint
Write-Verbose -Message "Gather API Data for $function"
$resources = Get-RubrikAPIData -endpoint $function
Write-Verbose -Message "Load API data for $($resources.Function)"
Write-Verbose -Message "Description: $($resources.Description)"

}

Process {

$uri = New-URIString -server $Server -endpoint ($resources.URI) -id $id
$uri = Test-QueryParam -querykeys ($resources.Query.Keys) -parameters ((Get-Command $function).Parameters.Values) -uri $uri
$body = New-BodyString -bodykeys ($resources.Body.Keys) -parameters ((Get-Command $function).Parameters.Values)
$result = Submit-Request -uri $uri -header $Header -method $($resources.Method) -body $body
$result = Test-ReturnFormat -api $api -result $result -location $resources.Result
$result = Test-FilterObject -filter ($resources.Filter) -result $result

return $result

} # End of process
} # End of function
Loading

0 comments on commit 1237425

Please sign in to comment.