]>
git.proxmox.com Git - pve-manager.git/blob - www/manager/dc/HAConfig.js
1 Ext
.define('PVE.dc.vmHAServiceEdit', {
2 extend
: 'PVE.window.Edit',
4 initComponent : function() {
7 me
.create
= me
.vmid
? false : true;
11 me
.url
= "/cluster/ha/groups/pvevm:" + me
.vmid
;
15 me
.url
= "/cluster/ha/groups";
20 title
: gettext('HA managed VM/CT'),
24 xtype
: me
.create
? 'pveVMIDSelector' : 'displayfield',
34 fieldLabel
: 'autostart'
47 Ext
.define('PVE.dc.HAConfig', {
48 extend
: 'Ext.panel.Panel',
49 alias
: 'widget.pveDcHAConfig',
51 clusterInfo
: {}, // reload store data here
56 var getClusterInfo = function(conf
) {
60 if (!(conf
&& conf
.children
&& conf
.children
[0])) {
64 var cluster
= conf
.children
[0];
66 if (cluster
.text
!== 'cluster' || !cluster
.config_version
) {
70 info
.version
= cluster
.config_version
;
72 Ext
.Array
.each(cluster
.children
, function(item
) {
73 if (item
.text
=== 'fencedevices') {
74 // fixme: make sure each node uses at least one fence device
75 info
.fenceDevices
= true;
76 } else if (item
.text
=== 'rm') {
84 PVE
.Utils
.API2Request({
85 url
: '/cluster/ha/config',
88 failure: function(response
, opts
) {
90 me
.setLoading(response
.htmlStatus
);
92 success: function(response
, opts
) {
93 me
.clusterInfo
= getClusterInfo(response
.result
.data
);
94 console
.dir(me
.clusterInfo
);
96 me
.setDisabled(!me
.clusterInfo
.version
);
98 me
.addMenu
.setDisabled(!me
.clusterInfo
.version
);
100 // note: this modifies response.result.data
101 me
.treePanel
.setRootNode(response
.result
.data
);
102 me
.treePanel
.expandAll();
105 if (response
.result
.changes
) {
106 me
.commitBtn
.setDisabled(false);
107 me
.revertBtn
.setDisabled(false);
108 me
.diffPanel
.setVisible(true);
109 me
.diffPanel
.update("<pre>" + Ext
.htmlEncode(response
.result
.changes
) + "</pre>");
111 me
.commitBtn
.setDisabled(true);
112 me
.revertBtn
.setDisabled(true);
113 me
.diffPanel
.setVisible(false);
114 me
.diffPanel
.update('');
120 initComponent: function() {
123 me
.commitBtn
= new PVE
.button
.Button({
124 text
: gettext('Commit'),
126 confirmMsg: function () {
127 return gettext('Are you sure you want to commit your changes');
129 handler: function(btn
, event
) {
130 PVE
.Utils
.API2Request({
131 url
: '/cluster/ha/changes',
134 callback: function() {
137 failure: function (response
, opts
) {
138 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
144 me
.revertBtn
= new PVE
.button
.Button({
145 text
: gettext('Revert changes'),
147 confirmMsg: function () {
148 return gettext('Are you sure you want to revert (undo) your changes');
150 handler: function(btn
, event
) {
151 PVE
.Utils
.API2Request({
152 url
: '/cluster/ha/changes',
155 callback: function() {
158 failure: function (response
, opts
) {
159 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
165 me
.addMenu
= new Ext
.button
.Button({
166 text
: gettext('Add'),
168 menu
: new Ext
.menu
.Menu({
171 text
: gettext('HA managed VM/CT'),
172 handler: function() {
173 if (!me
.clusterInfo
.fenceDevices
) {
174 Ext
.Msg
.alert(gettext('Error'), gettext("Please configure fencing first!"));
177 var win
= Ext
.create('PVE.dc.vmHAServiceEdit', {});
179 win
.on('destroy', me
.reload
, me
);
183 text
: gettext('Failover Domain'),
184 handler: function() {
185 Ext
.Msg
.alert(gettext('Error'), "not implemented - sorry");
192 me
.treePanel
= Ext
.create('Ext.tree.Panel', {
197 fields
: ['text', 'id', 'vmid', 'name' ],
208 renderer: function(value
, metaData
, record
) {
210 Ext
.Object
.each(record
.raw
, function(key
, value
) {
211 if (key
=== 'id' || key
=== 'text') {
214 text
+= Ext
.htmlEncode(key
) + '="' +
215 Ext
.htmlEncode(value
) + '" ';
224 var run_editor = function() {
225 var rec
= me
.treePanel
.selModel
.getSelection()[0];
226 if (rec
&& rec
.data
.text
=== 'pvevm') {
227 var win
= Ext
.create('PVE.dc.vmHAServiceEdit', {
231 win
.on('destroy', me
.reload
, me
);
235 me
.editBtn
= new Ext
.button
.Button({
236 text
: gettext('Edit'),
241 me
.removeBtn
= new Ext
.button
.Button({
242 text
: gettext('Remove'),
244 handler: function() {
245 var rec
= me
.treePanel
.selModel
.getSelection()[0];
246 if (rec
&& rec
.data
.text
=== 'pvevm') {
247 var groupid
= 'pvevm:' + rec
.data
.vmid
;
248 PVE
.Utils
.API2Request({
249 url
: '/cluster/ha/groups/' + groupid
,
252 callback: function() {
255 failure: function (response
, opts
) {
256 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
264 me
.diffPanel
= Ext
.create('Ext.panel.Panel', {
270 tbar
: [ gettext('Pending changes') ],
278 tbar
: [ me
.addMenu
, me
.removeBtn
, me
.editBtn
, me
.revertBtn
, me
.commitBtn
],
279 items
: [ me
.treePanel
, me
.diffPanel
]
284 me
.on('show', me
.reload
);
286 me
.treePanel
.on("selectionchange", function(sm
, selected
) {
287 var rec
= selected
[0];
288 if (rec
&& rec
.data
.text
=== 'pvevm') {
289 me
.editBtn
.setDisabled(false);
290 me
.removeBtn
.setDisabled(false);
292 me
.editBtn
.setDisabled(true);
293 me
.removeBtn
.setDisabled(true);
298 me
.treePanel
.on("itemdblclick", function(v
, record
) {