Powershell и Mon go API - PullRequest
       5

Powershell и Mon go API

1 голос
/ 18 апреля 2020

В последние дни я делал скрипт для создания коллекции (с этим командлетом https://github.com/nightroman/Mdbc) и пользователя базы данных и роли с mon go atlas api через powershell. Скрипт работает нормально, но я не смог создать элемент управления, чтобы проверить, существует ли уже коллекция (я могу проверить среду на csv, чтобы создать объект в правильной среде). Так, например, если я запускаю скрипт для создания в одной среде двух ролей в одной коллекции, я получаю сообщение об ошибке, что коллекция существует:

enter image description here

Как я могу сделать элемент управления для проверки во всех средах и пропустить создание коллекции, если она существует? Вот этот код:

    $filepath = "namecsv.csv" 
$listas = Import-CSV $filepath -delimiter ";" 
foreach ($lista in $listas) {                      
  $db = $lista.db
  $collection = $lista.collection
  $rolename = $lista.roleName
#dev
if ($rolename -imatch '_DV_' ) {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc
                Write-Host "Collection $collection creata sul db $db di dev" -ForegroundColor Green               
}
#test
if ($rolename -imatch '_TS_') {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc    
                Write-Host "Collection $collection creata sul db $db di test" -ForegroundColor Green

}
#uat
if ($rolename -imatch '_UT_') {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc   
                Write-Host "Collection $collection creata sul db $db di uat" -ForegroundColor Green

}  
#prod
if ($rolename -imatch '_PR_') {
     Connect-Mdbc -ConnectionString "mongodb+srv://username:password@onnectionstring"
                $dbc = Get-MdbcDatabase -Name $db
                Add-MdbcCollection -Name $collection -Database $dbc
                Write-Host "Collection $collection creata sul db $db di prod" -ForegroundColor Green

}
}

Вот как структурирован CSV:

  db     collection  roleName
  dbname collection1 GROUPNAME_DV_RW
  dbname collection1 GROUPNAME_DV_RO

Если может помочь, вот что я получаю с помощью команды cmdlet get-mdb c collection:

Get-MdbcCollection

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

спасибо Роману за помощь, но этот код не работал (может быть, я не понимаю, куда поместить), поэтому я изменил «если» следующим образом, и теперь скрипт делает то, что я хочу:

if ($rolename -imatch '_TS_') {

 Connect-Mdbc -ConnectionString "mongodb+srv://username:password@connectionstring"
 #### GET COLLECTIONS ###
 $dbtest = Get-MdbcDatabase -name $db
 $colltest = Get-MdbcCollection -Database $dbtest 

    if ($colltest.CollectionNamespace.CollectionName -ceq $collection) {

            Write-Host "Collection $collection esistente su $db di TEST" -ForegroundColor Yellow
}
else {

        Add-MdbcCollection -Name $collection -Database $dbtest 
        Write-Host "Collection $collection creata sul db $db di TEST" -ForegroundColor Green

    }
}

спасибо также за ваш командлет:)

0 голосов
/ 18 апреля 2020

Ты почти понял это. Используйте следующий код:

# get all collections
$dbcol = Get-MdbcCollection -Database dbs

# get/check the collection "test" (it is $null if it does not exist)
$colTest = $dbcol | Where-Object {$_.CollectionNamespace.CollectionName -ceq "test"}

Обратите внимание, что Get-MdbcCollection test всегда возвращает ненулевые объекты коллекции, существующие или нет (но готовые работать независимо).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...