I a*_*m L 5 python azure azure-virtual-machine azure-powershell azure-cli
我想使用Azure CLI获取资源组中所有VM的列表。但是我想使用python脚本实现相同的功能。
例如,我将在Azure CLI中使用以下命令列出资源组中的VM:
“ az vm列表-g MyResourceGroup”
但是,我希望python脚本执行相同的操作,而我只需要在python程序中合并CLI命令即可。
最近几天我一直在执行此操作。@cbehrenberg提供的方法主要是我使用的方法,但是我发现无需使用临时文件就可以做到。而是直接从azure客户端捕获输出。认为它可能有用。
from azure.cli.core import get_default_cli
def az_cli (args_str):
args = args_str.split()
cli = get_default_cli()
cli.invoke(args)
if cli.result.result:
return cli.result.result
elif cli.result.error:
raise cli.result.error
return True
Run Code Online (Sandbox Code Playgroud)
然后以相同的方式调用:
from azhelper import az_cli
response = az_cli("vm list")
print("vm's: %s" % (response))
Run Code Online (Sandbox Code Playgroud)
小智 6
使用子进程解决方案是有问题的,因为子进程不检查在 Windows 上找到 Azure CLI 的路径。使用“cmd -c”将是特定于 Windows 的解决方案,并且需要一个 fork if/else 以获得额外的 Linux 支持。
@tom-sun 的回答几乎是正确的,因为您可以重用 Azure CLI python 模块,因为 CLI 也是用 Python 编写的。问题是, .invoke() 指令的返回总是返回错误代码。要获得全身响应,您必须在底层 Knack 代码的参数列表上传递一个类似对象的文件来获得响应。默认情况下,这会重定向到 StdOut,这就是为什么您可以在例如终端中看到它,但成功总是得到零。
我写了一个小辅助函数,它接受一个字符串中的 Azure CLI 指令(我不喜欢列表中的许多参数,它读起来不太好 - 但这只是个人喜好,不要怪我)。它使用一个临时文件作为输出目标,然后在内存中读回——这是底层 Knack CLI 代码所必需的;默认情况下,StdOut 是标准管道。
它要求您为 Python 安装 azure-cli: pip install azure-cli
文件azhelper.py:
from azure.cli.core import get_default_cli
import tempfile
def az_cli (args_str):
temp = tempfile.TemporaryFile()
args = args_str.split()
code = get_default_cli().invoke(args, None, temp)
temp.seek(0)
data = temp.read().strip()
temp.close()
return [code, data]
Run Code Online (Sandbox Code Playgroud)
然后你可以这样调用:
from azhelper import *
code, response = az_cli("vm list")
print("vm's: %s" % (response))
Run Code Online (Sandbox Code Playgroud)
当然,您需要登录,请参阅@4c74356b41 答案。
如果有人找到更好的方法来处理响应而不是使用临时文件,我们将不胜感激!我尝试使用内存中的 StringIO 对象,但这在某种程度上不符合底层的 Knack CLI 代码。
如何使用python运行Azure CLI命令?
根据此文件。我们可以通过以下方式调用Azure CLI:
from azure.cli.core import get_default_cli
get_default_cli().invoke(['vm', 'list', '-g', 'groupname'])
Run Code Online (Sandbox Code Playgroud)
注意:如果No module named 'azure.cli.command_modules'出现错误,请安装azure-cli
我的理解是,当前的建议是为此使用管理库。
SDK 的管理(或“管理平面”)库(其名称均以 azure-mgmt- 开头)可帮助你从 Python 脚本创建、预配和管理 Azure 资源。所有Azure服务都有相应的管理库。
使用管理库,你可以编写配置和部署脚本来执行与通过 Azure 门户或 Azure CLI 执行的相同任务。
更多信息请参见:使用管理库配置和管理 Azure 资源
既然你还没有删除这个,我假设你仍在寻找一种方法。
from subprocess import call
call(["az", "vm", "list", "-g", "rgName"])
Run Code Online (Sandbox Code Playgroud)
您还需要首先使用以下内容进行静默身份验证:
az login --service-principal -u http://sample-cli-login -p Test1234 --tenant 54826b22-38d6-4fb2-bad9-b7b93a3e9c5a
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5777 次 |
| 最近记录: |