1

我正在尝试使用 xmlrpcapi 在我的 cobbler 服务器上设置系统的 eth0 接口的 mac 地址。

我可以设置像“comment”这样的简单字段,但我似乎无法设置mac地址,可能是因为我不知道要引用的路径。所以这有效:

    handle = server.get_system_handle(system, token)
    server.modify_system(handle, 'comment', 'my comment', token)
    server.save_system(handle, token)

但是如果我想设置 interfaces['eth0'][mac_address'] 我应该使用什么属性名称?

4

2 回答 2

0

在文档中找到了一个示例,该示例恰好显示了新系统的创建:

    server.modify_system(handle, 'modify_interface', {
            'macaddress-eth0': args.mac
        }, token)

我仍然不确定一种通用的方法来确定各种属性的路径是什么,只是对这个例子很幸运

于 2015-09-09T19:55:57.337 回答
0

在开发我们在 Wolfram 内部使用的prov实用程序时,我实际上不得不解决同样的问题。我不确定为什么 Cobbler 的数据表示不是双向的。我有效地执行以下操作:

system_name = '(something)' # The name of the system.
system_data = {} # The desired final state of the system data here.

# Pull out the interfaces dictionary.
if 'interfaces' in system_data:
  interfaces = system_data.pop('interfaces')
else:
  interfaces = {}

# Apply the non-interfaces data.
cobbler_server.xapi_object_edit('systems', system_name, 'edit', system_data, self.token)

# Apply interface-specific data.
handle = cobbler_server.get_system_handle(system_name, self.token)
ninterfaces = {}
for iname, ival in interfaces.items():
  for k, v in ival.items():
    if k in ['dns_name', 'ip_address', 'mac_address']:
      if v:
        ninterfaces[k.replace('_', '') + '-' + iname] = v
      else:
        ninterfaces[k + '-' + iname] = v
cobbler_server.modify_system(
  handle,
  'modify_interface',
  ninterfaces,
  self.token
)

cobbler_server.save_system(handle, self.token)
于 2020-11-23T17:43:45.907 回答