使用Powershell通过API在RabbitMQ中创建用户

时间:2015-04-02 00:15:02

标签: api powershell rabbitmq

我正在尝试创建一个powershell脚本,在新机器上安装RabbitMQ后设置用户“George”。

我无法弄清楚为什么这个脚本不起作用。

最后一步给了我404 {“错误”:“找不到对象”,“原因”:“\”未找到\“\ n”}

$secpasswd = ConvertTo-SecureString 'guest' -AsPlainText -Force
$credGuest = New-Object System.Management.Automation.PSCredential ('guest', $secpasswd)

$secpasswd2 = ConvertTo-SecureString 'george' -AsPlainText -Force
$credAdmin2 = New-Object System.Management.Automation.PSCredential ('george', $secpasswd2)


$body = @{
               'password' = 'george'
               'tags' = 'administrator'
           } | ConvertTo-Json

$vhosts1 = ''
$vhosts1 = Invoke-RestMethod 'http://localhost:15672/api/users/george' -credential $credGuest  -Method Put -ContentType "application/json" -Body $body

write '1:'   $vhosts1

$vhosts2 = Invoke-RestMethod 'http://localhost:15672/api/permissions/%2f/'  -Method get  -credential $credAdmin2

write '2:'  $vhosts2


$body2 = @{
               'username' = 'george'
               'vhost' = '/'
               'configure' = '.*'
               'write' = '.*'
               'read' = '.*'
           } | ConvertTo-Json

write '3:' $body2

$vhosts3 = Invoke-RestMethod 'http://localhost:15672/api/permissions/%2f/george' -credential $credGuest  -Method Put -ContentType "application/json" -Body $body2

write '4:' $vhosts3

我也试过像这样格式化最后一步:

http://localhost:15672/api/permissions/george

相同的404错误。

我已经尝试了大约20,000种不同的方式发送命令。从完美匹配其他例子到尝试一些抽象艺术和伏都教魔法。在观看RabbitMQ的管理工具时,我可以看到George已经创建。而他有一个空虚的幽灵。所以前3个步骤完美无缺。

3 个答案:

答案 0 :(得分:6)

好男人,你知道我爱你,因为我今晚之前从未听说过RabbitMQ。在过去的一小时里,我已经将它安装在我的Windows机器上,现在已经使用this awesome guide here to the API了解了它是如何工作的。

因此,当我一步一步地运行相同的过程时,我发现一切都在你所说的那样发生:

乔治被创造出来: enter image description here

由于您的第二步是列出运行API调用的用户的当前权限,我接下来会看到来宾帐户的输出,该帐户具有完整的权限。然后转到步骤3,它为George建立目标权限。

username  : george
write     : .*
read      : .*
configure : .*
vhost     : /

从这里开始,步骤4.当我在上一步之后手动运行此步骤时...它可以正常工作!但是,如果我运行得太快,如果我立即运行整个脚本,我将收到404错误。似乎在RabbitMQ的幕后,需要稍微暂停以便用新用户更新文件。当我删除用户并再次尝试整个脚本时,我的每一步都得到了404,非常多。

但是,如果我添加一点Start-Sleep 5来暂停5秒......

enter image description here

整个过程完成。添加暂停的关键位置是在步骤1之后,似乎需要大约四到五秒钟。

做得很漂亮

当然,我当然不能就此止步,所以我决定添加一些小的暂停来提高输出可读性,并确保每个操作都完成。我在步骤完成后添加了一些看待“OK”消息的purty,然后通过为当前用户执行最后一次API调用来添加权限的完成确认。

这是完成的输出

enter image description here

已完成的脚本

$secpasswd = ConvertTo-SecureString 'guest' -AsPlainText -Force
$credGuest = New-Object System.Management.Automation.PSCredential ('guest', $secpasswd)

$secpasswd2 = ConvertTo-SecureString 'stephen' -AsPlainText -Force
$credAdmin2 = New-Object System.Management.Automation.PSCredential ('stephen', $secpasswd2)


$body = @{
               'password' = 'stephen'
               'tags' = 'administrator'
           } | ConvertTo-Json

Write-host "About to create new user $(($body | ConvertFrom-Json).Password)..." -NoNewline
$vhosts1 = Invoke-RestMethod 'http://localhost:15672/api/users/stephen' -credential $credGuest  -Method Put -ContentType "application/json" -Body $body
start-sleep 5 
Write-host "OK" -ForegroundColor Green
Start-Sleep -Milliseconds 400
Write-Host  '1: Results:'   $vhosts1

$body2 = @{
               'username' = 'stephen'
               'vhost' = '/'
               'configure' = '.*'
               'write' = '.*'
               'read' = '.*'
           } | ConvertTo-Json

Write-Output "Desired perms for new user $(($body | ConvertFrom-Json).Password)" $body2

Write-host "Setting perms for new user..." -NoNewline

$vhosts3 = Invoke-RestMethod 'http://localhost:15672/api/permissions/%2f/stephen' -credential $credGuest  -Method Put -ContentType "application/json" -Body $body2
Start-sleep 5
Write-host "OK" -ForegroundColor Green
Start-Sleep -Milliseconds 400
write '4:' $vhosts3

'Retrieiving perms for new user to confirm...'
Invoke-RestMethod 'http://localhost:15672/api/permissions/%2f/stephen'  -Method get  -credential $credAdmin2

现在我希望我有机会再次使用RabbitMQ ......

答案 1 :(得分:0)

终于弄明了其他人为了与RabbitMQ api进行交互而编写的powershell库。

https://github.com/mariuszwojcik/RabbitMQTools/blob/master/en-US/about_UnEsapingDotsAndSlashes.help.txt

我发现某些版本的powershell在将它发送给兔子之前用/替换%2f。如果您使用此处的人员功能:

https://github.com/mariuszwojcik/RabbitMQTools

一切都运行得很漂亮。他放在一起真是太棒了。

答案 2 :(得分:0)

我迟到了这个问题。我也喜欢Powershell,但我使用.bat文件来运行本机RabbitMQ命令,如下所示。我需要添加一个用户,一个vhost,并将这两个挂起来。我想要一个脚本,所以任何新开发人员都可以运行它。

cd /D c:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.14\sbin
echo cd completed 
call rabbitmqctl add_user bts mypass
call rabbitmqctl set_user_tags bts administrator 
call rabbitmqctl add_vhost base 
call rabbitmqctl set_permissions -p base bts ".*" ".*" ".*" 

Echo ----List Command to confirm results -------- 
call rabbitmqctl list_vhosts
call rabbitmqctl list_user_permissions bts

我想你也可以从Powershell打电话给我们。我猜这个缺点是你必须在运行RabbitMQ的机器上。