Subversion-Projekte lars-tiefland.openvz_admin

Revision

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