InPanel 1.2.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. inpanel/__init__.py +29 -0
  2. inpanel/acme.py +289 -0
  3. inpanel/aliyuncs.py +269 -0
  4. inpanel/app.py +514 -0
  5. inpanel/apt.py +223 -0
  6. inpanel/base.py +200 -0
  7. inpanel/config.py +139 -0
  8. inpanel/data/config.ini +29 -0
  9. inpanel/data/history +5 -0
  10. inpanel/data/runlogs.ini +12 -0
  11. inpanel/data/update_info.ini +4 -0
  12. inpanel/dnf.py +225 -0
  13. inpanel/lib/__init__.py +9 -0
  14. inpanel/lib/async_process.py +98 -0
  15. inpanel/lib/filelock.py +82 -0
  16. inpanel/lib/magic.py +233 -0
  17. inpanel/lib/pxssh.py +310 -0
  18. inpanel/lib/pyDes.py +867 -0
  19. inpanel/mod/__init__.py +0 -0
  20. inpanel/mod/apt.py +316 -0
  21. inpanel/mod/certificate.py +268 -0
  22. inpanel/mod/config.py +372 -0
  23. inpanel/mod/cron.py +315 -0
  24. inpanel/mod/disk.py +322 -0
  25. inpanel/mod/dnf.py +239 -0
  26. inpanel/mod/file.py +722 -0
  27. inpanel/mod/firewall.py +199 -0
  28. inpanel/mod/firewall_base.py +137 -0
  29. inpanel/mod/firewall_firewalld.py +170 -0
  30. inpanel/mod/firewall_iptables.py +176 -0
  31. inpanel/mod/firewall_macos.py +213 -0
  32. inpanel/mod/firewall_ufw.py +128 -0
  33. inpanel/mod/ftp.py +231 -0
  34. inpanel/mod/httpd.py +1205 -0
  35. inpanel/mod/lighttpd.py +26 -0
  36. inpanel/mod/login.py +98 -0
  37. inpanel/mod/mysql.py +577 -0
  38. inpanel/mod/named.py +26 -0
  39. inpanel/mod/nginx.py +2327 -0
  40. inpanel/mod/package.py +33 -0
  41. inpanel/mod/package_apt.py +62 -0
  42. inpanel/mod/package_base.py +77 -0
  43. inpanel/mod/package_dnf.py +62 -0
  44. inpanel/mod/package_map.py +366 -0
  45. inpanel/mod/package_yum.py +64 -0
  46. inpanel/mod/php.py +289 -0
  47. inpanel/mod/process.py +291 -0
  48. inpanel/mod/proftpd.py +26 -0
  49. inpanel/mod/pureftpd.py +26 -0
  50. inpanel/mod/query.py +108 -0
  51. inpanel/mod/server.py +1319 -0
  52. inpanel/mod/service.py +262 -0
  53. inpanel/mod/setting.py +228 -0
  54. inpanel/mod/shell.py +78 -0
  55. inpanel/mod/ssh.py +280 -0
  56. inpanel/mod/system.py +220 -0
  57. inpanel/mod/task.py +1337 -0
  58. inpanel/mod/ufw.py +14 -0
  59. inpanel/mod/user.py +306 -0
  60. inpanel/mod/vsftpd.py +67 -0
  61. inpanel/mod/yum.py +243 -0
  62. inpanel/plugins/__init__.py +10 -0
  63. inpanel/plugins/__pycache__/__init__.cpython-313.pyc +0 -0
  64. inpanel/plugins/acme/static/index.html +10 -0
  65. inpanel/plugins/acme/static/index.js +13 -0
  66. inpanel/plugins/shadowsocks-libev/__pycache__/info.cpython-313.pyc +0 -0
  67. inpanel/plugins/shadowsocks-libev/info.py +73 -0
  68. inpanel/plugins/shadowsocks-libev/static/index.html +70 -0
  69. inpanel/plugins/shadowsocks-libev/static/index.js +18 -0
  70. inpanel/public/css/global.css +138 -0
  71. inpanel/public/favicon.ico +0 -0
  72. inpanel/public/images/alipay.jpg +0 -0
  73. inpanel/public/images/loading.gif +0 -0
  74. inpanel/public/images/weixin.jpg +0 -0
  75. inpanel/public/index.html +94 -0
  76. inpanel/public/js/controllers/controllers.js +566 -0
  77. inpanel/public/js/controllers/database.js +590 -0
  78. inpanel/public/js/controllers/ecs.js +624 -0
  79. inpanel/public/js/controllers/file.js +940 -0
  80. inpanel/public/js/controllers/plugins.js +105 -0
  81. inpanel/public/js/controllers/service.js +1460 -0
  82. inpanel/public/js/controllers/site.js +1241 -0
  83. inpanel/public/js/controllers/utils.js +2319 -0
  84. inpanel/public/js/core.js +221 -0
  85. inpanel/public/js/directives.js +784 -0
  86. inpanel/public/js/filters.js +395 -0
  87. inpanel/public/js/services.js +257 -0
  88. inpanel/public/lib/angular/1.0.2/angular-resource.min.js +10 -0
  89. inpanel/public/lib/angular/1.0.2/angular.min.js +158 -0
  90. inpanel/public/lib/bootstrap/css/bootstrap-theme.css +587 -0
  91. inpanel/public/lib/bootstrap/css/bootstrap-theme.css.map +1 -0
  92. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css +6 -0
  93. inpanel/public/lib/bootstrap/css/bootstrap-theme.min.css.map +1 -0
  94. inpanel/public/lib/bootstrap/css/bootstrap.css +6757 -0
  95. inpanel/public/lib/bootstrap/css/bootstrap.css.map +1 -0
  96. inpanel/public/lib/bootstrap/css/bootstrap.min.css +6 -0
  97. inpanel/public/lib/bootstrap/css/bootstrap.min.css.map +1 -0
  98. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
  99. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.svg +288 -0
  100. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
  101. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
  102. inpanel/public/lib/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
  103. inpanel/public/lib/bootstrap/img/glyphicons-halflings-white.png +0 -0
  104. inpanel/public/lib/bootstrap/img/glyphicons-halflings.png +0 -0
  105. inpanel/public/lib/bootstrap/js/bootstrap.js +2377 -0
  106. inpanel/public/lib/bootstrap/js/bootstrap.min.js +7 -0
  107. inpanel/public/lib/bootstrap/js/npm.js +13 -0
  108. inpanel/public/lib/codemirror/codemirror-compressed.js +1 -0
  109. inpanel/public/lib/codemirror/codemirror.css +173 -0
  110. inpanel/public/lib/jquery/jquery-1.12.4.min.js +5 -0
  111. inpanel/public/lib/md5/md5.js +379 -0
  112. inpanel/public/lib/md5/md5.min.js +1 -0
  113. inpanel/public/partials/database/index.html +172 -0
  114. inpanel/public/partials/database/mysql/dbedit.html +462 -0
  115. inpanel/public/partials/database/mysql/dbnew.html +348 -0
  116. inpanel/public/partials/database/mysql/useredit.html +310 -0
  117. inpanel/public/partials/database/mysql/usernew.html +97 -0
  118. inpanel/public/partials/directives/message.html +20 -0
  119. inpanel/public/partials/directives/navbar.html +25 -0
  120. inpanel/public/partials/directives/selector.html +57 -0
  121. inpanel/public/partials/directives/srvbase.html +72 -0
  122. inpanel/public/partials/directives/srvext.html +34 -0
  123. inpanel/public/partials/directives/srvfile.html +23 -0
  124. inpanel/public/partials/directives/srvinstall.html +34 -0
  125. inpanel/public/partials/directives/srvlog.html +23 -0
  126. inpanel/public/partials/directives/srvminiop.html +28 -0
  127. inpanel/public/partials/directives/srvuninstall.html +38 -0
  128. inpanel/public/partials/directives/srvupdate.html +30 -0
  129. inpanel/public/partials/ecs/account.html +156 -0
  130. inpanel/public/partials/ecs/ecs.html +198 -0
  131. inpanel/public/partials/ecs/index.html +40 -0
  132. inpanel/public/partials/ecs/setings.html +459 -0
  133. inpanel/public/partials/file/file.html +501 -0
  134. inpanel/public/partials/file/trash.html +95 -0
  135. inpanel/public/partials/ftp.html +36 -0
  136. inpanel/public/partials/log.html +83 -0
  137. inpanel/public/partials/login.html +79 -0
  138. inpanel/public/partials/logout.html +22 -0
  139. inpanel/public/partials/main.html +534 -0
  140. inpanel/public/partials/plugins/index.html +55 -0
  141. inpanel/public/partials/plugins/plugins.html +13 -0
  142. inpanel/public/partials/secure.html +13 -0
  143. inpanel/public/partials/service/apache.html +147 -0
  144. inpanel/public/partials/service/cron.html +71 -0
  145. inpanel/public/partials/service/index.html +293 -0
  146. inpanel/public/partials/service/iptables.html +40 -0
  147. inpanel/public/partials/service/lighttpd.html +63 -0
  148. inpanel/public/partials/service/mariadb.html +113 -0
  149. inpanel/public/partials/service/memcache.html +36 -0
  150. inpanel/public/partials/service/minio.html +44 -0
  151. inpanel/public/partials/service/mongodb.html +44 -0
  152. inpanel/public/partials/service/mysql.html +113 -0
  153. inpanel/public/partials/service/named.html +61 -0
  154. inpanel/public/partials/service/nginx.html +296 -0
  155. inpanel/public/partials/service/ntp.html +40 -0
  156. inpanel/public/partials/service/php.html +250 -0
  157. inpanel/public/partials/service/proftpd.html +59 -0
  158. inpanel/public/partials/service/pureftpd.html +59 -0
  159. inpanel/public/partials/service/redis.html +40 -0
  160. inpanel/public/partials/service/samba.html +58 -0
  161. inpanel/public/partials/service/sendmail.html +40 -0
  162. inpanel/public/partials/service/ssh.html +186 -0
  163. inpanel/public/partials/service/tomcat.html +65 -0
  164. inpanel/public/partials/service/vsftpd.html +195 -0
  165. inpanel/public/partials/setting.html +299 -0
  166. inpanel/public/partials/site/apache/site.html +277 -0
  167. inpanel/public/partials/site/index.html +344 -0
  168. inpanel/public/partials/site/nginx/site.html +558 -0
  169. inpanel/public/partials/sorry.html +19 -0
  170. inpanel/public/partials/storage/autofm.html +103 -0
  171. inpanel/public/partials/storage/backup.html +42 -0
  172. inpanel/public/partials/storage/index.html +360 -0
  173. inpanel/public/partials/storage/migrate.html +93 -0
  174. inpanel/public/partials/storage/movedata.html +98 -0
  175. inpanel/public/partials/storage/remote.html +77 -0
  176. inpanel/public/partials/utils/cron.html +486 -0
  177. inpanel/public/partials/utils/firewall.html +266 -0
  178. inpanel/public/partials/utils/index.html +193 -0
  179. inpanel/public/partials/utils/network.html +118 -0
  180. inpanel/public/partials/utils/process.html +239 -0
  181. inpanel/public/partials/utils/repository.html +373 -0
  182. inpanel/public/partials/utils/shell.html +28 -0
  183. inpanel/public/partials/utils/ssl.html +319 -0
  184. inpanel/public/partials/utils/time.html +109 -0
  185. inpanel/public/partials/utils/user.html +359 -0
  186. inpanel/public/robots.txt +2 -0
  187. inpanel/remote.py +109 -0
  188. inpanel/templates/file/preview.html +34 -0
  189. inpanel/templates/index.html +93 -0
  190. inpanel/utils.py +282 -0
  191. inpanel/web.py +1811 -0
  192. inpanel/yum.py +756 -0
  193. inpanel-1.2.1.dist-info/METADATA +399 -0
  194. inpanel-1.2.1.dist-info/RECORD +198 -0
  195. inpanel-1.2.1.dist-info/WHEEL +5 -0
  196. inpanel-1.2.1.dist-info/entry_points.txt +2 -0
  197. inpanel-1.2.1.dist-info/licenses/LICENSE +30 -0
  198. inpanel-1.2.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,459 @@
1
+ <div navbar ng-init="currentItem='utils.ecs'"></div>
2
+ <div ng-show="!loaded">
3
+ <div loading></div>
4
+ </div>
5
+
6
+ <div id="main" ng-show="loaded" style="display:none">
7
+ <div class="module-header">
8
+ <h3>管理 {{instance_name}}</h3>
9
+ </div>
10
+
11
+ <div class="tabbable" ng-init="load()">
12
+ <ul class="nav nav-tabs">
13
+ <li ng-class="'active' | iftrue:activeTabName=='base'"><a href="#base" ng-click="sec('base')" data-toggle="tab">基本信息</a></li>
14
+ <li ng-class="'active' | iftrue:activeTabName=='operation'"><a href="#operation" ng-click="sec('operation')" data-toggle="tab">基本操作</a></li>
15
+ <li ng-class="'active' | iftrue:activeTabName=='disks'"><a href="#disks" ng-click="sec('disks')" data-toggle="tab">磁盘管理</a></li>
16
+ <li ng-class="'active' | iftrue:activeTabName=='reset'"><a href="#reset" ng-click="sec('reset')" data-toggle="tab">重置系统</a></li>
17
+ <li ng-class="'active' | iftrue:activeTabName=='inpanel'"><a href="#inpanel ng-click="sec('inpanel')" data-toggle="tab">控制面板</a></li>
18
+ </ul>
19
+ <div class="tab-content">
20
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='base'" id="base">
21
+ <table class="table table-button table-condensed" style="width:500px;">
22
+ <thead>
23
+ <tr>
24
+ <th colspan="2">基本信息</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <tr>
29
+ <td style="width:120px;">服务器编号:</td>
30
+ <td>{{instance.InstanceName}}</td>
31
+ </tr>
32
+ <tr>
33
+ <td>云服务器状态:</td>
34
+ <td ng-bind-html-unsafe="instance.Status | instance.status"></td>
35
+ </tr>
36
+ <tr>
37
+ <td>系统主机名称:</td>
38
+ <td>{{instance.HostName}}</td>
39
+ </tr>
40
+ <tr>
41
+ <td>云服务器 IP:</td>
42
+ <td>
43
+ 公网:{{instance.PublicIpAddress.AllocateIpAddress}}<br>
44
+ 内网:{{instance.InnerIpAddress}}
45
+ </td>
46
+ </tr>
47
+ <tr>
48
+ <td>云服务器配置:</td>
49
+ <td>
50
+ CPU:{{instance.CPUs}}核<br>
51
+ 内存:{{instance.Memory*1024*1024|bytes2human}}<br>
52
+ 带宽:{{instance.MaxBandwidthOut/1000/1024}}Mbps<br>
53
+ 容量:{{instance.DiskSize}}GB
54
+ </td>
55
+ </tr>
56
+ <tr>
57
+ <td>系统安装镜像:</td>
58
+ <td>{{instance.Image.ImageCode}}</td>
59
+ </tr>
60
+ <tr>
61
+ <td>所在数据中心:</td>
62
+ <td>
63
+ {{instance.RegionCode|instance.datacenter}}
64
+ </td>
65
+ </tr>
66
+ <tr>
67
+ <td>所在数据区域:</td>
68
+ <td>
69
+ {{instance.ZoneCode|instance.datacenter}}
70
+ </td>
71
+ </tr>
72
+ </tbody>
73
+ </table>
74
+ </div>
75
+
76
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='operation'" id="operation">
77
+ <table class="table table-button table-condensed" style="width:500px;">
78
+ <thead>
79
+ <tr>
80
+ <th colspan="2">基本操作</th>
81
+ </tr>
82
+ </thead>
83
+ <tbody>
84
+ <tr>
85
+ <td style="width:80px;">当前状态:</td>
86
+ <td ng-bind-html-unsafe="instance.Status | instance.status"></td>
87
+ </tr>
88
+ <tr>
89
+ <td>管理操作:</td>
90
+ <td>
91
+ <button ng-click="start()" class="btn btn-small" ng-disabled="processing||!(instance.Status=='Stopped'||instance.Status=='Pending'||instance.Status=='StartFailure')"><i
92
+ class="icon-play"></i> 启动</button>
93
+ <button ng-click="stop()" class="btn btn-small" ng-disabled="processing||!(instance.Status=='Running'||instance.Status=='StopFailure')"><i
94
+ class="icon-stop"></i> 关闭</button>
95
+ <button ng-click="reboot()" class="btn btn-small" ng-disabled="processing||!(instance.Status=='Running'||instance.Status=='StopFailure')"><i
96
+ class="icon-refresh"></i> 重启</button>
97
+ </td>
98
+ </tr>
99
+ </tbody>
100
+ </table>
101
+ </div>
102
+
103
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='disks'" id="disks">
104
+ <div class="widget widget-table" style="width:500px">
105
+ <div class="widget-header">
106
+ <i class="icon-hdd"></i>
107
+ <h3>磁盘管理</h3>
108
+ </div>
109
+ <div class="widget-content">
110
+ <div style="padding:20px;display:none" ng-show="diskloading">
111
+ <div waiting ng-init="waitingText='正在加载磁盘列表,请稍候...'"></div>
112
+ </div>
113
+ <table style="display:none;font-size:12px" class="table table-striped table-hover table-bordered table-condensed"
114
+ ng-show="!diskloading">
115
+ <thead>
116
+ <tr>
117
+ <th style="width:20px" class="td-right">#</th>
118
+ <th>磁盘编号</th>
119
+ <th>磁盘类型</th>
120
+ <th>磁盘大小</th>
121
+ <th style="width:100px">操作</th>
122
+ </tr>
123
+ </thead>
124
+ <tbody>
125
+ <tr ng-show="disks.length==0">
126
+ <td colspan="5" style="font-size:14px">
127
+ 未检测到磁盘。
128
+ </td>
129
+ </tr>
130
+ <tr ng-repeat="disk in disks">
131
+ <td class="td-right">{{$index+1}}</td>
132
+ <td>{{disk.DiskCode}}</td>
133
+ <td>{{disk.Type|disk.type}}</td>
134
+ <td>{{disk.Size}}G</td>
135
+ <td>
136
+ <button class="btn btn-small" ng-click="loadsnapshots(disk)">
137
+ <i class="icon-camera"></i> 快照管理
138
+ </button>
139
+ </td>
140
+ </tr>
141
+ </tbody>
142
+ </table>
143
+ </div>
144
+ </div>
145
+ <div class="widget widget-table" style="width:500px" ng-show="curdisk">
146
+ <div class="widget-header">
147
+ <i class="icon-camera"></i>
148
+ <h3>磁盘 {{curdisk.DiskCode}} 的快照列表</h3>
149
+ <div class="pull-right" style="margin-right:10px;margin-top:8px;margin-bottom:-10px">
150
+ <div class="input-append">
151
+ <button class="btn btn-small" ng-disabled="processing" ng-click="createsnapshot()"><i
152
+ class="icon-plus"></i> 创建快照</button>
153
+ <button class="btn btn-small" ng-disabled="processing" ng-click="loadsnapshots()"><i
154
+ class="icon-refresh"></i></button>
155
+ </div>
156
+ </div>
157
+ </div>
158
+ <div class="widget-content">
159
+ <div style="padding:20px;display:none" ng-show="snaploading">
160
+ <div waiting ng-init="waitingText='正在加载磁盘快照列表,请稍候...'"></div>
161
+ </div>
162
+ <table style="display:none;font-size:12px" class="table table-striped table-hover table-bordered table-condensed"
163
+ ng-show="!snaploading">
164
+ <thead>
165
+ <tr>
166
+ <th style="width:20px" class="td-right">#</th>
167
+ <th>创建时间</th>
168
+ <th>快照进度</th>
169
+ <th style="width:125px">操作</th>
170
+ </tr>
171
+ </thead>
172
+ <tbody>
173
+ <tr ng-show="snapshots.length==0">
174
+ <td colspan="4" style="font-size:14px">
175
+ 未检测到磁盘快照。
176
+ </td>
177
+ </tr>
178
+ <tr ng-repeat="snapshot in snapshots">
179
+ <td class="td-right">{{$index+1}}</td>
180
+ <td>{{snapshot.CreateTime|snapshot.time}}</td>
181
+ <td>{{snapshot.Progress}}</td>
182
+ <td>
183
+ <button ng-click="rollbacksnapshot(snapshot)" ng-disabled="processing" class="btn btn-small"
184
+ ng-show="snapshot.Progress=='100%'"><i class="icon-tint"></i> 回滚</button>
185
+ <button ng-click="deletesnapshot(snapshot)" ng-disabled="processing" class="btn btn-small"
186
+ ng-show="snapshot.Progress=='100%'"><i class="icon-remove"></i> 删除</button>
187
+ <button ng-click="cancelsnapshot(snapshot)" ng-disabled="processing" class="btn btn-small"
188
+ ng-show="snapshot.Progress!='100%'"><i class="icon-remove"></i> 取消</button>
189
+ </td>
190
+ </tr>
191
+ </tbody>
192
+ </table>
193
+ </div>
194
+ </div>
195
+ </div>
196
+
197
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='reset'" id="reset">
198
+ <table class="table table-button table-condensed" style="width:500px;">
199
+ <thead>
200
+ <tr>
201
+ <th colspan="2">重置系统</th>
202
+ </tr>
203
+ </thead>
204
+ <tbody>
205
+ <tr>
206
+ <td colspan="2" class="alert alert-error">重置系统将导致数据丢失,请谨慎操作!</td>
207
+ </tr>
208
+ <tr ng-show="instance.Status!='Stopped'&&instance.Status!='ResetFailure'">
209
+ <td colspan="2">服务器还未停止,不能重置系统,请先关闭服务器。</td>
210
+ </tr>
211
+ <tr>
212
+ <td style="width:120px;">当前服务器状态:</td>
213
+ <td ng-bind-html-unsafe="instance.Status | instance.status"></td>
214
+ </tr>
215
+ <tr ng-show="instance.Status=='Stopped'||instance.Status=='ResetFailure'">
216
+ <td colspan="2">
217
+ <div style="display:none" ng-show="imageloading">
218
+ <div waiting ng-init="waitingText='正在加载系统镜像列表,请稍候...'"></div>
219
+ </div>
220
+ <table class="table table-condensed" ng-show="!imageloading">
221
+ <thead>
222
+ <tr>
223
+ <th style="width:30px">#</th>
224
+ <th>系统镜像描述</th>
225
+ <th class="td-right" style="width:120px;">
226
+ <div class="btn-group">
227
+ <button class="btn btn-small" ng-disabled="image_page_number<=1"
228
+ ng-click="loadimages(-1, true)">上一页</button>
229
+ <button class="btn btn-small" ng-disabled="image_page_number>=image_total_number/image_page_size"
230
+ ng-click="loadimages(1, true)">下一页</button>
231
+ </div>
232
+ </th>
233
+ </tr>
234
+ </thead>
235
+ <tbody>
236
+ <tr ng-repeat="image in images">
237
+ <td>{{image_page_size*(image_page_number-1)+$index+1}}</td>
238
+ <td style="font-size:12px" colspan="2">
239
+ 代号:{{ image.ImageCode }}<br>
240
+ <button style="margin-top:15px" ng-click="reset(image)" ng-disabled="instance.Status!='Stopped'&&instance.Status!='ResetFailure'"
241
+ class="btn btn-small pull-right">
242
+ <i class="icon-hdd"></i> 重置为此系统
243
+ </button>
244
+ 平台:{{ image.Platform }}<br>
245
+ 大小:{{ image.Size }}G<br>
246
+ <span ng-show="image.Description">描述:{{ image.Description }}</span>
247
+ </td>
248
+ </tr>
249
+ <tr>
250
+ <td colspan="2">
251
+ <div class="input-prepend" style="margin-top:10px">
252
+ <span class="add-on">共{{image_total_number}}条,当前第{{image_page_number}}页</span>
253
+ <select style="width:100px" ng-model="image_page_size" ng-change="image_page_number=1;loadimages(0, true)">
254
+ <option value="5">5条/页</option>
255
+ <option value="10">10条/页</option>
256
+ <option value="20">20条/页</option>
257
+ <option value="30">30条/页</option>
258
+ <option value="40">40条/页</option>
259
+ <option value="50">50条/页</option>
260
+ </select>
261
+ </div>
262
+ </td>
263
+ <td class="td-right">
264
+ <div class="btn-group" style="margin-top:10px">
265
+ <button class="btn btn-small" ng-disabled="image_page_number<=1"
266
+ ng-click="loadimages(-1, true)">上一页</button>
267
+ <button class="btn btn-small" ng-disabled="image_page_number>=image_total_number/image_page_size"
268
+ ng-click="loadimages(1, true)">下一页</button>
269
+ </div>
270
+ </td>
271
+ </tr>
272
+ </tbody>
273
+ </table>
274
+ </td>
275
+ </tr>
276
+ </tbody>
277
+ </table>
278
+ </div>
279
+
280
+ <div class="tab-pane" ng-class="'active' | iftrue:activeTabName=='inpanel'" id="inpanel ng-init="loadinpanel()">
281
+ <table class="table table-button table-condensed" style="width:500px;">
282
+ <thead>
283
+ <tr>
284
+ <th colspan="2">InPanel</th>
285
+ </tr>
286
+ </thead>
287
+ <tbody>
288
+ <tr>
289
+ <td style="width:100px;">基本操作:</td>
290
+ <td>
291
+ <button class="btn btn-small" ng-disabled="processing" ng-click="inpanel_install()"><i
292
+ class="icon-briefcase"></i> 安装或升级</button>
293
+ <button class="btn btn-small" ng-disabled="processing" ng-click="inpanel_uninstall()"
294
+ style="margin-left:5px"><i class="icon-remove"></i> 卸载 InPanel</button>
295
+ </td>
296
+ </tr>
297
+ </tbody>
298
+ </table>
299
+
300
+ <table class="table table-button table-condensed" style="width:500px;">
301
+ <thead>
302
+ <tr>
303
+ <th colspan="2">远程控制设置</th>
304
+ </tr>
305
+ </thead>
306
+ <tbody>
307
+ <tr>
308
+ <td style="width:100px;">远程控制密钥:</td>
309
+ <td>
310
+ <textarea ng-model="accessinfo.accesskey" ng-disabled="processing" placeholder="远程控制使用的密钥"
311
+ style="width:250px;height:50px"></textarea><br>
312
+ <button class="btn btn-small" ng-disabled="processing" ng-click="genaccesskey()" style="margin-left:5px">随机生成密钥</button>
313
+ <button class="btn btn-small" ng-disabled="processing" ng-click="syncaccesskey()" style="margin-left:5px">同步到云服务器</button>
314
+ </td>
315
+ </tr>
316
+ <tr>
317
+ <td>远程控制线路:</td>
318
+ <td>
319
+ <label class="radio inline">
320
+ <input type="radio" ng-model="accessinfo.accessnet" value="public"> 公网线路
321
+ </label>
322
+ <label class="radio inline">
323
+ <input type="radio" ng-model="accessinfo.accessnet" value="inner"> 内网线路
324
+ </label>
325
+ <label class="help-block" style="font-size:12px;margin-top:5px">内网线路更安全更快速,但要求ECSMate和服务器在同一个内网中。</span>
326
+ </td>
327
+ </tr>
328
+ <tr>
329
+ <td>InPanel 端口:</td>
330
+ <td>
331
+ <input type="text" ng-model="accessinfo.accessport" ng-disabled="processing"
332
+ placeholder="InPanel 监听的端口">
333
+ </td>
334
+ </tr>
335
+ <tr>
336
+ <td></td>
337
+ <td>
338
+ <button class="btn btn-primary" ng-click="saveinpanel()">保存配置</button>
339
+ </td>
340
+ </tr>
341
+ </tbody>
342
+ </table>
343
+ </div>
344
+ </div>
345
+ </div>
346
+ </div>
347
+
348
+
349
+ <div id="confirm" class="modal hide fade">
350
+ <div class="modal-header">
351
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
352
+ <h3 class="modal-title">{{confirm_title}}</h3>
353
+ </div>
354
+ <div class="modal-body">
355
+ <p>{{confirm_body}}</p>
356
+ </div>
357
+ <div class="modal-footer">
358
+ <button ng-show="confirm_forcebutton" style="float:left" class="btn btn-danger" onclick="$('#confirm').modal('hide')"
359
+ ng-click="confirm_force()">{{confirm_forcebutton}}</button>
360
+ <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button>
361
+ <button class="btn btn-primary" onclick="$('#confirm').modal('hide')" ng-click="confirm()">{{confirm_button}}</button>
362
+ </div>
363
+ </div>
364
+
365
+ <div id="resetconfirm" class="modal hide fade">
366
+ <div class="modal-header">
367
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
368
+ <h3 class="modal-title">重置系统确认</h3>
369
+ </div>
370
+ <div class="modal-body">
371
+ <h5>云服务器信息</h5>
372
+ <table class="table table-condensed table-borderless" style="width:500px;margin:10px">
373
+ <tr>
374
+ <td style="width:50px">编号:</td>
375
+ <td>{{instance_name}}</td>
376
+ </tr>
377
+ <tr>
378
+ <td>IP:</td>
379
+ <td>
380
+ <span>公网:{{instance.PublicIpAddress.AllocateIpAddress}}</span>
381
+ <span style="margin-left:20px">内网:{{instance.InnerIpAddress}}</span>
382
+ </td>
383
+ </tr>
384
+ <tr>
385
+ <td>镜像:</td>
386
+ <td>{{instance.Image.ImageCode}}</td>
387
+ </tr>
388
+ </table>
389
+
390
+ <h5 style="margin-top:20px">新系统信息</h5>
391
+ <table class="table table-condensed table-borderless" style="width:500px;margin:10px">
392
+ <tr>
393
+ <td style="width:50px">代号:</td>
394
+ <td>{{curimage.ImageCode}}</td>
395
+ </tr>
396
+ <tr>
397
+ <td>平台:</td>
398
+ <td>{{curimage.Platform}}</td>
399
+ </tr>
400
+ <tr>
401
+ <td>大小:</td>
402
+ <td>{{curimage.Size}}G</td>
403
+ </tr>
404
+ <tr ng-show="curimage.Description">
405
+ <td>描述:</td>
406
+ <td>{{curimage.Description}}</td>
407
+ </tr>
408
+ </table>
409
+ </div>
410
+ <div class="modal-footer">
411
+ <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button>
412
+ <button class="btn btn-primary" onclick="$('#resetconfirm').modal('hide')" ng-click="doreset()">确认重置系统</button>
413
+ </div>
414
+ </div>
415
+
416
+ <div id="sshconfirm" class="modal hide fade">
417
+ <div class="modal-header">
418
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
419
+ <h3 class="modal-title">{{sshconfirm_title}}</h3>
420
+ </div>
421
+ <div class="modal-body">
422
+ <h5 style="margin:20px">此操作需要服务器管理员 root 权限,请设置:</h5>
423
+ <div class="form-horizontal form-horizontal-small">
424
+ <div class="control-group">
425
+ <label class="control-label" for="accesskey">服务器IP:</label>
426
+ <div class="controls">
427
+ <select ng-model="ssh_ip">
428
+ <option ng-selected="ssh_ip==instance.PublicIpAddress.AllocateIpAddress" value="{{instance.PublicIpAddress.AllocateIpAddress}}">
429
+ 公网:{{instance.PublicIpAddress.AllocateIpAddress}}</option>
430
+ <option ng-selected="ssh_ip==instance.InnerIpAddress" value="{{instance.InnerIpAddress}}">
431
+ 内网:{{instance.InnerIpAddress}}</option>
432
+ </select>
433
+ </div>
434
+ </div>
435
+ <div class="control-group">
436
+ <label class="control-label">SSH端口:</label>
437
+ <div class="controls">
438
+ <input type="text" ng-model="ssh_port" class="input-small">
439
+ </div>
440
+ </div>
441
+ <div class="control-group">
442
+ <label class="control-label">SSH用户:</label>
443
+ <div class="controls">
444
+ <input type="text" ng-model="ssh_user">
445
+ </div>
446
+ </div>
447
+ <div class="control-group">
448
+ <label class="control-label">SSH密码:</label>
449
+ <div class="controls">
450
+ <input type="password" ng-model="ssh_password">
451
+ </div>
452
+ </div>
453
+ </div>
454
+ </div>
455
+ <div class="modal-footer">
456
+ <button class="btn" data-dismiss="modal" aria-hidden="true">取消</button>
457
+ <button class="btn btn-primary" onclick="$('#sshconfirm').modal('hide')" ng-click="sshconfirm()">{{sshconfirm_button}}</button>
458
+ </div>
459
+ </div>