Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
libvirt
提交
d4601696
L
libvirt
项目概览
openeuler
/
libvirt
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
libvirt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d4601696
编写于
4月 10, 2011
作者:
M
Matthias Bolte
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
esx: Extend VI generator to cover managed object types
Generate lookup functions for managed object types.
上级
ac1e6586
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
728 addition
and
578 deletion
+728
-578
src/esx/esx_vi.c
src/esx/esx_vi.c
+234
-180
src/esx/esx_vi.h
src/esx/esx_vi.h
+2
-0
src/esx/esx_vi_generator.input
src/esx/esx_vi_generator.input
+27
-1
src/esx/esx_vi_generator.py
src/esx/esx_vi_generator.py
+396
-15
src/esx/esx_vi_types.c
src/esx/esx_vi_types.c
+56
-293
src/esx/esx_vi_types.h
src/esx/esx_vi_types.h
+13
-89
未找到文件。
src/esx/esx_vi.c
浏览文件 @
d4601696
此差异已折叠。
点击以展开。
src/esx/esx_vi.h
浏览文件 @
d4601696
...
@@ -444,4 +444,6 @@ int esxVI_ParseHostCpuIdInfo(esxVI_ParsedHostCpuIdInfo *parsedHostCpuIdInfo,
...
@@ -444,4 +444,6 @@ int esxVI_ParseHostCpuIdInfo(esxVI_ParsedHostCpuIdInfo *parsedHostCpuIdInfo,
int
esxVI_ProductVersionToDefaultVirtualHWVersion
(
esxVI_ProductVersion
productVersion
);
int
esxVI_ProductVersionToDefaultVirtualHWVersion
(
esxVI_ProductVersion
productVersion
);
# include "esx_vi.generated.h"
#endif
/* __ESX_VI_H__ */
#endif
/* __ESX_VI_H__ */
src/esx/esx_vi_generator.input
浏览文件 @
d4601696
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
#
#
# Object definition:
# Object definition:
#
#
# object <name> [extends <name>]
#
[managed]
object <name> [extends <name>]
# <type> <name> <occurrence>
# <type> <name> <occurrence>
# ...
# ...
# end
# end
...
@@ -738,6 +738,32 @@ object VmfsDatastoreInfo extends DatastoreInfo
...
@@ -738,6 +738,32 @@ object VmfsDatastoreInfo extends DatastoreInfo
end
end
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Managed Objects
#
managed object ComputeResource extends ManagedEntity
ManagedObjectReference host ol
ManagedObjectReference resourcePool o
end
managed object Datacenter extends ManagedEntity
ManagedObjectReference hostFolder r
ManagedObjectReference vmFolder r
end
managed object HostSystem extends ManagedEntity
HostConfigManager configManager r
end
managed object ManagedEntity
String name r
end
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Methods
# Methods
#
#
...
...
src/esx/esx_vi_generator.py
浏览文件 @
d4601696
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
#
#
# esx_vi_generator.py: generates most of the SOAP type mapping code
# esx_vi_generator.py: generates most of the SOAP type mapping code
#
#
# Copyright (C) 2010 Matthias Bolte <matthias.bolte@googlemail.com>
# Copyright (C) 2010
-2011
Matthias Bolte <matthias.bolte@googlemail.com>
#
#
# This library is free software; you can redistribute it and/or
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# modify it under the terms of the GNU Lesser General Public
...
@@ -297,10 +297,15 @@ class Property:
...
@@ -297,10 +297,15 @@ class Property:
return
" esxVI_%s_Free(&item->%s);
\n
"
%
(
self
.
type
,
self
.
name
)
return
" esxVI_%s_Free(&item->%s);
\n
"
%
(
self
.
type
,
self
.
name
)
def
generate_validate_code
(
self
):
def
generate_validate_code
(
self
,
managed
=
False
):
if
managed
:
macro
=
"ESX_VI__TEMPLATE__PROPERTY__MANAGED_REQUIRE"
else
:
macro
=
"ESX_VI__TEMPLATE__PROPERTY__REQUIRE"
if
self
.
occurrence
in
[
OCCURRENCE__REQUIRED_ITEM
,
if
self
.
occurrence
in
[
OCCURRENCE__REQUIRED_ITEM
,
OCCURRENCE__REQUIRED_LIST
]:
OCCURRENCE__REQUIRED_LIST
]:
return
"
ESX_VI__TEMPLATE__PROPERTY__REQUIRE(%s)
\n
"
%
self
.
name
return
"
%s(%s)
\n
"
%
(
macro
,
self
.
name
)
elif
self
.
occurrence
==
OCCURRENCE__IGNORED
:
elif
self
.
occurrence
==
OCCURRENCE__IGNORED
:
return
" /* FIXME: %s is currently ignored */
\n
"
%
self
.
name
return
" /* FIXME: %s is currently ignored */
\n
"
%
self
.
name
else
:
else
:
...
@@ -345,6 +350,18 @@ class Property:
...
@@ -345,6 +350,18 @@ class Property:
return
" ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(%s, %s)
\n
"
%
(
self
.
type
,
self
.
name
)
return
" ESX_VI__TEMPLATE__PROPERTY__DESERIALIZE(%s, %s)
\n
"
%
(
self
.
type
,
self
.
name
)
def
generate_lookup_code
(
self
):
if
self
.
occurrence
==
OCCURRENCE__IGNORED
:
return
" ESX_VI__TEMPLATE__PROPERTY__CAST_FROM_ANY_TYPE_IGNORE(%s) /* FIXME */
\n
"
%
self
.
name
elif
self
.
occurrence
in
[
OCCURRENCE__REQUIRED_LIST
,
OCCURRENCE__OPTIONAL_LIST
]:
return
" ESX_VI__TEMPLATE__PROPERTY__CAST_LIST_FROM_ANY_TYPE(%s, %s)
\n
"
%
(
self
.
type
,
self
.
name
)
elif
self
.
type
==
"String"
:
return
" ESX_VI__TEMPLATE__PROPERTY__CAST_VALUE_FROM_ANY_TYPE(String, %s)
\n
"
%
self
.
name
else
:
return
" ESX_VI__TEMPLATE__PROPERTY__CAST_FROM_ANY_TYPE(%s, %s)
\n
"
%
(
self
.
type
,
self
.
name
)
def
get_type_string
(
self
):
def
get_type_string
(
self
):
if
self
.
type
==
"String"
and
\
if
self
.
type
==
"String"
and
\
self
.
occurrence
not
in
[
OCCURRENCE__REQUIRED_LIST
,
self
.
occurrence
not
in
[
OCCURRENCE__REQUIRED_LIST
,
...
@@ -572,20 +589,20 @@ class Object(Base):
...
@@ -572,20 +589,20 @@ class Object(Base):
def
generate_header
(
self
):
def
generate_header
(
self
):
header
=
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
header
=
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
header
+=
" * VI
Type
: %s
\n
"
%
self
.
name
header
+=
" * VI
Object
: %s
\n
"
%
self
.
name
if
self
.
extends
is
not
None
:
if
self
.
extends
is
not
None
:
header
+=
" * extends %s
\n
"
%
self
.
extends
header
+=
" *
extends %s
\n
"
%
self
.
extends
first
=
True
first
=
True
if
self
.
extended_by
is
not
None
:
if
self
.
extended_by
is
not
None
:
for
extended_by
in
self
.
extended_by
:
for
extended_by
in
self
.
extended_by
:
if
first
:
if
first
:
header
+=
" * extended by %s
\n
"
%
extended_by
header
+=
" *
extended by %s
\n
"
%
extended_by
first
=
False
first
=
False
else
:
else
:
header
+=
" * %s
\n
"
%
extended_by
header
+=
" *
%s
\n
"
%
extended_by
header
+=
" */
\n\n
"
header
+=
" */
\n\n
"
...
@@ -646,20 +663,20 @@ class Object(Base):
...
@@ -646,20 +663,20 @@ class Object(Base):
def
generate_source
(
self
):
def
generate_source
(
self
):
source
=
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
source
=
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
source
+=
" * VI
Type
: %s
\n
"
%
self
.
name
source
+=
" * VI
Object
: %s
\n
"
%
self
.
name
if
self
.
extends
is
not
None
:
if
self
.
extends
is
not
None
:
source
+=
" * extends %s
\n
"
%
self
.
extends
source
+=
" *
extends %s
\n
"
%
self
.
extends
first
=
True
first
=
True
if
self
.
extended_by
is
not
None
:
if
self
.
extended_by
is
not
None
:
for
extended_by
in
self
.
extended_by
:
for
extended_by
in
self
.
extended_by
:
if
first
:
if
first
:
source
+=
" * extended by %s
\n
"
%
extended_by
source
+=
" *
extended by %s
\n
"
%
extended_by
first
=
False
first
=
False
else
:
else
:
source
+=
" * %s
\n
"
%
extended_by
source
+=
" *
%s
\n
"
%
extended_by
source
+=
" */
\n\n
"
source
+=
" */
\n\n
"
...
@@ -863,15 +880,303 @@ class Object(Base):
...
@@ -863,15 +880,303 @@ class Object(Base):
class
ManagedObject
(
Base
):
FEATURE__LIST
=
(
1
<<
2
)
def
__init__
(
self
,
name
,
extends
,
properties
,
features
=
0
,
extended_by
=
None
):
Base
.
__init__
(
self
,
"struct"
,
name
)
self
.
extends
=
extends
self
.
features
=
features
self
.
properties
=
properties
self
.
extended_by
=
extended_by
if
self
.
extended_by
is
not
None
:
self
.
extended_by
.
sort
()
def
generate_struct_members
(
self
,
add_banner
=
False
,
struct_gap
=
False
):
members
=
""
if
struct_gap
:
members
+=
"
\n
"
if
self
.
extends
is
not
None
:
members
+=
managed_objects_by_name
[
self
.
extends
].
generate_struct_members
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
members
+=
" /* %s */
\n
"
%
self
.
name
for
property
in
self
.
properties
:
members
+=
property
.
generate_struct_member
()
if
len
(
self
.
properties
)
<
1
:
members
+=
" /* no properties */
\n
"
return
members
def
generate_free_code
(
self
,
add_banner
=
False
):
source
=
""
if
self
.
extends
is
not
None
:
source
+=
managed_objects_by_name
[
self
.
extends
].
generate_free_code
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
source
+=
" /* %s */
\n
"
%
self
.
name
if
len
(
self
.
properties
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
string
=
""
for
property
in
self
.
properties
:
string
+=
property
.
generate_free_code
()
if
len
(
string
)
<
1
:
source
+=
" /* no properties to be freed */
\n
"
else
:
source
+=
string
return
source
def
generate_validate_code
(
self
,
add_banner
=
False
):
source
=
""
if
self
.
extends
is
not
None
:
source
+=
managed_objects_by_name
[
self
.
extends
].
generate_validate_code
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
source
+=
" /* %s */
\n
"
%
self
.
name
if
len
(
self
.
properties
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
string
=
""
for
property
in
self
.
properties
:
string
+=
property
.
generate_validate_code
(
managed
=
True
)
if
len
(
string
)
<
1
:
source
+=
" /* no required properties */
\n
"
else
:
source
+=
string
return
source
def
generate_lookup_code1
(
self
,
add_banner
=
False
):
source
=
""
if
self
.
extends
is
not
None
:
source
+=
managed_objects_by_name
[
self
.
extends
].
generate_lookup_code1
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
source
+=
" /* %s */
\n
"
%
self
.
name
if
len
(
self
.
properties
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
string
=
""
for
property
in
self
.
properties
:
string
+=
"
\"
%s
\\
0
\"\n
"
%
property
.
name
if
len
(
string
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
source
+=
string
return
source
def
generate_lookup_code2
(
self
,
add_banner
=
False
):
source
=
""
if
self
.
extends
is
not
None
:
source
+=
managed_objects_by_name
[
self
.
extends
].
generate_lookup_code2
(
add_banner
=
True
)
+
"
\n
"
if
self
.
extends
is
not
None
or
add_banner
:
source
+=
" /* %s */
\n
"
%
self
.
name
if
len
(
self
.
properties
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
string
=
""
for
property
in
self
.
properties
:
string
+=
property
.
generate_lookup_code
()
if
len
(
string
)
<
1
:
source
+=
" /* no properties */
\n
"
else
:
source
+=
string
return
source
def
generate_comment
(
self
):
comment
=
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
comment
+=
" * VI Managed Object: %s
\n
"
%
self
.
name
if
self
.
extends
is
not
None
:
comment
+=
" * extends %s
\n
"
%
self
.
extends
first
=
True
if
self
.
extended_by
is
not
None
:
for
extended_by
in
self
.
extended_by
:
if
first
:
comment
+=
" * extended by %s
\n
"
%
extended_by
first
=
False
else
:
comment
+=
" * %s
\n
"
%
extended_by
comment
+=
" */
\n\n
"
return
comment
def
generate_header
(
self
):
header
=
self
.
generate_comment
()
# struct
header
+=
"struct _esxVI_%s {
\n
"
%
self
.
name
if
self
.
features
&
Object
.
FEATURE__LIST
:
header
+=
aligned
(
" esxVI_%s *_next; "
%
self
.
name
,
"/* optional */
\n
"
)
else
:
header
+=
aligned
(
" esxVI_%s *_unused; "
%
self
.
name
,
"/* optional */
\n
"
)
header
+=
aligned
(
" esxVI_Type _type; "
,
"/* required */
\n
"
)
header
+=
aligned
(
" esxVI_ManagedObjectReference *_reference; "
,
"/* required */
\n
"
)
header
+=
"
\n
"
header
+=
self
.
generate_struct_members
()
header
+=
"};
\n\n
"
# functions
header
+=
"int esxVI_%s_Alloc(esxVI_%s **item);
\n
"
%
(
self
.
name
,
self
.
name
)
header
+=
"void esxVI_%s_Free(esxVI_%s **item);
\n
"
%
(
self
.
name
,
self
.
name
)
header
+=
"int esxVI_%s_Validate(esxVI_%s *item, esxVI_String *selectedPropertyNameList);
\n
"
%
(
self
.
name
,
self
.
name
)
if
self
.
features
&
Object
.
FEATURE__LIST
:
header
+=
"int esxVI_%s_AppendToList(esxVI_%s **list, esxVI_%s *item);
\n
"
%
(
self
.
name
,
self
.
name
,
self
.
name
)
header
+=
"
\n\n\n
"
return
header
def
generate_helper_header
(
self
):
header
=
""
# functions
header
+=
(
"int esxVI_Lookup%s(esxVI_Context *ctx, "
+
"const char *name, "
+
"esxVI_ManagedObjectReference *root, "
+
"esxVI_String *selectedPropertyNameList, "
+
"esxVI_%s **item, "
+
"esxVI_Occurrence occurrence);
\n
"
)
%
(
self
.
name
,
self
.
name
)
header
+=
"
\n
"
return
header
def
generate_source
(
self
):
source
=
self
.
generate_comment
()
# functions
source
+=
"/* esxVI_%s_Alloc */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__ALLOC(%s)
\n\n
"
%
self
.
name
# free
if
self
.
extended_by
is
None
:
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__FREE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
if
self
.
features
&
ManagedObject
.
FEATURE__LIST
:
if
self
.
extends
is
not
None
:
# avoid "dereferencing type-punned pointer will break strict-aliasing rules" warnings
source
+=
" esxVI_%s *next = (esxVI_%s *)item->_next;
\n\n
"
%
(
self
.
extends
,
self
.
extends
)
source
+=
" esxVI_%s_Free(&next);
\n
"
%
self
.
extends
source
+=
" item->_next = (esxVI_%s *)next;
\n\n
"
%
self
.
name
else
:
source
+=
" esxVI_%s_Free(&item->_next);
\n
"
%
self
.
name
source
+=
" esxVI_ManagedObjectReference_Free(&item->_reference);
\n\n
"
source
+=
self
.
generate_free_code
()
source
+=
"})
\n\n
"
else
:
source
+=
"/* esxVI_%s_Free */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__DYNAMIC_FREE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
for
extended_by
in
self
.
extended_by
:
source
+=
" ESX_VI__TEMPLATE__DISPATCH__FREE(%s)
\n
"
%
extended_by
source
+=
"},
\n
"
source
+=
"{
\n
"
if
self
.
features
&
Object
.
FEATURE__LIST
:
if
self
.
extends
is
not
None
:
# avoid "dereferencing type-punned pointer will break strict-aliasing rules" warnings
source
+=
" esxVI_%s *next = (esxVI_%s *)item->_next;
\n\n
"
%
(
self
.
extends
,
self
.
extends
)
source
+=
" esxVI_%s_Free(&next);
\n
"
%
self
.
extends
source
+=
" item->_next = (esxVI_%s *)next;
\n\n
"
%
self
.
name
else
:
source
+=
" esxVI_%s_Free(&item->_next);
\n
"
%
self
.
name
source
+=
" esxVI_ManagedObjectReference_Free(&item->_reference);
\n\n
"
source
+=
self
.
generate_free_code
()
source
+=
"})
\n\n
"
# validate
source
+=
"/* esxVI_%s_Validate */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__MANAGED_VALIDATE(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
self
.
generate_validate_code
()
source
+=
"})
\n\n
"
# append to list
if
self
.
features
&
ManagedObject
.
FEATURE__LIST
:
source
+=
"/* esxVI_%s_AppendToList */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__LIST__APPEND(%s)
\n\n
"
%
self
.
name
source
+=
"
\n\n
"
return
source
def
generate_helper_source
(
self
):
source
=
""
# lookup
source
+=
"/* esxVI_Lookup%s */
\n
"
%
self
.
name
source
+=
"ESX_VI__TEMPLATE__LOOKUP(%s,
\n
"
%
self
.
name
source
+=
"{
\n
"
source
+=
self
.
generate_lookup_code1
()
source
+=
"},
\n
"
source
+=
"{
\n
"
source
+=
self
.
generate_lookup_code2
()
source
+=
"})
\n\n
"
source
+=
"
\n\n
"
return
source
...
@@ -962,8 +1267,13 @@ def capitalize_first(string):
...
@@ -962,8 +1267,13 @@ def capitalize_first(string):
def
parse_object
(
block
):
def
parse_object
(
block
):
# expected format: object <name> [extends <name>]
# expected format:
[managed]
object <name> [extends <name>]
header_items
=
block
[
0
][
1
].
split
()
header_items
=
block
[
0
][
1
].
split
()
managed
=
False
if
header_items
[
0
]
==
"managed"
:
managed
=
True
del
header_items
[
0
]
if
len
(
header_items
)
<
2
:
if
len
(
header_items
)
<
2
:
report_error
(
"line %d: invalid block header"
%
(
number
))
report_error
(
"line %d: invalid block header"
%
(
number
))
...
@@ -994,7 +1304,10 @@ def parse_object(block):
...
@@ -994,7 +1304,10 @@ def parse_object(block):
properties
.
append
(
Property
(
type
=
items
[
0
],
name
=
items
[
1
],
properties
.
append
(
Property
(
type
=
items
[
0
],
name
=
items
[
1
],
occurrence
=
items
[
2
]))
occurrence
=
items
[
2
]))
return
Object
(
name
=
name
,
extends
=
extends
,
properties
=
properties
)
if
managed
:
return
ManagedObject
(
name
=
name
,
extends
=
extends
,
properties
=
properties
)
else
:
return
Object
(
name
=
name
,
extends
=
extends
,
properties
=
properties
)
...
@@ -1075,6 +1388,7 @@ def is_known_type(type):
...
@@ -1075,6 +1388,7 @@ def is_known_type(type):
return
type
in
predefined_objects
or
\
return
type
in
predefined_objects
or
\
type
in
predefined_enums
or
\
type
in
predefined_enums
or
\
type
in
objects_by_name
or
\
type
in
objects_by_name
or
\
type
in
managed_objects_by_name
or
\
type
in
enums_by_name
type
in
enums_by_name
...
@@ -1169,11 +1483,14 @@ types_header = open_and_print(os.path.join(output_dirname, "esx_vi_types.generat
...
@@ -1169,11 +1483,14 @@ types_header = open_and_print(os.path.join(output_dirname, "esx_vi_types.generat
types_source
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi_types.generated.c"
))
types_source
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi_types.generated.c"
))
methods_header
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi_methods.generated.h"
))
methods_header
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi_methods.generated.h"
))
methods_source
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi_methods.generated.c"
))
methods_source
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi_methods.generated.c"
))
helpers_header
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi.generated.h"
))
helpers_source
=
open_and_print
(
os
.
path
.
join
(
output_dirname
,
"esx_vi.generated.c"
))
number
=
0
number
=
0
objects_by_name
=
{}
objects_by_name
=
{}
managed_objects_by_name
=
{}
enums_by_name
=
{}
enums_by_name
=
{}
methods_by_name
=
{}
methods_by_name
=
{}
block
=
None
block
=
None
...
@@ -1191,7 +1508,8 @@ for line in file(input_filename, "rb").readlines():
...
@@ -1191,7 +1508,8 @@ for line in file(input_filename, "rb").readlines():
if
len
(
line
)
<
1
:
if
len
(
line
)
<
1
:
continue
continue
if
line
.
startswith
(
"object"
)
or
line
.
startswith
(
"enum"
)
or
line
.
startswith
(
"method"
):
if
line
.
startswith
(
"object"
)
or
line
.
startswith
(
"managed object"
)
or
\
line
.
startswith
(
"enum"
)
or
line
.
startswith
(
"method"
):
if
block
is
not
None
:
if
block
is
not
None
:
report_error
(
"line %d: nested block found"
%
(
number
))
report_error
(
"line %d: nested block found"
%
(
number
))
else
:
else
:
...
@@ -1202,6 +1520,9 @@ for line in file(input_filename, "rb").readlines():
...
@@ -1202,6 +1520,9 @@ for line in file(input_filename, "rb").readlines():
if
block
[
0
][
1
].
startswith
(
"object"
):
if
block
[
0
][
1
].
startswith
(
"object"
):
obj
=
parse_object
(
block
)
obj
=
parse_object
(
block
)
objects_by_name
[
obj
.
name
]
=
obj
objects_by_name
[
obj
.
name
]
=
obj
elif
block
[
0
][
1
].
startswith
(
"managed object"
):
obj
=
parse_object
(
block
)
managed_objects_by_name
[
obj
.
name
]
=
obj
elif
block
[
0
][
1
].
startswith
(
"enum"
):
elif
block
[
0
][
1
].
startswith
(
"enum"
):
enum
=
parse_enum
(
block
)
enum
=
parse_enum
(
block
)
enums_by_name
[
enum
.
name
]
=
enum
enums_by_name
[
enum
.
name
]
=
enum
...
@@ -1268,6 +1589,30 @@ for obj in objects_by_name.values():
...
@@ -1268,6 +1589,30 @@ for obj in objects_by_name.values():
for
obj
in
managed_objects_by_name
.
values
():
for
property
in
obj
.
properties
:
if
property
.
occurrence
!=
OCCURRENCE__IGNORED
and
\
not
is_known_type
(
property
.
type
):
report_error
(
"object '%s' contains unknown property type '%s'"
%
(
obj
.
name
,
property
.
type
))
if
obj
.
extends
is
not
None
:
if
not
is_known_type
(
obj
.
extends
):
report_error
(
"object '%s' extends unknown object '%s'"
%
(
obj
.
name
,
obj
.
extends
))
# detect extended_by relation
if
obj
.
extends
is
not
None
:
extended_obj
=
managed_objects_by_name
[
obj
.
extends
]
if
extended_obj
.
extended_by
is
None
:
extended_obj
.
extended_by
=
[
obj
.
name
]
else
:
extended_obj
.
extended_by
.
append
(
obj
.
name
)
extended_obj
.
extended_by
.
sort
()
for
obj
in
objects_by_name
.
values
():
for
obj
in
objects_by_name
.
values
():
inherit_features
(
obj
)
inherit_features
(
obj
)
...
@@ -1283,6 +1628,8 @@ types_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
...
@@ -1283,6 +1628,8 @@ types_header.write("/* Generated by esx_vi_generator.py */\n\n\n\n")
types_source
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
types_source
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
methods_header
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
methods_header
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
methods_source
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
methods_source
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
helpers_header
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
helpers_source
.
write
(
"/* Generated by esx_vi_generator.py */
\n\n\n\n
"
)
# output enums
# output enums
...
@@ -1306,7 +1653,7 @@ for name in names:
...
@@ -1306,7 +1653,7 @@ for name in names:
# output objects
# output objects
types_typedef
.
write
(
"
\n\n\n
"
+
types_typedef
.
write
(
"
\n\n\n
"
+
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
+
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
+
" * VI
Type
s
\n
"
+
" * VI
Object
s
\n
"
+
" */
\n\n
"
)
" */
\n\n
"
)
types_typeenum
.
write
(
"
\n
"
)
types_typeenum
.
write
(
"
\n
"
)
types_typetostring
.
write
(
"
\n
"
)
types_typetostring
.
write
(
"
\n
"
)
...
@@ -1327,6 +1674,30 @@ for name in names:
...
@@ -1327,6 +1674,30 @@ for name in names:
# output managed objects
types_typedef
.
write
(
"
\n\n\n
"
+
"/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\n
"
+
" * VI Managed Objects
\n
"
+
" */
\n\n
"
)
types_typeenum
.
write
(
"
\n
"
)
types_typetostring
.
write
(
"
\n
"
)
types_typefromstring
.
write
(
"
\n
"
)
names
=
managed_objects_by_name
.
keys
()
names
.
sort
()
for
name
in
names
:
types_typedef
.
write
(
managed_objects_by_name
[
name
].
generate_typedef
())
types_typeenum
.
write
(
managed_objects_by_name
[
name
].
generate_typeenum
())
types_typetostring
.
write
(
managed_objects_by_name
[
name
].
generate_typetostring
())
types_typefromstring
.
write
(
managed_objects_by_name
[
name
].
generate_typefromstring
())
types_header
.
write
(
managed_objects_by_name
[
name
].
generate_header
())
types_source
.
write
(
managed_objects_by_name
[
name
].
generate_source
())
# output methods
# output methods
names
=
methods_by_name
.
keys
()
names
=
methods_by_name
.
keys
()
names
.
sort
()
names
.
sort
()
...
@@ -1334,3 +1705,13 @@ names.sort()
...
@@ -1334,3 +1705,13 @@ names.sort()
for
name
in
names
:
for
name
in
names
:
methods_header
.
write
(
methods_by_name
[
name
].
generate_header
())
methods_header
.
write
(
methods_by_name
[
name
].
generate_header
())
methods_source
.
write
(
methods_by_name
[
name
].
generate_source
())
methods_source
.
write
(
methods_by_name
[
name
].
generate_source
())
# output helpers
names
=
managed_objects_by_name
.
keys
()
names
.
sort
()
for
name
in
names
:
helpers_header
.
write
(
managed_objects_by_name
[
name
].
generate_helper_header
())
helpers_source
.
write
(
managed_objects_by_name
[
name
].
generate_helper_source
())
src/esx/esx_vi_types.c
浏览文件 @
d4601696
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
* esx_vi_types.c: client for the VMware VI API 2.5 to manage ESX hosts
* esx_vi_types.c: client for the VMware VI API 2.5 to manage ESX hosts
*
*
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2010 Red Hat, Inc.
* Copyright (C) 2009-201
0
Matthias Bolte <matthias.bolte@googlemail.com>
* Copyright (C) 2009-201
1
Matthias Bolte <matthias.bolte@googlemail.com>
*
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* modify it under the terms of the GNU Lesser General Public
...
@@ -693,6 +693,44 @@ esxVI_GetActualObjectType(xmlNodePtr node, esxVI_Type baseType,
...
@@ -693,6 +693,44 @@ esxVI_GetActualObjectType(xmlNodePtr node, esxVI_Type baseType,
/*
* Macros to implement managed objects
*/
#define ESX_VI__TEMPLATE__PROPERTY__MANAGED_REQUIRE(_name) \
/* FIXME: This results in O(n^2) runtime in case of missing required, but \
* unselected properties. */
\
if (item->_name == 0 && \
esxVI_String_ListContainsValue(selectedPropertyNameList, #_name)) { \
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \
_("%s object is missing the required '%s' property"), \
typeName, #_name); \
return -1; \
}
#define ESX_VI__TEMPLATE__MANAGED_VALIDATE(__type, _require) \
int \
esxVI_##__type##_Validate(esxVI_##__type *item, \
esxVI_String *selectedPropertyNameList) \
{ \
const char *typeName = esxVI_Type_ToString(esxVI_Type_##__type); \
\
if (item->_type <= esxVI_Type_Undefined || \
item->_type >= esxVI_Type_Other) { \
ESX_VI_ERROR(VIR_ERR_INTERNAL_ERROR, \
_("%s object has invalid dynamic type"), typeName); \
return -1; \
} \
\
_require \
\
return 0; \
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* XSI: Type
* XSI: Type
*/
*/
...
@@ -735,15 +773,6 @@ esxVI_Type_ToString(esxVI_Type type)
...
@@ -735,15 +773,6 @@ esxVI_Type_ToString(esxVI_Type type)
case
esxVI_Type_ManagedObjectReference
:
case
esxVI_Type_ManagedObjectReference
:
return
"ManagedObjectReference"
;
return
"ManagedObjectReference"
;
case
esxVI_Type_Datacenter
:
return
"Datacenter"
;
case
esxVI_Type_ComputeResource
:
return
"ComputeResource"
;
case
esxVI_Type_HostSystem
:
return
"HostSystem"
;
#include "esx_vi_types.generated.typetostring"
#include "esx_vi_types.generated.typetostring"
case
esxVI_Type_Other
:
case
esxVI_Type_Other
:
...
@@ -776,12 +805,6 @@ esxVI_Type_FromString(const char *type)
...
@@ -776,12 +805,6 @@ esxVI_Type_FromString(const char *type)
return
esxVI_Type_MethodFault
;
return
esxVI_Type_MethodFault
;
}
else
if
(
STREQ
(
type
,
"ManagedObjectReference"
))
{
}
else
if
(
STREQ
(
type
,
"ManagedObjectReference"
))
{
return
esxVI_Type_ManagedObjectReference
;
return
esxVI_Type_ManagedObjectReference
;
}
else
if
(
STREQ
(
type
,
"Datacenter"
))
{
return
esxVI_Type_Datacenter
;
}
else
if
(
STREQ
(
type
,
"ComputeResource"
))
{
return
esxVI_Type_ComputeResource
;
}
else
if
(
STREQ
(
type
,
"HostSystem"
))
{
return
esxVI_Type_HostSystem
;
}
}
#include "esx_vi_types.generated.typefromstring"
#include "esx_vi_types.generated.typefromstring"
...
@@ -1050,6 +1073,20 @@ ESX_VI__TEMPLATE__VALIDATE(String,
...
@@ -1050,6 +1073,20 @@ ESX_VI__TEMPLATE__VALIDATE(String,
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
value
)
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
value
)
})
})
bool
esxVI_String_ListContainsValue
(
esxVI_String
*
stringList
,
const
char
*
value
)
{
esxVI_String
*
string
;
for
(
string
=
stringList
;
string
!=
NULL
;
string
=
string
->
_next
)
{
if
(
STREQ
(
string
->
value
,
value
))
{
return
true
;
}
}
return
false
;
}
/* esxVI_String_AppendToList */
/* esxVI_String_AppendToList */
ESX_VI__TEMPLATE__LIST__APPEND
(
String
)
ESX_VI__TEMPLATE__LIST__APPEND
(
String
)
...
@@ -1452,7 +1489,7 @@ esxVI_DateTime_ConvertToCalendarTime(esxVI_DateTime *dateTime,
...
@@ -1452,7 +1489,7 @@ esxVI_DateTime_ConvertToCalendarTime(esxVI_DateTime *dateTime,
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
VI Type
: Fault
*
SOAP
: Fault
*/
*/
/* esxVI_Fault_Alloc */
/* esxVI_Fault_Alloc */
...
@@ -1483,7 +1520,7 @@ ESX_VI__TEMPLATE__DESERIALIZE(Fault,
...
@@ -1483,7 +1520,7 @@ ESX_VI__TEMPLATE__DESERIALIZE(Fault,
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI
Type
: MethodFault
* VI
Object
: MethodFault
*/
*/
/* esxVI_MethodFault_Alloc */
/* esxVI_MethodFault_Alloc */
...
@@ -1528,7 +1565,7 @@ esxVI_MethodFault_Deserialize(xmlNodePtr node, esxVI_MethodFault **methodFault)
...
@@ -1528,7 +1565,7 @@ esxVI_MethodFault_Deserialize(xmlNodePtr node, esxVI_MethodFault **methodFault)
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI
Type
: ManagedObjectReference
* VI
Object
: ManagedObjectReference
*/
*/
/* esxVI_ManagedObjectReference_Alloc */
/* esxVI_ManagedObjectReference_Alloc */
...
@@ -1631,280 +1668,6 @@ esxVI_ManagedObjectReference_Deserialize
...
@@ -1631,280 +1668,6 @@ esxVI_ManagedObjectReference_Deserialize
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Managed Object: Datacenter
* extends ManagedEntity
*/
/* esxVI_Datacenter_Alloc */
ESX_VI__TEMPLATE__ALLOC
(
Datacenter
)
/* esxVI_Datacenter_Free */
ESX_VI__TEMPLATE__FREE
(
Datacenter
,
{
esxVI_Datacenter_Free
(
&
item
->
_next
);
esxVI_ManagedObjectReference_Free
(
&
item
->
_reference
);
/* ManagedEntity */
VIR_FREE
(
item
->
name
);
/* Datacenter */
esxVI_ManagedObjectReference_Free
(
&
item
->
hostFolder
);
esxVI_ManagedObjectReference_Free
(
&
item
->
vmFolder
);
})
/* esxVI_Datacenter_Validate */
ESX_VI__TEMPLATE__VALIDATE
(
Datacenter
,
{
/* ManagedEntity */
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
name
);
/* Datacenter */
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
hostFolder
);
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
vmFolder
);
})
int
esxVI_Datacenter_CastFromObjectContent
(
esxVI_ObjectContent
*
objectContent
,
esxVI_Datacenter
**
datacenter
)
{
esxVI_DynamicProperty
*
dynamicProperty
=
NULL
;
if
(
objectContent
==
NULL
||
datacenter
==
NULL
||
*
datacenter
!=
NULL
)
{
ESX_VI_ERROR
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"Invalid argument"
));
return
-
1
;
}
if
(
esxVI_Datacenter_Alloc
(
datacenter
)
<
0
)
{
return
-
1
;
}
if
(
esxVI_ManagedObjectReference_DeepCopy
(
&
(
*
datacenter
)
->
_reference
,
objectContent
->
obj
)
<
0
)
{
goto
failure
;
}
for
(
dynamicProperty
=
objectContent
->
propSet
;
dynamicProperty
!=
NULL
;
dynamicProperty
=
dynamicProperty
->
_next
)
{
if
(
STREQ
(
dynamicProperty
->
name
,
"name"
))
{
if
(
esxVI_AnyType_ExpectType
(
dynamicProperty
->
val
,
esxVI_Type_String
)
<
0
)
{
goto
failure
;
}
(
*
datacenter
)
->
name
=
strdup
(
dynamicProperty
->
val
->
string
);
if
((
*
datacenter
)
->
name
==
NULL
)
{
virReportOOMError
();
goto
failure
;
}
}
else
if
(
STREQ
(
dynamicProperty
->
name
,
"hostFolder"
))
{
if
(
esxVI_ManagedObjectReference_CastFromAnyType
(
dynamicProperty
->
val
,
&
(
*
datacenter
)
->
hostFolder
)
<
0
)
{
goto
failure
;
}
}
else
if
(
STREQ
(
dynamicProperty
->
name
,
"vmFolder"
))
{
if
(
esxVI_ManagedObjectReference_CastFromAnyType
(
dynamicProperty
->
val
,
&
(
*
datacenter
)
->
vmFolder
)
<
0
)
{
goto
failure
;
}
}
}
if
(
esxVI_Datacenter_Validate
(
*
datacenter
)
<
0
)
{
goto
failure
;
}
return
0
;
failure:
esxVI_Datacenter_Free
(
datacenter
);
return
-
1
;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Managed Object: ComputeResource
* extends ManagedEntity
*/
/* esxVI_ComputeResource_Alloc */
ESX_VI__TEMPLATE__ALLOC
(
ComputeResource
)
/* esxVI_ComputeResource_Free */
ESX_VI__TEMPLATE__FREE
(
ComputeResource
,
{
esxVI_ComputeResource_Free
(
&
item
->
_next
);
esxVI_ManagedObjectReference_Free
(
&
item
->
_reference
);
/* ManagedEntity */
VIR_FREE
(
item
->
name
);
/* ComputeResource */
esxVI_ManagedObjectReference_Free
(
&
item
->
host
);
esxVI_ManagedObjectReference_Free
(
&
item
->
resourcePool
);
})
/* esxVI_ComputeResource_Validate */
ESX_VI__TEMPLATE__VALIDATE
(
ComputeResource
,
{
/* ManagedEntity */
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
name
);
/* ComputeResource */
})
int
esxVI_ComputeResource_CastFromObjectContent
(
esxVI_ObjectContent
*
objectContent
,
esxVI_ComputeResource
**
computeResource
)
{
esxVI_DynamicProperty
*
dynamicProperty
=
NULL
;
if
(
objectContent
==
NULL
||
computeResource
==
NULL
||
*
computeResource
!=
NULL
)
{
ESX_VI_ERROR
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"Invalid argument"
));
return
-
1
;
}
if
(
esxVI_ComputeResource_Alloc
(
computeResource
)
<
0
)
{
return
-
1
;
}
if
(
esxVI_ManagedObjectReference_DeepCopy
(
&
(
*
computeResource
)
->
_reference
,
objectContent
->
obj
)
<
0
)
{
goto
failure
;
}
for
(
dynamicProperty
=
objectContent
->
propSet
;
dynamicProperty
!=
NULL
;
dynamicProperty
=
dynamicProperty
->
_next
)
{
if
(
STREQ
(
dynamicProperty
->
name
,
"name"
))
{
if
(
esxVI_AnyType_ExpectType
(
dynamicProperty
->
val
,
esxVI_Type_String
)
<
0
)
{
goto
failure
;
}
(
*
computeResource
)
->
name
=
strdup
(
dynamicProperty
->
val
->
string
);
if
((
*
computeResource
)
->
name
==
NULL
)
{
virReportOOMError
();
goto
failure
;
}
}
else
if
(
STREQ
(
dynamicProperty
->
name
,
"host"
))
{
if
(
esxVI_ManagedObjectReference_CastListFromAnyType
(
dynamicProperty
->
val
,
&
(
*
computeResource
)
->
host
)
<
0
)
{
goto
failure
;
}
}
else
if
(
STREQ
(
dynamicProperty
->
name
,
"resourcePool"
))
{
if
(
esxVI_ManagedObjectReference_CastFromAnyType
(
dynamicProperty
->
val
,
&
(
*
computeResource
)
->
resourcePool
)
<
0
)
{
goto
failure
;
}
}
}
if
(
esxVI_ComputeResource_Validate
(
*
computeResource
)
<
0
)
{
goto
failure
;
}
return
0
;
failure:
esxVI_ComputeResource_Free
(
computeResource
);
return
-
1
;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Managed Object: HostSystem
* extends ManagedEntity
*/
/* esxVI_HostSystem_Alloc */
ESX_VI__TEMPLATE__ALLOC
(
HostSystem
)
/* esxVI_HostSystem_Free */
ESX_VI__TEMPLATE__FREE
(
HostSystem
,
{
esxVI_HostSystem_Free
(
&
item
->
_next
);
esxVI_ManagedObjectReference_Free
(
&
item
->
_reference
);
/* ManagedEntity */
VIR_FREE
(
item
->
name
);
/* HostSystem */
esxVI_HostConfigManager_Free
(
&
item
->
configManager
);
})
/* esxVI_HostSystem_Validate */
ESX_VI__TEMPLATE__VALIDATE
(
HostSystem
,
{
/* ManagedEntity */
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
name
);
/* HostSystem */
ESX_VI__TEMPLATE__PROPERTY__REQUIRE
(
configManager
);
})
int
esxVI_HostSystem_CastFromObjectContent
(
esxVI_ObjectContent
*
objectContent
,
esxVI_HostSystem
**
hostSystem
)
{
esxVI_DynamicProperty
*
dynamicProperty
=
NULL
;
if
(
objectContent
==
NULL
||
hostSystem
==
NULL
||
*
hostSystem
!=
NULL
)
{
ESX_VI_ERROR
(
VIR_ERR_INTERNAL_ERROR
,
"%s"
,
_
(
"Invalid argument"
));
return
-
1
;
}
if
(
esxVI_HostSystem_Alloc
(
hostSystem
)
<
0
)
{
return
-
1
;
}
if
(
esxVI_ManagedObjectReference_DeepCopy
(
&
(
*
hostSystem
)
->
_reference
,
objectContent
->
obj
)
<
0
)
{
goto
failure
;
}
for
(
dynamicProperty
=
objectContent
->
propSet
;
dynamicProperty
!=
NULL
;
dynamicProperty
=
dynamicProperty
->
_next
)
{
if
(
STREQ
(
dynamicProperty
->
name
,
"name"
))
{
if
(
esxVI_AnyType_ExpectType
(
dynamicProperty
->
val
,
esxVI_Type_String
)
<
0
)
{
goto
failure
;
}
(
*
hostSystem
)
->
name
=
strdup
(
dynamicProperty
->
val
->
string
);
if
((
*
hostSystem
)
->
name
==
NULL
)
{
virReportOOMError
();
goto
failure
;
}
}
else
if
(
STREQ
(
dynamicProperty
->
name
,
"configManager"
))
{
if
(
esxVI_HostConfigManager_CastFromAnyType
(
dynamicProperty
->
val
,
&
(
*
hostSystem
)
->
configManager
)
<
0
)
{
goto
failure
;
}
}
}
if
(
esxVI_HostSystem_Validate
(
*
hostSystem
)
<
0
)
{
goto
failure
;
}
return
0
;
failure:
esxVI_HostSystem_Free
(
hostSystem
);
return
-
1
;
}
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Enum: VirtualMachinePowerState (Additions)
* VI Enum: VirtualMachinePowerState (Additions)
*/
*/
...
...
src/esx/esx_vi_types.h
浏览文件 @
d4601696
/*
/*
* esx_vi_types.h: client for the VMware VI API 2.5 to manage ESX hosts
* esx_vi_types.h: client for the VMware VI API 2.5 to manage ESX hosts
*
*
* Copyright (C) 2009-201
0
Matthias Bolte <matthias.bolte@googlemail.com>
* Copyright (C) 2009-201
1
Matthias Bolte <matthias.bolte@googlemail.com>
*
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* modify it under the terms of the GNU Lesser General Public
...
@@ -44,15 +45,18 @@ typedef struct _esxVI_DateTime esxVI_DateTime;
...
@@ -44,15 +45,18 @@ typedef struct _esxVI_DateTime esxVI_DateTime;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
VI Types
*
SOAP
*/
*/
typedef
struct
_esxVI_Fault
esxVI_Fault
;
typedef
struct
_esxVI_Fault
esxVI_Fault
;
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Objects
*/
typedef
struct
_esxVI_MethodFault
esxVI_MethodFault
;
typedef
struct
_esxVI_MethodFault
esxVI_MethodFault
;
typedef
struct
_esxVI_ManagedObjectReference
esxVI_ManagedObjectReference
;
typedef
struct
_esxVI_ManagedObjectReference
esxVI_ManagedObjectReference
;
typedef
struct
_esxVI_Datacenter
esxVI_Datacenter
;
typedef
struct
_esxVI_ComputeResource
esxVI_ComputeResource
;
typedef
struct
_esxVI_HostSystem
esxVI_HostSystem
;
# include "esx_vi_types.generated.typedef"
# include "esx_vi_types.generated.typedef"
...
@@ -74,9 +78,6 @@ enum _esxVI_Type {
...
@@ -74,9 +78,6 @@ enum _esxVI_Type {
esxVI_Type_Fault
,
esxVI_Type_Fault
,
esxVI_Type_MethodFault
,
esxVI_Type_MethodFault
,
esxVI_Type_ManagedObjectReference
,
esxVI_Type_ManagedObjectReference
,
esxVI_Type_Datacenter
,
esxVI_Type_ComputeResource
,
esxVI_Type_HostSystem
,
# include "esx_vi_types.generated.typeenum"
# include "esx_vi_types.generated.typeenum"
...
@@ -170,6 +171,7 @@ struct _esxVI_String {
...
@@ -170,6 +171,7 @@ struct _esxVI_String {
int
esxVI_String_Alloc
(
esxVI_String
**
string
);
int
esxVI_String_Alloc
(
esxVI_String
**
string
);
void
esxVI_String_Free
(
esxVI_String
**
stringList
);
void
esxVI_String_Free
(
esxVI_String
**
stringList
);
int
esxVI_String_Validate
(
esxVI_String
*
string
);
int
esxVI_String_Validate
(
esxVI_String
*
string
);
bool
esxVI_String_ListContainsValue
(
esxVI_String
*
stringList
,
const
char
*
value
);
int
esxVI_String_AppendToList
(
esxVI_String
**
stringList
,
esxVI_String
*
string
);
int
esxVI_String_AppendToList
(
esxVI_String
**
stringList
,
esxVI_String
*
string
);
int
esxVI_String_AppendValueToList
(
esxVI_String
**
stringList
,
int
esxVI_String_AppendValueToList
(
esxVI_String
**
stringList
,
const
char
*
value
);
const
char
*
value
);
...
@@ -264,7 +266,7 @@ int esxVI_DateTime_ConvertToCalendarTime(esxVI_DateTime *dateTime,
...
@@ -264,7 +266,7 @@ int esxVI_DateTime_ConvertToCalendarTime(esxVI_DateTime *dateTime,
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
VI Type
: Fault
*
SOAP
: Fault
*/
*/
struct
_esxVI_Fault
{
struct
_esxVI_Fault
{
...
@@ -283,7 +285,7 @@ int esxVI_Fault_Deserialize(xmlNodePtr node, esxVI_Fault **fault);
...
@@ -283,7 +285,7 @@ int esxVI_Fault_Deserialize(xmlNodePtr node, esxVI_Fault **fault);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI
Type
: MethodFault
* VI
Object
: MethodFault
*/
*/
/*
/*
...
@@ -306,7 +308,7 @@ int esxVI_MethodFault_Deserialize(xmlNodePtr node,
...
@@ -306,7 +308,7 @@ int esxVI_MethodFault_Deserialize(xmlNodePtr node,
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI
Type
: ManagedObjectReference
* VI
Object
: ManagedObjectReference
*/
*/
struct
_esxVI_ManagedObjectReference
{
struct
_esxVI_ManagedObjectReference
{
...
@@ -347,84 +349,6 @@ int esxVI_ManagedObjectReference_Deserialize
...
@@ -347,84 +349,6 @@ int esxVI_ManagedObjectReference_Deserialize
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Managed Object: Datacenter
* extends ManagedEntity
*/
struct
_esxVI_Datacenter
{
esxVI_Datacenter
*
_next
;
/* optional */
esxVI_Type
_type
;
/* required */
esxVI_ManagedObjectReference
*
_reference
;
/* required */
/* ManagedEntity */
char
*
name
;
/* required */
/* Datacenter */
esxVI_ManagedObjectReference
*
hostFolder
;
/* required */
esxVI_ManagedObjectReference
*
vmFolder
;
/* required */
};
int
esxVI_Datacenter_Alloc
(
esxVI_Datacenter
**
datacenter
);
void
esxVI_Datacenter_Free
(
esxVI_Datacenter
**
datacenter
);
int
esxVI_Datacenter_Validate
(
esxVI_Datacenter
*
datacenter
);
int
esxVI_Datacenter_CastFromObjectContent
(
esxVI_ObjectContent
*
objectContent
,
esxVI_Datacenter
**
datacenter
);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Managed Object: ComputeResource
* extends ManagedEntity
*/
struct
_esxVI_ComputeResource
{
esxVI_ComputeResource
*
_next
;
/* optional */
esxVI_Type
_type
;
/* required */
esxVI_ManagedObjectReference
*
_reference
;
/* required */
/* ManagedEntity */
char
*
name
;
/* required */
/* ComputeResource */
esxVI_ManagedObjectReference
*
host
;
/* optional, list */
esxVI_ManagedObjectReference
*
resourcePool
;
/* optional */
};
int
esxVI_ComputeResource_Alloc
(
esxVI_ComputeResource
**
computeResource
);
void
esxVI_ComputeResource_Free
(
esxVI_ComputeResource
**
computeResource
);
int
esxVI_ComputeResource_Validate
(
esxVI_ComputeResource
*
computeResource
);
int
esxVI_ComputeResource_CastFromObjectContent
(
esxVI_ObjectContent
*
objectContent
,
esxVI_ComputeResource
**
computeResource
);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Managed Object: HostSystem
* extends ManagedEntity
*/
struct
_esxVI_HostSystem
{
esxVI_HostSystem
*
_next
;
/* optional */
esxVI_Type
_type
;
/* required */
esxVI_ManagedObjectReference
*
_reference
;
/* required */
/* ManagedEntity */
char
*
name
;
/* required */
/* HostSystem */
esxVI_HostConfigManager
*
configManager
;
/* required */
};
int
esxVI_HostSystem_Alloc
(
esxVI_HostSystem
**
hostSystem
);
void
esxVI_HostSystem_Free
(
esxVI_HostSystem
**
hostSystem
);
int
esxVI_HostSystem_Validate
(
esxVI_HostSystem
*
hostSystem
);
int
esxVI_HostSystem_CastFromObjectContent
(
esxVI_ObjectContent
*
objectContent
,
esxVI_HostSystem
**
hostSystem
);
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* VI Enum: VirtualMachinePowerState (Additions)
* VI Enum: VirtualMachinePowerState (Additions)
*/
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录