Subversion-Projekte lars-tiefland.openvz_admin

Revision

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

Revision Autor Zeilennr. Zeile
13 lars 1
<?php
2
	//$Id: vServer.class.php 143 2008-08-08 22:06:36Z lars $
109 lars 3
	/**
4
	 * 	@package	openvz_admin
5
	 * 	@author		Lars Tiefland <ltiefland@gmail.com>
6
	 **/
13 lars 7
	class vServer
8
	{
140 lars 9
		protected $status;
10
		protected $name;
11
		protected $hn_id;
12
		protected $dist;
13
		protected $dist_id;
14
		protected $v_id;
143 lars 15
 
16
		function toArray()
17
		{
18
			$ret["hn_id"]=$this->hn_id;
19
			$ret["v_id"]=$this->v_id;
20
			$ret["dist_id"]=$this->dist_id;
21
			$ret["dist"]=$this->dist;
22
			$ret["name"]=$this->name;
23
			$ret["status"]=$this->status;
24
			return $ret;
25
		}
140 lars 26
		function __construct($v_id = null, $hn_id = 1)
27
		{
28
			global $db;
29
			if (is_numeric($v_id))
13 lars 30
			{
140 lars 31
				$sql = "SELECT * FROM vservers, distributions WHERE v_id=$v_id AND hn_id=$hn_id AND dist_id=v_dist";
32
				$res = $db->query($sql);
33
				if (!PEAR::isError($res))
13 lars 34
				{
140 lars 35
					$row = $res->fetchRow();
36
					$this->v_id = $v_id;
37
					$this->dist = $row["dist_name"];
38
					$this->dist_id = $row["dist_id"];
39
					$this->name = $row["v_name"];
40
					$this->hn_id = $hn_id;
41
					$this->status = $this->getStatus();
13 lars 42
				}
43
				else
44
				{
45
					echo $res->getUserInfo();
46
					return false;
47
				}
48
			}
49
			else
50
			{
140 lars 51
				$this->v_id = 0;
52
				$this->dist_id = 1;
53
				$this->dist = "gentoo";
54
				$this->hn_id = 1;
55
				$this->name = "";
56
				$this->status["status"] = "";
57
				$this->status["code"] = "0";
13 lars 58
			}
59
		}
140 lars 60
 
87 lars 61
		function getStatus()
13 lars 62
		{
140 lars 63
			if (!$this->status)
13 lars 64
			{
65
 
66
				unset($out);
140 lars 67
				if ($this->v_id != 0)
13 lars 68
				{
140 lars 69
					$id = $this->v_id;
70
					$hn = HN::getHN($this->hn_id);
71
					$cmd = "ssh root@" . $hn["name"] . " vzctl status $id";
72
					exec($cmd, $out, $ret);
73
					if (!$ret)
13 lars 74
					{
140 lars 75
						$out_v["status"] = $out[0];
13 lars 76
					}
77
					else
78
					{
140 lars 79
						$out_v["status"] = "unknown";
13 lars 80
					}
140 lars 81
					$out_v["code"] = $ret;
13 lars 82
				}
83
				else
84
				{
140 lars 85
					$id = $this->v_id;
86
					$hn = HN::getHN($this->hn_id);
87
					$hn_status = $hn["status"];
88
					$out_v["status"] = "Hardware node is $hn_status";
89
					if ($hn_status == "online")
133 lars 90
					{
140 lars 91
						$out_v["code"] = 0;
133 lars 92
					}
93
					else
94
					{
140 lars 95
						$out_v["code"] = 1;
133 lars 96
					}
13 lars 97
				}
140 lars 98
				if (eregi("running", $out_v["status"]) || eregi("online", $out_v["status"]))
13 lars 99
				{
140 lars 100
					$out_v["started"] = true;
13 lars 101
				}
102
				else
103
				{
140 lars 104
					$out_v["started"] = false;
13 lars 105
				}
140 lars 106
				if (!$out_v["code"] && $out_v["started"])
13 lars 107
				{
140 lars 108
					$class = "success_upd";
13 lars 109
				}
110
				else
111
				{
140 lars 112
					$class = "error_upd";
13 lars 113
				}
140 lars 114
				$out_v["status"] = "<div class=\"$class\">" . $out_v["status"] . "</div>";
115
				$this->status = $out_v;
13 lars 116
 
117
			}
118
			return $this->status;
119
		}
140 lars 120
 
121
		static function getvServers($hn_id = 1)
13 lars 122
		{
123
			global $db;
140 lars 124
			$sql = "SELECT * FROM vservers WHERE hn_id=$hn_id ORDER BY v_id";
125
			$res = $db->query($sql);
126
			$id = 0;
127
			while ($row = $res->fetchRow())
29 lars 128
			{
140 lars 129
				$vservers[$id] = $row;
130
				$v = new vServer($row["v_id"], $row["hn_id"]);
131
				$ret = $v->getStatus();
132
				$dist = new Dist($row["v_dist"]);
133
				$dist_info = $dist->toArray();
134
				$vservers[$id]["id"] = $row["id"];
135
				$vservers[$id]["v_dist_name"] = $dist_info["dist_name"];
136
				$vservers[$id]["v_status"] = $ret["status"];
137
				$vservers[$id]["code"] = $ret["code"];
138
				$vservers[$id]["started"] = $ret["started"];
68 lars 139
				$id++;
29 lars 140
			}
141
			return $vservers;
13 lars 142
		}
140 lars 143
 
144
		function control($cmd = "")
15 lars 145
		{
140 lars 146
			$cmds = array("start", "stop", "restart", "destroy");
147
			if ($cmd == "" || !in_array($cmd, $cmds))
15 lars 148
			{
149
				return false;
150
			}
151
			unset($out);
140 lars 152
			if ($this->v_id != 0)
15 lars 153
			{
140 lars 154
				$id = $this->v_id;
155
				$hn = HN::getHN($this->hn_id);
156
				$cmd = "ssh root@" . $hn["name"] . " vzctl $cmd $id";
157
				exec($cmd, $out, $ret);
158
				if (!$ret)
15 lars 159
				{
140 lars 160
					$out_v["status"] = implode("<br>", $out);
161
					$out_v["error"] = false;
15 lars 162
				}
163
				else
164
				{
140 lars 165
					$out_v["status"] = "unknown";
166
					$out_v["error"] = true;
15 lars 167
				}
140 lars 168
				$out_v["code"] = $ret;
15 lars 169
			}
170
			else
171
			{
140 lars 172
				$hn = HN::getHN($this->hn_id);
173
				switch ($cmd)
174
				{
175
					case "restart":
176
						$cmd = "ssh root@" . $hn["name"] . " reboot";
177
						exec($cmd, $out, $ret);
178
						if (!$ret)
179
						{
180
							$out_v["status"] = implode("<br>", $out);
181
							$out_v["error"] = false;
182
						}
183
						else
184
						{
185
							$out_v["status"] = "unknown";
186
							$out_v["error"] = true;
187
						}
188
						$out_v["code"] = $ret;
189
						break;
190
					default:
191
						$out_v["code"]=255;
192
						$out_v["error"]=true;
193
						$out_v["status"]="n/a";
194
						break;
195
				}
15 lars 196
			}
197
			return $out_v;
198
		}
140 lars 199
 
44 lars 200
		function save($v_name, $v_dist, $v_ip, $v_r_pw)
201
		{
202
			global $db, $smarty;
140 lars 203
			$this->name = $v_name;
204
			$this->dist_id = $v_dist;
44 lars 205
			unset($out);
140 lars 206
			$d = new Dist($v_dist);
207
			$dist = $d->toArray();
208
			$ip = IP::getIP($v_ip);
209
			$d_name = $dist["dist_name"];
210
			$this->dist = $d_name;
211
			$d_template = $dist["template"];
44 lars 212
			$db->beginTransaction();
140 lars 213
			$sql = "INSERT into vservers (v_id, hn_id, v_name, v_dist) VALUES ($this->v_id, $this->hn_id, '$this->name', $this->dist_id)";
214
			$res = $db->query($sql);
215
			if (!PEAR::isError($res))
44 lars 216
			{
140 lars 217
				$v_id = $db->lasinsertid();
218
				$sql_ip = "SELECT id FROM ips WHERE ip='$v_ip'";
219
				$res_ip = $db->query($sql_ip);
220
				if (!PEAR::isError($res_ip))
44 lars 221
				{
140 lars 222
					$row_ip = $res->fetchRow();
223
					$ip_id = $row_ip["id"];
224
					$sql = "INSERT INTO host_2_ip (ve_id, ip) VALUES ($v_id,$ip_id)";
225
					$res = $db->query($sql);
226
					if (!PEAR::isError($res))
72 lars 227
					{
140 lars 228
						$cmd = "ssh root@mainframe vzctl create $this->v_id --hostname $v_name --ostemplate $d_template --config vps.$d_name --ipadd " .
229
							$ip["ip"];
230
						exec($cmd, $out, $ret);
231
						if (!$ret)
72 lars 232
						{
140 lars 233
							$smarty->assign("meld", "vServer erfolgreich angelegt!");
72 lars 234
							$smarty->assign("error", false);
235
							$db->commit();
236
						}
237
						else
238
						{
239
							$smarty->assign("error", true);
140 lars 240
							$smarty->assign("meld", "Ein Fehler ist aufgetreten!");
241
							$smarty->assign("db_meld", $cmd . "<br>" . implde("<br>", $out));
72 lars 242
							$db->rollback();
243
						}
244
					}
245
					else
246
					{
247
						$smarty->assign("error", true);
140 lars 248
						$smarty->assign("meld", "Ein Fehler ist aufgetreten!");
249
						$smarty->assign("db_meld", $res->getUserInfo());
72 lars 250
						$db->rollback();
251
					}
44 lars 252
				}
253
				else
254
				{
255
					$smarty->assign("error", true);
140 lars 256
					$smarty->assign("meld", "Ein Fehler ist aufgetreten!");
257
					$smarty->assign("db_meld", $res_ip->getUserInfo());
44 lars 258
					$db->rollback();
259
				}
260
			}
261
			else
262
			{
263
				$smarty->assign("error", true);
140 lars 264
				$smarty->assign("meld", "Ein Fehler ist aufgetreten!");
265
				$smarty->assign("db_meld", $res->getUserInfo());
44 lars 266
				$db->rollback();
267
			}
268
		}
13 lars 269
	}
70 lars 270
?>