Revision 737b0e28

b/ganeti/hooks.py
1 1
#!/usr/bin/env python
2 2
#
3
# Copyright (c) 2010 Greek Research and Technology Network
3
# -*- coding: utf-8 -*-
4
#
5
# Copyright 2011 GRNET S.A. All rights reserved.
6
#
7
# Redistribution and use in source and binary forms, with or
8
# without modification, are permitted provided that the following
9
# conditions are met:
10
#
11
#   1. Redistributions of source code must retain the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer.
14
#
15
#   2. Redistributions in binary form must reproduce the above
16
#      copyright notice, this list of conditions and the following
17
#      disclaimer in the documentation and/or other materials
18
#      provided with the distribution.
19
#
20
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
# POSSIBILITY OF SUCH DAMAGE.
32
#
33
# The views and conclusions contained in the software and
34
# documentation are those of the authors and should not be
35
# interpreted as representing official policies, either expressed
36
# or implied, of GRNET S.A.
4 37
#
5 38
"""Ganeti hooks for Synnefo
6 39

  
......
23 56

  
24 57
def ganeti_net_status(logger, environ):
25 58
    """Produce notifications of type 'Ganeti-net-status'
26
    
59

  
27 60
    Process all GANETI_INSTANCE_NICx_y environment variables,
28 61
    where x is the NIC index, starting at 0,
29 62
    and y is one of "MAC", "IP", "BRIDGE".
......
177 210
        if self.on_master():
178 211
            notifs = []
179 212
            notifs.append(("net", ganeti_net_status(self.logger, self.environ)))
180
            
213

  
181 214
            self.publish_msgs(notifs)
182 215

  
183 216
        return 0
b/ganeti/snf-ganeti-eventd.py
1 1
#!/usr/bin/env python
2 2
#
3
# Copyright (c) 2010 Greek Research and Technology Network
3
# -*- coding: utf-8 -*-
4 4
#
5
"""Ganeti notification daemon with AMQP
5
# Copyright 2011 GRNET S.A. All rights reserved.
6
#
7
# Redistribution and use in source and binary forms, with or
8
# without modification, are permitted provided that the following
9
# conditions are met:
10
#
11
#   1. Redistributions of source code must retain the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer.
14
#
15
#   2. Redistributions in binary form must reproduce the above
16
#      copyright notice, this list of conditions and the following
17
#      disclaimer in the documentation and/or other materials
18
#      provided with the distribution.
19
#
20
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
# POSSIBILITY OF SUCH DAMAGE.
32
#
33
# The views and conclusions contained in the software and
34
# documentation are those of the authors and should not be
35
# interpreted as representing official policies, either expressed
36
# or implied, of GRNET S.A.
37
#
38
"""Ganeti notification daemon with AMQP support
6 39

  
7 40
A daemon to monitor the Ganeti job queue and publish job progress
8 41
and Ganeti VM state notifications to the ganeti exchange
......
39 72
    def __init__(self, logger):
40 73
        pyinotify.ProcessEvent.__init__(self)
41 74
        self.logger = logger
42
        self.chan = None 
75
        self.chan = None
43 76

  
44 77
    def open_channel(self):
45 78
        conn = None
......
53 86
                     virtual_host=settings.RABBIT_VHOST)
54 87
            except socket.error:
55 88
                time.sleep(1)
56
        
89

  
57 90
        handler_logger.info("Connection succesful, opening channel")
58 91
        return conn.channel()
59 92

  
......
109 142
                    }
110 143
            if logmsg:
111 144
                msg["message"] = logmsg
112
            
113
            instance = instances.split('-')[0]  
145

  
146
            instance = instances.split('-')[0]
114 147
            routekey = "ganeti.%s.event.op" % instance
115
            
148

  
116 149
            self.logger.debug("Delivering msg: %s (key=%s)",
117 150
                json.dumps(msg), routekey)
118 151
            msg = amqp.Message(json.dumps(msg))
b/ganeti/snf-ganeti-hook.py
1 1
#!/usr/bin/env python
2 2
#
3
# Copyright (c) 2010 Greek Research and Technology Network
3
# -*- coding: utf-8 -*-
4
#
5
# Copyright 2011 GRNET S.A. All rights reserved.
6
#
7
# Redistribution and use in source and binary forms, with or
8
# without modification, are permitted provided that the following
9
# conditions are met:
10
#
11
#   1. Redistributions of source code must retain the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer.
14
#
15
#   2. Redistributions in binary form must reproduce the above
16
#      copyright notice, this list of conditions and the following
17
#      disclaimer in the documentation and/or other materials
18
#      provided with the distribution.
19
#
20
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
21
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
24
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
27
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
# POSSIBILITY OF SUCH DAMAGE.
32
#
33
# The views and conclusions contained in the software and
34
# documentation are those of the authors and should not be
35
# interpreted as representing official policies, either expressed
36
# or implied, of GRNET S.A.
4 37
#
5 38
"""Ganeti hook for Synnefo
6 39

  
......
30 63
# "instance-stop", "instance-reboot", "instance-modify". See the Ganeti
31 64
# documentation for a full list.
32 65

  
33
# The operation and phase for which the hook run are determined from the 
66
# The operation and phase for which the hook run are determined from the
34 67
# values of the GANETI_HOOK_PATH and GANETI_HOOK_PHASE environment variables.
35 68
# For each valid (operation, phase) pair control passes to the corresponding
36 69
# Python function, based on the following dictionary.
......
57 90
    except KeyError:
58 91
        raise Exception("Environment missing one of: " \
59 92
            "GANETI_INSTANCE_NAME, GANETI_HOOKS_PATH, GANETI_HOOKS_PHASE")
60
        
93

  
61 94
    prefix = instance.split('-')[0]
62
  
95

  
63 96
    # FIXME: The hooks should only run for Synnefo instances.
64 97
    # Uncomment the following lines for a shared Ganeti deployment.
65 98
    # Currently, the following code is commented out because multiple

Also available in: Unified diff