Subversion-Projekte lars-tiefland.openvz_admin

Revision

Revision 159 | Revision 165 | 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 162 2010-03-12 23:25:46Z lars $
3
    /**
4
     * 	@package	openvz_admin
5
     * 	@author		Lars Tiefland <ltiefland@gmail.com>
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 = "
86
				SELECT
87
					*
88
				FROM
89
					distributions
90
				WHERE
91
					dist_name='$dist_name'
92
			";
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 = "
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
					";
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 = "
122
							UPDATE
123
								vservers
124
							SET
125
								v_dist=$dist_id
126
							WHERE
127
								v_id=" . $config["v_id"] . "
128
						";
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 = "
139
						INSERT INTO
140
							distributions
141
						(
142
							dist_name,
143
							dist_template
144
						)
145
						VALUES
146
						(
147
							'" . $config["DISTRIBUTION"] . "',
148
							'" . $config["OSTEMPLATE"] . "'
149
						)
150
					";
151
                    $res = $db->query( $sql );
152
                    $dist_id = $db->lastinsertID();
153
                }
154
            }
155
            else
156
            {
157
                die( $res->getUserInfo() );
158
            }
159
            $sql = "
160
				SELECT
161
					*
162
				FROM
163
					vservers
164
				WHERE
165
					v_id=" . $config["v_id"] . "
166
				AND
167
					hn_id=$hn_id
168
			";
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 = "
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
					";
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 = "
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
					";
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 = "
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
159 lars 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 = "
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
						";
250
                    }
251
                    else
252
                    {
253
                        $sql = "
254
							INSERT INTO
255
								vserver_config
256
							VALUES
257
							(
258
								" . $config["v_id"] . ",
259
								$hn_id,
260
								'$field',
261
								'$value'
262
							)
263
						";
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
?>