Django Connect vCenter并列出VM

时间:2019-09-12 23:47:58

标签: django rest api vcenter

无法获取带有rest API的VM列表,我设法获得了身份验证会话,但我不知道如何获取vm列表的ger。

我正在寻找很多日子,但是我没有解决方案,我将会话存储在vcenter上以进行连接,但是我不知道如何获取虚拟机列表。我尽力了。

def vcenter_api(request):

    is_cached = ('value' in request.session)
    context = {}
    if not is_cached:
        ip_address = request.META.get('HTTP_X_FORWARDED_FOR', '')     
        response=requests.post
        ('https://192.168.74.130/rest/com/vmware/cis/session', 
        verify=False,auth=HTTPBasicAuth(api_user, api_pass))
        request.session['value'] = response.json()  
    x = request.session['value']
    vm = request.GET.get('https://192.168.74.130/rest/vcenter/vm/')
    context.update({ 'vm' : vm })
    return render(request, 'ok.html', context)

在Emplate中,如果取而代之的是x并获得身份验证令牌,则返回值为“ none”。 请帮我,我听不懂。非常感谢!!!

2 个答案:

答案 0 :(得分:0)

现在我以这种方式解决了

    s = request.session['value']
    if is_cached:
    listvm_request = requests.get('https://192.168.74.130/rest/vcenter/vm/', 
    verify=False, headers={'vmware-api-session-id':s})
    vm = listvm_request.json()

现在我获得了会话令牌: 8656eecc59f8759158ac909406c8afdc

并获取虚拟机列表:

{'value': [{'memory_size_MiB': 1024, 'vm': 'vm-48', 'name': 'VmA1', 
'power_state': 
'POWERED_ON', 'cpu_count': 1}, {'memory_size_MiB': 1024, 'vm': 'vm-49', 'name': 
'VmA2', 'power_state': 'POWERED_OFF', 'cpu_count': 1}]}

但是,管理json(也许是序列化程序)的最佳方法是什么? 非常感谢!

答案 1 :(得分:0)

要获取模板中的数据,我在模板中写了这些标签,请很好地工作:

<table>
{%  for key in vm.value %}

<tr>
    <td>{{key.name}}</td>
    <td>{{key.power_state}}</td>
</tr>

{% endfor %}
</table>