Revision 6df16263
b/snf-cyclades-gtools/synnefo/ganeti/eventd.py | ||
---|---|---|
57 | 57 |
import setproctitle |
58 | 58 |
|
59 | 59 |
from ganeti import utils, jqueue, constants, serializer, cli |
60 |
from ganeti import errors as ganeti_errors |
|
60 | 61 |
from ganeti.ssconf import SimpleConfigReader |
61 | 62 |
|
62 | 63 |
|
... | ... | |
96 | 97 |
def get_instance_nics(instance, logger): |
97 | 98 |
"""Query Ganeti to a get the instance's NICs. |
98 | 99 |
|
100 |
Get instance's NICs from Ganeti configuration data. If running on master, |
|
101 |
query Ganeti via Ganeti CLI client. Otherwise, get the nics from Ganeti |
|
102 |
configuration file. |
|
103 |
|
|
99 | 104 |
@type instance: string |
100 | 105 |
@param instance: the name of the instance |
101 | 106 |
@rtype: List of dicts |
102 |
@retrun: Dictionary containing the instance's NICs. Each dictionary
|
|
107 |
@return: Dictionary containing the instance's NICs. Each dictionary
|
|
103 | 108 |
contains the following keys: 'network', 'ip', 'mac', 'mode', |
104 | 109 |
'link' and 'firewall' |
105 | 110 |
|
106 | 111 |
""" |
107 |
fields = ["nic.networks", "nic.ips", "nic.macs", "nic.modes", "nic.links", |
|
108 |
"tags"] |
|
109 |
# Get Ganeti client |
|
110 |
client = cli.GetClient() |
|
111 |
info = client.QueryInstances([instance], fields, use_locking=False) |
|
112 |
networks, ips, macs, modes, links, tags = info[0] |
|
113 |
nic_keys = ["network", "ip", "mac", "mode", "link"] |
|
114 |
nics = zip(networks, ips, macs, modes, links) |
|
115 |
nics = map(lambda x: dict(zip(nic_keys, x)), nics) |
|
112 |
try: |
|
113 |
client = cli.GetClient() |
|
114 |
fields = ["nic.networks", "nic.ips", "nic.macs", "nic.modes", |
|
115 |
"nic.links", "tags"] |
|
116 |
info = client.QueryInstances([instance], fields, use_locking=False) |
|
117 |
networks, ips, macs, modes, links, tags = info[0] |
|
118 |
nic_keys = ["network", "ip", "mac", "mode", "link"] |
|
119 |
nics = zip(networks, ips, macs, modes, links) |
|
120 |
nics = map(lambda x: dict(zip(nic_keys, x)), nics) |
|
121 |
except ganeti_errors.OpPrereqError: |
|
122 |
# Not running on master! Load the conf file |
|
123 |
raw_data = utils.ReadFile(constants.CLUSTER_CONF_FILE) |
|
124 |
config = serializer.LoadJson(raw_data) |
|
125 |
i = config["instances"][instance] |
|
126 |
nics = [] |
|
127 |
for nic in i["nics"]: |
|
128 |
params = nic.pop("nicparams") |
|
129 |
nic["mode"] = params["mode"] |
|
130 |
nic["link"] = params["link"] |
|
131 |
nics.append(nic) |
|
132 |
tags = i.get("tags", []) |
|
116 | 133 |
# Get firewall from instance Tags |
117 | 134 |
# Tags are of the form synnefo:network:N:firewall_mode |
118 | 135 |
for tag in tags: |
Also available in: Unified diff