Subversion-Projekte lars-tiefland.openvz_admin

Revision

Revision 165 | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
3 lars 1
<?php
166 lars 2
 
157 lars 3
    //$Id: load.php 166 2011-07-10 19:08:10Z lars $
4
    /**
165 lars 5
     *     @package    openvz_admin
6
     *     @author        Lars Tiefland <ltiefland@gmail.com>
157 lars 7
     **/
8
    require ( "include/common.php" );
9
    $hns = HN::getHNs();
10
    unset( $hns[-1] );
11
    foreach ( $hns as $hn_id => $hn_name )
12
    {
13
        $configs = load_configs( $hn_id, $hn_name );
14
        foreach ( $configs as $conf_id => $config )
15
        {
16
            $cfg = read_config( $hn_id, $hn_name, $config );
17
            update_db( $hn_id, $cfg );
18
        }
19
    }
122 lars 20
 
157 lars 21
    function load_configs( $hn_id, $hn_name )
22
    {
23
        unset( $out );
24
        $cmd = "ping $hn_name -w1";
25
        exec( $cmd, $out, $ret );
162 lars 26
        if ( ! $ret )
157 lars 27
        {
28
            echo "Hole Konfigurationen von $hn_name\n";
29
            unset( $out );
30
            $cmd = "ssh root@$hn_name ls /etc/vz/conf/*.conf";
31
            exec( $cmd, $out, $ret );
162 lars 32
            if ( $ret )
33
            {
34
                trigger_error( "Konnte Konfigurationen nicht holen! Ist dies wirklich ein Virtuozzo / openvz-Server?",
35
                    E_USER_ERROR );
36
            }
157 lars 37
            return $out;
38
        }
39
    }
122 lars 40
 
157 lars 41
    function read_config( $hn_id, $hn_name, $config )
42
    {
43
        $config = basename( $config );
44
        $cmd = "scp root@$hn_name:/etc/vz/conf/$config cfgs/$hn_id";
45
        exec( $cmd, $out, $ret );
46
        $conf = file( "cfgs/$hn_id/$config" );
162 lars 47
        $conf[] = "v_id=\"" . substr( $config, 0, strpos( $config, '.' ) ) . "\"";
157 lars 48
        foreach ( $conf as $value )
49
        {
50
            if ( $value )
51
            {
52
                $value = rtrim( $value );
53
                if ( $value[0] == " " || $value[0] == "#" )
54
                {
55
                    continue;
56
                }
57
                $cfg_v = explode( "=", $value );
58
                $cfg_val[$cfg_v[0]] = trim( $cfg_v[1], '"' );
59
            }
60
            else
61
            {
62
                continue;
63
            }
64
        }
65
        $cfgs[] = $cfg_val;
66
        return $cfgs;
67
    }
122 lars 68
 
157 lars 69
    function update_db( $hn_id, $cfgs )
70
    {
71
        global $db;
125 lars 72
 
157 lars 73
        foreach ( $cfgs as $config )
74
        {
162 lars 75
            if ( isset( $config["DISTRIBUTION"] ) )
157 lars 76
            {
77
                $dist_name = $config["DISTRIBUTION"];
78
            }
79
            else
80
            {
166 lars 81
                if ( in_array( $hn_id, array( 1, 3 ) ) )
82
                {
83
                    $dist_name = "gentoo";
84
                }
85
                else
86
                {
87
                    $dist_name = "centos";
88
                }
157 lars 89
            }
90
            $sql = "
165 lars 91
                SELECT
92
                    *
93
                FROM
94
                    distributions
95
                WHERE
96
                    dist_name='$dist_name'
97
            ";
157 lars 98
            $res = $db->query( $sql );
162 lars 99
            if ( ! PEAR::isError( $res ) )
157 lars 100
            {
101
                if ( $res->numRows() )
102
                {
103
                    $row = $res->fetchRow();
104
                    $dist_id = $row["dist_id"];
105
                    $sql_v = "
165 lars 106
                        SELECT
107
                            v_dist,
108
                            dist_name
109
                        FROM
110
                            distributions,
111
                            vservers
112
                        WHERE
113
                            v_id=" . $config["v_id"] . "
114
                        AND
115
                            dist_id=v_dist
116
                    ";
157 lars 117
                    $res_v = $db->query( $sql_v );
162 lars 118
                    if ( PEAR::isError( $res_v ) )
157 lars 119
                    {
120
                        die( $res_v->getUserInfo() );
121
                    }
122
                    $row_v = $res_v->fetchRow();
123
                    $dist_name = $row_v["dist_name"];
124
                    if ( $dist_name != $config["DISTRIBUTION"] )
125
                    {
126
                        $sql = "
165 lars 127
                            UPDATE
128
                                vservers
129
                            SET
130
                                v_dist=$dist_id
131
                            WHERE
132
                                v_id=" . $config["v_id"] . "
133
                        ";
157 lars 134
                        $res = $db->query( $sql );
162 lars 135
                        if ( PEAR::isError( $res ) )
157 lars 136
                        {
137
                            die( $res->getUserInfo() );
138
                        }
139
                    }
140
                }
141
                else
142
                {
143
                    $sql = "
165 lars 144
                        INSERT INTO
145
                            distributions
146
                        (
147
                            dist_name,
148
                            dist_template
149
                        )
150
                        VALUES
151
                        (
152
                            '" . $config["DISTRIBUTION"] . "',
153
                            '" . $config["OSTEMPLATE"] . "'
154
                        )
155
                    ";
157 lars 156
                    $res = $db->query( $sql );
157
                    $dist_id = $db->lastinsertID();
158
                }
159
            }
160
            else
161
            {
162
                die( $res->getUserInfo() );
163
            }
164
            $sql = "
165 lars 165
                SELECT
166
                    *
167
                FROM
168
                    vservers
169
                WHERE
170
                    v_id=" . $config["v_id"] . "
171
                AND
172
                    hn_id=$hn_id
173
            ";
157 lars 174
            $res = $db->query( $sql );
162 lars 175
            if ( ! PEAR::isError( $res ) )
157 lars 176
            {
162 lars 177
                if ( ! $res->numRows() )
157 lars 178
                {
179
                    $sql = "
165 lars 180
                        INSERT INTO
181
                            vservers
182
                        (
183
                            v_id,
184
                            v_name,
185
                            v_dist,
186
                            hn_id
187
                        )
188
                        VALUES
189
                        (
190
                            " . $config["v_id"] . ",
191
                            '" . $config["HOSTNAME"] . "',
192
                            $dist_id,
193
                            $hn_id
194
                        )
195
                    ";
157 lars 196
                    $res = $db->query( $sql );
162 lars 197
                    if ( PEAR::isError( $res ) )
157 lars 198
                    {
158 lars 199
                        die( $res->getUserInfo() );
157 lars 200
                    }
201
                } elseif ( $config["HOSTNAME"] )
202
                {
203
                    $sql = "
165 lars 204
                        UPDATE
205
                            vservers
206
                        SET
207
                            v_name='" . $config["HOSTNAME"] . "'
208
                        WHERE
209
                            v_id=" . $config["v_id"] . "
210
                        AND
211
                            hn_id=$hn_id
212
                    ";
157 lars 213
                    $res = $db->query( $sql );
162 lars 214
                    if ( PEAR::isError( $res ) )
157 lars 215
                    {
158 lars 216
                        die( $res->getUserInfo() );
157 lars 217
                    }
218
                }
219
            }
220
            else
221
            {
222
                die( $res->getUserInfo() );
223
            }
224
            foreach ( $config as $field => $value )
225
            {
226
                $sql = "
165 lars 227
                    SELECT
228
                        *
229
                    FROM
230
                        vserver_config
231
                    WHERE
232
                        vc_name='$field'
233
                    AND
234
                        v_id=" . $config["v_id"] . "
235
                    AND
236
                        hn_id=$hn_id
237
                ";
157 lars 238
                $res = $db->query( $sql );
162 lars 239
                if ( ! PEAR::isError( $res ) )
157 lars 240
                {
241
                    if ( $res->numRows() )
242
                    {
243
                        $sql = "
165 lars 244
                            UPDATE
245
                                vserver_config
246
                            SET
247
                                vc_value='$value'
248
                            WHERE
249
                                vc_name='$field'
250
                            AND
251
                                v_id=" . $config["v_id"] . "
252
                            AND
253
                                hn_id=$hn_id
254
                        ";
157 lars 255
                    }
256
                    else
257
                    {
258
                        $sql = "
165 lars 259
                            INSERT INTO
260
                                vserver_config
261
                            VALUES
262
                            (
263
                                " . $config["v_id"] . ",
264
                                $hn_id,
265
                                '$field',
266
                                '$value'
267
                            )
268
                        ";
157 lars 269
                    }
270
                    $res = $db->query( $sql );
162 lars 271
                    if ( PEAR::isError( $res ) )
157 lars 272
                    {
158 lars 273
                        die( $res->getUserInfo() );
157 lars 274
                    }
275
                }
276
                else
277
                {
158 lars 278
                    die( $res->getUserInfo() );
157 lars 279
                }
280
            }
281
        }
282
    }
166 lars 283
 
136 lars 284
?>