Subversion-Projekte lars-tiefland.openvz_admin

Revision

Revision 162 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

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