Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
789b4067be | ||
|
a6ff957eec | ||
|
8a8e05ea55 | ||
|
5a4c95b7f9 | ||
|
cc9b37b811 | ||
|
c637df65ab | ||
|
2d8d4d8acf | ||
|
06c8407f14 | ||
|
71379590cd | ||
|
95316d130b | ||
|
6befdf6834 | ||
|
a83717b705 | ||
|
b0e8265c66 | ||
|
c2e5b9384e | ||
|
f92f0a357a | ||
|
2edea01c78 | ||
|
a99170e1aa | ||
|
ff57d36977 | ||
|
a898d93362 | ||
|
b6ccf28a9b | ||
|
588ea81cb8 | ||
|
81564a937b | ||
|
9005ced966 | ||
|
a946e039d5 | ||
|
a0f4e1d543 | ||
|
dd6b15f218 | ||
|
100800ee37 | ||
|
5e33f7cea8 | ||
|
d58ced8ae5 | ||
|
7f50af07b8 | ||
|
5a81114b1f | ||
|
67ccc7d9e6 | ||
|
a237623964 | ||
|
20fdfefad4 | ||
|
5cad62a636 | ||
|
f360ab33e3 | ||
|
a6a6dedeef | ||
|
1d9bdf9dc6 |
4
Makefile
4
Makefile
@ -48,12 +48,12 @@ $(DEB):
|
||||
mv dest.deb ${DEB}
|
||||
rm -rf dest
|
||||
# supress lintian error: statically-linked-binary usr/bin/pvemailforward
|
||||
lintian -X binaries ${DEB}
|
||||
lintian -X binaries ${DEB}
|
||||
|
||||
.PHONY: upload
|
||||
upload: ${DEB} check
|
||||
./repoid.pl .git check
|
||||
tar cf - ${DEB} | ssh repoman@repo.proxmox.com upload
|
||||
tar cf - ${DEB} | ssh repoman@repo.proxmox.com upload -product pve -dist jessie
|
||||
|
||||
#.PHONY: poupload
|
||||
#poupload:
|
||||
|
195
PVE/API2/Ceph.pm
195
PVE/API2/Ceph.pm
@ -809,11 +809,63 @@ my $find_node_ip = sub {
|
||||
die "unable to find local address within network '$cidr'\n";
|
||||
};
|
||||
|
||||
my $create_mgr = sub {
|
||||
my ($rados, $id) = @_;
|
||||
|
||||
my $clustername = PVE::CephTools::get_config('ccname');
|
||||
my $mgrdir = "/var/lib/ceph/mgr/$clustername-$id";
|
||||
my $mgrkeyring = "$mgrdir/keyring";
|
||||
my $mgrname = "mgr.$id";
|
||||
|
||||
die "ceph manager directory '$mgrdir' already exists\n"
|
||||
if -d $mgrdir;
|
||||
|
||||
print "creating manager directory '$mgrdir'\n";
|
||||
mkdir $mgrdir;
|
||||
print "creating keys for '$mgrname'\n";
|
||||
my $output = $rados->mon_command({ prefix => 'auth get-or-create',
|
||||
entity => $mgrname,
|
||||
caps => [
|
||||
mon => 'allow profile mgr',
|
||||
osd => 'allow *',
|
||||
mds => 'allow *',
|
||||
],
|
||||
format => 'plain'});
|
||||
PVE::Tools::file_set_contents($mgrkeyring, $output);
|
||||
|
||||
print "setting owner for directory\n";
|
||||
run_command(["chown", 'ceph:ceph', '-R', $mgrdir]);
|
||||
|
||||
print "enabling service 'ceph-mgr\@$id.service'\n";
|
||||
PVE::CephTools::ceph_service_cmd('enable', $mgrname);
|
||||
print "starting service 'ceph-mgr\@$id.service'\n";
|
||||
PVE::CephTools::ceph_service_cmd('start', $mgrname);
|
||||
};
|
||||
|
||||
my $destroy_mgr = sub {
|
||||
my ($mgrid) = @_;
|
||||
|
||||
my $clustername = PVE::CephTools::get_config('ccname');
|
||||
my $mgrname = "mgr.$mgrid";
|
||||
my $mgrdir = "/var/lib/ceph/mgr/$clustername-$mgrid";
|
||||
|
||||
die "ceph manager directory '$mgrdir' not found\n"
|
||||
if ! -d $mgrdir;
|
||||
|
||||
print "disabling service 'ceph-mgr\@$mgrid.service'\n";
|
||||
PVE::CephTools::ceph_service_cmd('disable', $mgrname);
|
||||
print "stopping service 'ceph-mgr\@$mgrid.service'\n";
|
||||
PVE::CephTools::ceph_service_cmd('stop', $mgrname);
|
||||
|
||||
print "removing manager directory '$mgrdir'\n";
|
||||
File::Path::remove_tree($mgrdir);
|
||||
};
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'createmon',
|
||||
path => 'mon',
|
||||
method => 'POST',
|
||||
description => "Create Ceph Monitor",
|
||||
description => "Create Ceph Monitor and Manager",
|
||||
proxyto => 'node',
|
||||
protected => 1,
|
||||
permissions => {
|
||||
@ -823,6 +875,18 @@ __PACKAGE__->register_method ({
|
||||
additionalProperties => 0,
|
||||
properties => {
|
||||
node => get_standard_option('pve-node'),
|
||||
id => {
|
||||
type => 'string',
|
||||
optional => 1,
|
||||
pattern => '[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?',
|
||||
description => "The ID for the monitor, when omitted the same as the nodename",
|
||||
},
|
||||
'exclude-manager' => {
|
||||
type => 'boolean',
|
||||
optional => 1,
|
||||
default => 0,
|
||||
description => "When set, only a monitor will be created.",
|
||||
},
|
||||
},
|
||||
},
|
||||
returns => { type => 'string' },
|
||||
@ -856,14 +920,7 @@ __PACKAGE__->register_method ({
|
||||
}
|
||||
}
|
||||
|
||||
my $monid;
|
||||
for (my $i = 0; $i < 7; $i++) {
|
||||
if (!$cfg->{"mon.$i"}) {
|
||||
$monid = $i;
|
||||
last;
|
||||
}
|
||||
}
|
||||
die "unable to find usable monitor id\n" if !defined($monid);
|
||||
my $monid = $param->{id} // $param->{node};
|
||||
|
||||
my $monsection = "mon.$monid";
|
||||
my $ip;
|
||||
@ -909,7 +966,7 @@ __PACKAGE__->register_method ({
|
||||
-d $mondir && die "monitor filesystem '$mondir' already exist\n";
|
||||
|
||||
my $monmap = "/tmp/monmap";
|
||||
|
||||
|
||||
eval {
|
||||
mkdir $mondir;
|
||||
|
||||
@ -947,6 +1004,12 @@ __PACKAGE__->register_method ({
|
||||
eval { PVE::Tools::run_command(['/bin/systemctl', 'enable', "ceph-mon\@${monid}.service"]); };
|
||||
warn "Enable ceph-mon\@${monid}.service manually"if $@;
|
||||
}
|
||||
|
||||
# create manager
|
||||
if (!$param->{'exclude-manager'} && PVE::CephTools::check_ceph_mgr_installed(1)) {
|
||||
my $rados = PVE::RADOS->new(timeout => PVE::CephTools::get_config('long_rados_timeout'));
|
||||
$create_mgr->($rados, $monid);
|
||||
}
|
||||
};
|
||||
|
||||
return $rpcenv->fork_worker('cephcreatemon', $monsection, $authuser, $worker);
|
||||
@ -956,7 +1019,7 @@ __PACKAGE__->register_method ({
|
||||
name => 'destroymon',
|
||||
path => 'mon/{monid}',
|
||||
method => 'DELETE',
|
||||
description => "Destroy Ceph monitor.",
|
||||
description => "Destroy Ceph Monitor and Manager.",
|
||||
proxyto => 'node',
|
||||
protected => 1,
|
||||
permissions => {
|
||||
@ -968,8 +1031,15 @@ __PACKAGE__->register_method ({
|
||||
node => get_standard_option('pve-node'),
|
||||
monid => {
|
||||
description => 'Monitor ID',
|
||||
type => 'integer',
|
||||
type => 'string',
|
||||
pattern => '[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?',
|
||||
},
|
||||
'exclude-manager' => {
|
||||
type => 'boolean',
|
||||
default => 0,
|
||||
optional => 1,
|
||||
description => "When set, removes only the monitor, not the manager"
|
||||
}
|
||||
},
|
||||
},
|
||||
returns => { type => 'string' },
|
||||
@ -1015,11 +1085,108 @@ __PACKAGE__->register_method ({
|
||||
delete $cfg->{$monsection};
|
||||
PVE::CephTools::write_ceph_config($cfg);
|
||||
File::Path::remove_tree($mondir);
|
||||
|
||||
# remove manager
|
||||
if (!$param->{'exclude-manager'} && PVE::CephTools::check_ceph_mgr_installed(1)) {
|
||||
eval { $destroy_mgr->($monid); };
|
||||
warn $@ if $@;
|
||||
}
|
||||
};
|
||||
|
||||
return $rpcenv->fork_worker('cephdestroymon', $monsection, $authuser, $worker);
|
||||
}});
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'createmgr',
|
||||
path => 'mgr',
|
||||
method => 'POST',
|
||||
description => "Create Ceph Manager",
|
||||
proxyto => 'node',
|
||||
protected => 1,
|
||||
permissions => {
|
||||
check => ['perm', '/', [ 'Sys.Modify' ]],
|
||||
},
|
||||
parameters => {
|
||||
additionalProperties => 0,
|
||||
properties => {
|
||||
node => get_standard_option('pve-node'),
|
||||
id => {
|
||||
type => 'string',
|
||||
optional => 1,
|
||||
pattern => '[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?',
|
||||
description => "The ID for the manager, when omitted the same as the nodename",
|
||||
},
|
||||
},
|
||||
},
|
||||
returns => { type => 'string' },
|
||||
code => sub {
|
||||
my ($param) = @_;
|
||||
|
||||
PVE::CephTools::check_ceph_mgr_installed();
|
||||
|
||||
PVE::CephTools::check_ceph_inited();
|
||||
|
||||
my $rpcenv = PVE::RPCEnvironment::get();
|
||||
|
||||
my $authuser = $rpcenv->get_user();
|
||||
|
||||
my $mgrid = $param->{id} // $param->{node};
|
||||
|
||||
my $worker = sub {
|
||||
my $upid = shift;
|
||||
|
||||
my $rados = PVE::RADOS->new(timeout => PVE::CephTools::get_config('long_rados_timeout'));
|
||||
|
||||
$create_mgr->($rados, $mgrid);
|
||||
};
|
||||
|
||||
return $rpcenv->fork_worker('cephcreatemgr', "mgr.$mgrid", $authuser, $worker);
|
||||
}});
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'destroymgr',
|
||||
path => 'mgr/{id}',
|
||||
method => 'DELETE',
|
||||
description => "Destroy Ceph Manager.",
|
||||
proxyto => 'node',
|
||||
protected => 1,
|
||||
permissions => {
|
||||
check => ['perm', '/', [ 'Sys.Modify' ]],
|
||||
},
|
||||
parameters => {
|
||||
additionalProperties => 0,
|
||||
properties => {
|
||||
node => get_standard_option('pve-node'),
|
||||
id => {
|
||||
description => 'The ID of the manager',
|
||||
type => 'string',
|
||||
pattern => '[a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?',
|
||||
},
|
||||
},
|
||||
},
|
||||
returns => { type => 'string' },
|
||||
code => sub {
|
||||
my ($param) = @_;
|
||||
|
||||
my $rpcenv = PVE::RPCEnvironment::get();
|
||||
|
||||
my $authuser = $rpcenv->get_user();
|
||||
|
||||
PVE::CephTools::check_ceph_mgr_installed();
|
||||
|
||||
PVE::CephTools::check_ceph_inited();
|
||||
|
||||
my $mgrid = $param->{id};
|
||||
|
||||
my $worker = sub {
|
||||
my $upid = shift;
|
||||
|
||||
$destroy_mgr->($mgrid);
|
||||
};
|
||||
|
||||
return $rpcenv->fork_worker('cephdestroymgr', "mgr.$mgrid", $authuser, $worker);
|
||||
}});
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'stop',
|
||||
path => 'stop',
|
||||
@ -1038,7 +1205,7 @@ __PACKAGE__->register_method ({
|
||||
description => 'Ceph service name.',
|
||||
type => 'string',
|
||||
optional => 1,
|
||||
pattern => '(mon|mds|osd)\.[A-Za-z0-9]{1,32}',
|
||||
pattern => '(mon|mds|osd|mgr)\.[A-Za-z0-9\-]{1,32}',
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -1088,7 +1255,7 @@ __PACKAGE__->register_method ({
|
||||
description => 'Ceph service name.',
|
||||
type => 'string',
|
||||
optional => 1,
|
||||
pattern => '(mon|mds|osd)\.[A-Za-z0-9]{1,32}',
|
||||
pattern => '(mon|mds|osd|mgr)\.[A-Za-z0-9\-]{1,32}',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -662,7 +662,7 @@ __PACKAGE__->register_method ({
|
||||
# NOTE: vncterm VNC traffic is already TLS encrypted,
|
||||
# so we select the fastest chipher here (or 'none'?)
|
||||
my $remcmd = $remip ?
|
||||
['/usr/bin/ssh', '-t', $remip] : [];
|
||||
['/usr/bin/ssh', '-e', 'none', '-t', $remip] : [];
|
||||
|
||||
my $shcmd;
|
||||
|
||||
@ -1248,8 +1248,9 @@ my $get_filtered_vmlist = sub {
|
||||
return if !$templates && $class->is_template($conf);
|
||||
return if !$ha_managed && PVE::HA::Config::vm_is_ha_managed($vmid);
|
||||
|
||||
$res->{$vmid} = $conf;
|
||||
$res->{$vmid}->{conf} = $conf;
|
||||
$res->{$vmid}->{type} = $d->{type};
|
||||
$res->{$vmid}->{class} = $class;
|
||||
};
|
||||
warn $@ if $@;
|
||||
}
|
||||
@ -1265,7 +1266,7 @@ my $get_start_stop_list = sub {
|
||||
|
||||
my $resList = {};
|
||||
foreach my $vmid (keys %$vmlist) {
|
||||
my $conf = $vmlist->{$vmid};
|
||||
my $conf = $vmlist->{$vmid}->{conf};
|
||||
|
||||
next if $autostart && !$conf->{onboot};
|
||||
|
||||
@ -1277,12 +1278,32 @@ my $get_start_stop_list = sub {
|
||||
$startup->{order} = LONG_MAX if !defined($startup->{order});
|
||||
|
||||
$resList->{$startup->{order}}->{$vmid} = $startup;
|
||||
$resList->{$startup->{order}}->{$vmid}->{type} = $conf->{type};
|
||||
$resList->{$startup->{order}}->{$vmid}->{type} = $vmlist->{$vmid}->{type};
|
||||
}
|
||||
|
||||
return $resList;
|
||||
};
|
||||
|
||||
my $remove_locks_on_startup = sub {
|
||||
my ($nodename) = @_;
|
||||
|
||||
my $vmlist = &$get_filtered_vmlist($nodename, undef, undef, 1);
|
||||
|
||||
foreach my $vmid (keys %$vmlist) {
|
||||
my $conf = $vmlist->{$vmid}->{conf};
|
||||
my $class = $vmlist->{$vmid}->{class};
|
||||
|
||||
eval {
|
||||
if ($class->has_lock($conf, 'backup')) {
|
||||
$class->remove_lock($vmid, 'backup');
|
||||
my $msg = "removed left over backup lock from '$vmid'!";
|
||||
warn "$msg\n"; # prints to task log
|
||||
syslog('warning', $msg);
|
||||
}
|
||||
}; warn $@ if $@;
|
||||
}
|
||||
};
|
||||
|
||||
__PACKAGE__->register_method ({
|
||||
name => 'startall',
|
||||
path => 'startall',
|
||||
@ -1334,6 +1355,11 @@ __PACKAGE__->register_method ({
|
||||
} while (!PVE::Cluster::check_cfs_quorum(1));
|
||||
print "got quorum\n";
|
||||
}
|
||||
|
||||
eval { # remove backup locks, but avoid running into a scheduled backup job
|
||||
PVE::Tools::lock_file('/var/run/vzdump.lock', 10, $remove_locks_on_startup, $nodename);
|
||||
}; warn $@ if $@;
|
||||
|
||||
my $autostart = $force ? undef : 1;
|
||||
my $startList = &$get_start_stop_list($nodename, $autostart, $param->{vms});
|
||||
|
||||
|
@ -165,6 +165,8 @@ our $cmddef = {
|
||||
destroyosd => [ 'PVE::API2::CephOSD', 'destroyosd', ['osdid'], { node => $nodename }, $upid_exit],
|
||||
createmon => [ 'PVE::API2::Ceph', 'createmon', [], { node => $nodename }, $upid_exit],
|
||||
destroymon => [ 'PVE::API2::Ceph', 'destroymon', ['monid'], { node => $nodename }, $upid_exit],
|
||||
createmgr => [ 'PVE::API2::Ceph', 'createmgr', [], { node => $nodename }, $upid_exit],
|
||||
destroymgr => [ 'PVE::API2::Ceph', 'destroymgr', ['id'], { node => $nodename }, $upid_exit],
|
||||
start => [ 'PVE::API2::Ceph', 'start', ['service'], { node => $nodename }, $upid_exit],
|
||||
stop => [ 'PVE::API2::Ceph', 'stop', ['service'], { node => $nodename }, $upid_exit],
|
||||
install => [ __PACKAGE__, 'install', [] ],
|
||||
|
@ -21,6 +21,7 @@ my $ceph_bootstrap_osd_keyring = "/var/lib/ceph/bootstrap-osd/$ccname.keyring";
|
||||
my $ceph_bootstrap_mds_keyring = "/var/lib/ceph/bootstrap-mds/$ccname.keyring";
|
||||
|
||||
my $ceph_bin = "/usr/bin/ceph";
|
||||
my $ceph_mgr_bin = "/usr/bin/ceph-mgr";
|
||||
|
||||
my $config_hash = {
|
||||
ccname => $ccname,
|
||||
@ -70,6 +71,17 @@ sub check_ceph_installed {
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub check_ceph_mgr_installed {
|
||||
my ($noerr) = @_;
|
||||
|
||||
if (! -x $ceph_mgr_bin) {
|
||||
die "ceph-mgr binaries not installed\n" if !$noerr;
|
||||
return undef;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub check_ceph_inited {
|
||||
my ($noerr) = @_;
|
||||
|
||||
@ -178,7 +190,7 @@ sub ceph_service_cmd {
|
||||
|
||||
if (systemd_managed()) {
|
||||
|
||||
if ($service && $service =~ m/^(mon|osd|mds|radosgw)(\.([A-Za-z0-9]{1,32}))?$/) {
|
||||
if ($service && $service =~ m/^(mon|osd|mds|mgr|radosgw)(\.([A-Za-z0-9\-]{1,32}))?$/) {
|
||||
$service = defined($3) ? "ceph-$1\@$3" : "ceph-$1.target";
|
||||
} else {
|
||||
$service = "ceph.target";
|
||||
|
@ -14,7 +14,7 @@ PERLSOURCE = \
|
||||
|
||||
all: pvecfg.pm ${SUBDIRS}
|
||||
|
||||
REPOID=`../repoid.pl ../.git`
|
||||
REPOID=$(shell git rev-parse --short=8 HEAD)
|
||||
|
||||
pvecfg.pm: pvecfg.pm.in
|
||||
sed -e s/@VERSION@/${VERSION}/ -e s/@PACKAGERELEASE@/${PACKAGERELEASE}/ -e s/@PACKAGE@/${PACKAGE}/ -e s/@REPOID@/${REPOID}/ $< >$@.tmp
|
||||
|
@ -99,19 +99,33 @@ Description: Debian 7.0 (standard)
|
||||
A small Debian Wheezy system including all standard packages.
|
||||
|
||||
Package: debian-8.0-standard
|
||||
Version: 8.6-1
|
||||
Version: 8.7-1
|
||||
Type: lxc
|
||||
OS: debian-8.0
|
||||
Section: system
|
||||
Maintainer: Proxmox Support Team <support@proxmox.com>
|
||||
Architecture: amd64
|
||||
Location: system/debian-8.0-standard_8.6-1_amd64.tar.gz
|
||||
md5sum: 82f97a385da6e41dedb9ac717bf26c0e
|
||||
sha512sum: 12f29ee7e5b89b9d094f83e1c89823ee04a6252fd6d6ec68b5c8459fd97add64db11aae5c8b114cabd4b4b1cc5dc84a7531e21a2dd63b1e13609766c04b3014f
|
||||
Location: system/debian-8.0-standard_8.7-1_amd64.tar.gz
|
||||
md5sum: 3f607c37a83143e307fbb5a6805737e1
|
||||
sha512sum: 0c9a25df06b21bace7818c7b057545371e595e70099c0b9e68d248d82179e0ba5dbbffd468f878323102daaf6d239d8c9fb7b067401df0697179d3d5e234842a
|
||||
Infopage: http://pve.proxmox.com/wiki/Debian_8.0_Standard
|
||||
Description: Debian 8.0 (standard)
|
||||
A small Debian Jessie system including all standard packages.
|
||||
|
||||
Package: debian-9.0-standard
|
||||
Version: 9.0-2
|
||||
Type: lxc
|
||||
OS: debian-9.0
|
||||
Section: system
|
||||
Maintainer: Proxmox Support Team <support@proxmox.com>
|
||||
Architecture: amd64
|
||||
Location: system/debian-9.0-standard_9.0-2_amd64.tar.gz
|
||||
md5sum: c206a6b5984238a242091c85632c69f0
|
||||
sha512sum: 342e12495214ef315d2c4ac3c6f27396d3b23354330ccca4b0ce3b19e6e75df9729c9dfb878393f0ba113b4cbf37348ec99a435e873447a0fb0bbbc74aab5596
|
||||
Infopage: http://pve.proxmox.com/wiki/Debian_9.0_Standard
|
||||
Description: Debian 9.0 (standard)
|
||||
A small Debian Stretch system including all standard packages.
|
||||
|
||||
Package: fedora-24-default
|
||||
Version: 20161207
|
||||
Type: lxc
|
||||
@ -125,6 +139,19 @@ sha512sum: 2a59fa86eeddb7df36e94eae5bbc21ce22f6ab37cc248a963de8de6e4443184522af9
|
||||
Infopage: https://linuxcontainers.org
|
||||
Description: LXC default image for fedora 24 (20161207)
|
||||
|
||||
Package: fedora-25-default
|
||||
Version: 20170316
|
||||
Type: lxc
|
||||
OS: fedora
|
||||
Section: system
|
||||
Maintainer: Proxmox Support Team <support@proxmox.com>
|
||||
Architecture: amd64
|
||||
Location: system/fedora-25-default_20170316_amd64.tar.xz
|
||||
md5sum: 1231e5d4269929e497b98bc8dd08f488
|
||||
sha512sum: 8213dff0815da9ba6ccdeec08843fa6480e659268e1c6ed7ccd794d20eaafa117f3356c4328d8cab18bb72d9032991e3bdf4d0f8b1de24674f87ab7afd5902d0
|
||||
Infopage: https://linuxcontainers.org
|
||||
Description: LXC default image for fedora 25 (20170316)
|
||||
|
||||
Package: gentoo-current-default
|
||||
Version: 20161206
|
||||
Type: lxc
|
||||
@ -138,6 +165,19 @@ sha512sum: eac7ba04c071f97050d79344e4703ea6adf12b5e7db5e2af1df19e7a9b89c83cf88cb
|
||||
Infopage: https://linuxcontainers.org
|
||||
Description: LXC default image for gentoo current (20161206)
|
||||
|
||||
Package: opensuse-42.2-default
|
||||
Version: 20170406
|
||||
Type: lxc
|
||||
OS: opensuse
|
||||
Section: system
|
||||
Maintainer: Proxmox Support Team <support@proxmox.com>
|
||||
Architecture: amd64
|
||||
Location: system/opensuse-42.2-default_20170406_amd64.tar.xz
|
||||
md5sum: bd4188e3b4ca43890b93e35f0a63d420
|
||||
sha512sum: 59cf116d5bd825c23df6e22211febc0a20dd8b52515e481a5f4c2ccc8a0f60a868faea3047d4e1c8c8fc6a52ef1ddca0ef7e22be8ead8562813b2a6e3deee6f1
|
||||
Infopage: https://linuxcontainers.org
|
||||
Description: LXC default image for opensuse 42.2 (20170406)
|
||||
|
||||
Package: ubuntu-12.04-standard
|
||||
Version: 12.04-1
|
||||
Type: lxc
|
||||
@ -194,3 +234,17 @@ Infopage: http://pve.proxmox.com/wiki/Ubuntu_Yakkety_Standard
|
||||
Description: Ubuntu Yakkety (standard)
|
||||
A small Ubuntu Yakkety system including all standard packages.
|
||||
|
||||
Package: ubuntu-17.04-standard
|
||||
Version: 17.04-1
|
||||
Type: lxc
|
||||
OS: ubuntu-17.04
|
||||
Section: system
|
||||
Maintainer: Proxmox Support Team <support@proxmox.com>
|
||||
Architecture: amd64
|
||||
Location: system/ubuntu-17.04-standard_17.04-1_amd64.tar.gz
|
||||
md5sum: 87b34496ef90c2d87c0c97e190871b3c
|
||||
sha512sum: 30b4018447e1d07d950ccab17c9b54c2f4b01faa748d1725c17b34198dd6bb2b982acf9e09fb94ca8e891824e8e2c2ec7040e21a41f72fcee4fa7811f81e0341
|
||||
Infopage: http://pve.proxmox.com/wiki/Ubuntu_Zesty_Standard
|
||||
Description: Ubuntu Zesty (standard)
|
||||
A small Ubuntu Zesty system including all standard packages.
|
||||
|
||||
|
@ -10,6 +10,7 @@ use File::Basename;
|
||||
use Getopt::Long;
|
||||
use HTTP::Status qw(:constants :is status_message);
|
||||
use Text::ParseWords;
|
||||
use String::ShellQuote;
|
||||
use PVE::JSONSchema;
|
||||
use PVE::SafeSyslog;
|
||||
use PVE::Cluster;
|
||||
@ -257,8 +258,9 @@ sub check_proxyto {
|
||||
sub proxy_handler {
|
||||
my ($node, $remip, $dir, $cmd, $args) = @_;
|
||||
|
||||
my $cmdargs = [String::ShellQuote::shell_quote(@$args)];
|
||||
my $remcmd = ['ssh', '-o', 'BatchMode=yes', "root\@$remip",
|
||||
'pvesh', '--noproxy', $cmd, $dir, @$args];
|
||||
'pvesh', '--noproxy', $cmd, $dir, @$cmdargs];
|
||||
|
||||
system(@$remcmd) == 0 || die "proxy handler failed\n";
|
||||
}
|
||||
|
80
debian/changelog.Debian
vendored
80
debian/changelog.Debian
vendored
@ -1,3 +1,83 @@
|
||||
pve-manager (4.4-24) unstable; urgency=medium
|
||||
|
||||
* update Promxox VE 4.4 EOL warning
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 30 May 2018 12:02:05 +0200
|
||||
|
||||
pve-manager (4.4-23) unstable; urgency=medium
|
||||
|
||||
* add PVE 4.4 EOL warning
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 30 May 2018 10:58:52 +0200
|
||||
|
||||
pve-manager (4.4-22) unstable; urgency=medium
|
||||
|
||||
* add spec-ctrl cpu flag checkbox
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 17 Jan 2018 09:18:05 +0100
|
||||
|
||||
pve-manager (4.4-21) unstable; urgency=medium
|
||||
|
||||
* add PCID checkbox to ProcessorEdit
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 10 Jan 2018 13:49:17 +0100
|
||||
|
||||
pve-manager (4.4-20) unstable; urgency=medium
|
||||
|
||||
* fix #1539: fix issues with proxied commands using pvesh
|
||||
|
||||
* fix #1531: match nodename exactly for vmidselector
|
||||
|
||||
* fix #1024: issues with start-on-boot
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 15 Nov 2017 10:41:07 +0100
|
||||
|
||||
pve-manager (4.4-18) unstable; urgency=medium
|
||||
|
||||
* ceph: fix creation of first monitor in a cluster
|
||||
|
||||
* ceph: allow '-' in service instance names
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 21 Aug 2017 10:31:35 +0200
|
||||
|
||||
pve-manager (4.4-17) unstable; urgency=medium
|
||||
|
||||
* ceph: add check for ceph-mgr when destroying monitor
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 14 Aug 2017 14:56:31 +0200
|
||||
|
||||
pve-manager (4.4-16) unstable; urgency=medium
|
||||
|
||||
* remove old CA entry for enterprise repository, not required anymore
|
||||
|
||||
* ceph: backport createmgr/destroymgr for upgrade to PVE 5.x / Luminous
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 14 Aug 2017 13:49:31 +0200
|
||||
|
||||
pve-manager (4.4-15) unstable; urgency=medium
|
||||
|
||||
* add certificate authority for enterprise repository
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Wed, 05 Jul 2017 08:47:58 +0200
|
||||
|
||||
pve-manager (4.4-14) unstable; urgency=medium
|
||||
|
||||
* update default aplinfo.dat
|
||||
|
||||
* fix #1414: use table layout instead of columns
|
||||
|
||||
* Do not internationalize 'Pools' when used in Ceph Context
|
||||
|
||||
* remove "read-only" option from container root disk
|
||||
|
||||
* fix #1317: check wizard form also on validitychange
|
||||
|
||||
* fix #1307: dont use language dependent separator in gui
|
||||
|
||||
* fix #1305: typo
|
||||
|
||||
-- Proxmox Support Team <support@proxmox.com> Mon, 19 Jun 2017 07:16:54 +0200
|
||||
|
||||
pve-manager (4.4-13) unstable; urgency=medium
|
||||
|
||||
* fix #1299: sort pools in pool selector by default
|
||||
|
8
debian/postinst
vendored
8
debian/postinst
vendored
@ -116,7 +116,7 @@ EOF
|
||||
deb-systemd-invoke reload-or-restart $service
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# rewrite banner
|
||||
test -e /proxmox_install_mode || pvebanner || true
|
||||
|
||||
@ -137,7 +137,11 @@ EOF
|
||||
else
|
||||
# Version $2 is the most recently configured version of this
|
||||
# package.
|
||||
:
|
||||
if dpkg --compare-versions "$2" '<=' '4.4-15'; then
|
||||
# 4.4-15 temporarily reverted the removal of the startcom CA in
|
||||
# ca-certificates; we've since switched to let's encrypt
|
||||
update-ca-certificates >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
fi ;;
|
||||
abort-upgrade)
|
||||
|
@ -1,6 +1,6 @@
|
||||
VERSION=4.4
|
||||
PACKAGE=pve-manager
|
||||
PACKAGERELEASE=13
|
||||
PACKAGERELEASE=24
|
||||
|
||||
BINDIR=${DESTDIR}/usr/bin
|
||||
PERLLIBDIR=${DESTDIR}/usr/share/perl5
|
||||
|
@ -517,3 +517,10 @@ table.osds td:first-of-type {
|
||||
.x-webkit :not(.x-form-textarea-body) > .x-form-trigger-wrap {
|
||||
height: initial;
|
||||
}
|
||||
|
||||
.eolicon {
|
||||
position: relative;
|
||||
top: 4px;
|
||||
float: left;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
@ -129,6 +129,13 @@ Ext.apply(Ext.form.field.VTypes, {
|
||||
HostListText: gettext('Not a valid list of hosts')
|
||||
});
|
||||
|
||||
// since we always want the number in
|
||||
// x.y format and never in e.g. x,y
|
||||
Ext.define('PVE.form.field.Number', {
|
||||
override: 'Ext.form.field.Number',
|
||||
submitLocaleSeparator: false
|
||||
});
|
||||
|
||||
// ExtJs 5-6 has an issue with caching
|
||||
// see https://www.sencha.com/forum/showthread.php?308989
|
||||
Ext.define('PVE.UnderlayPool', {
|
||||
|
@ -185,9 +185,8 @@ Ext.define('PVE.StdWorkspace', {
|
||||
var ui = me.query('#versioninfo')[0];
|
||||
|
||||
if (PVE.VersionInfo) {
|
||||
var version = PVE.VersionInfo.version + '-' + PVE.VersionInfo.release + '/' +
|
||||
PVE.VersionInfo.repoid;
|
||||
ui.update('Virtual Environment ' + version);
|
||||
var version = PVE.VersionInfo.version + '-' + PVE.VersionInfo.release;
|
||||
ui.update('Virtual Environment ' + version );
|
||||
} else {
|
||||
ui.update('Virtual Environment');
|
||||
}
|
||||
@ -303,7 +302,6 @@ Ext.define('PVE.StdWorkspace', {
|
||||
'<img style="padding-top:4px;padding-right:5px" src="/pve2/images/proxmox_logo.png"/></a>'
|
||||
},
|
||||
{
|
||||
minWidth: 200,
|
||||
id: 'versioninfo',
|
||||
html: 'Virtual Environment'
|
||||
},
|
||||
@ -314,6 +312,20 @@ Ext.define('PVE.StdWorkspace', {
|
||||
{
|
||||
flex: 1
|
||||
},
|
||||
{
|
||||
id: 'eolannouncement',
|
||||
padding: '0 0 0 15',
|
||||
html: '<a href="https://pve.proxmox.com/wiki/FAQ#faq-support-table" target="_blank">'+
|
||||
'<i class="fa fa-2x eolicon critical fa-exclamation-triangle"></i> ' +
|
||||
'Support for Proxmox VE 4.4<br />ends on June 30, 2018</a>',
|
||||
autoEl: {
|
||||
tag: 'div',
|
||||
'data-qtip': gettext("You won't get any security fixes after the EOL date, Please consider upgrading.")
|
||||
}
|
||||
},
|
||||
{
|
||||
flex: 1
|
||||
},
|
||||
{
|
||||
pack: 'end',
|
||||
id: 'userinfo',
|
||||
|
@ -5,15 +5,23 @@ Ext.define('PVE.dc.Guests', {
|
||||
|
||||
title: gettext('Guests'),
|
||||
height: 200,
|
||||
layout: 'column',
|
||||
layout: {
|
||||
type: 'table',
|
||||
columns: 2,
|
||||
tableAttrs: {
|
||||
style: {
|
||||
width: '100%'
|
||||
}
|
||||
}
|
||||
},
|
||||
bodyPadding: '0 20 20 20',
|
||||
|
||||
defaults: {
|
||||
columnWidth: 0.5,
|
||||
xtype: 'box',
|
||||
padding: '0 50 0 50',
|
||||
style: {
|
||||
'text-align':'center'
|
||||
'text-align':'center',
|
||||
'line-height':'1.2'
|
||||
}
|
||||
},
|
||||
items: [{
|
||||
@ -88,6 +96,7 @@ Ext.define('PVE.dc.Guests', {
|
||||
]
|
||||
},{
|
||||
itemId: 'error',
|
||||
colspan: 2,
|
||||
data: {
|
||||
num: 0
|
||||
},
|
||||
|
@ -6,10 +6,13 @@ Ext.define('PVE.dc.Health', {
|
||||
|
||||
bodyPadding: '0 20 0 20',
|
||||
height: 200,
|
||||
layout: 'column',
|
||||
layout: {
|
||||
type: 'hbox',
|
||||
align: 'stretch'
|
||||
},
|
||||
|
||||
defaults: {
|
||||
columnWidth: 0.5,
|
||||
flex: 1,
|
||||
xtype: 'box',
|
||||
style: {
|
||||
'text-align':'center'
|
||||
|
@ -27,10 +27,10 @@ Ext.define('PVE.dc.Summary', {
|
||||
xtype: 'panel',
|
||||
height: 250,
|
||||
bodyPadding: '0 0 10 0',
|
||||
layout: 'column',
|
||||
layout: 'hbox',
|
||||
defaults: {
|
||||
xtype: 'pveGauge',
|
||||
columnWidth: 1/3
|
||||
flex: 1
|
||||
},
|
||||
items:[
|
||||
{
|
||||
|
@ -21,7 +21,7 @@ Ext.define('PVE.form.GuestIDSelector', {
|
||||
value < me.minValue ||
|
||||
value > me.maxValue) {
|
||||
// check is done by ExtJS
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (me.validateExists === true && !me.exists) {
|
||||
@ -65,11 +65,11 @@ Ext.define('PVE.form.GuestIDSelector', {
|
||||
method: 'GET',
|
||||
success: function(response, opts) {
|
||||
me.exists = false;
|
||||
me.isValid();
|
||||
me.validate();
|
||||
},
|
||||
failure: function(response, opts) {
|
||||
me.exists = true;
|
||||
me.isValid();
|
||||
me.validate();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -165,6 +165,7 @@ Ext.define('PVE.form.VMSelector', {
|
||||
if (me.nodename) {
|
||||
me.store.filters.add({
|
||||
property: 'node',
|
||||
exactMatch: true,
|
||||
value: me.nodename
|
||||
});
|
||||
}
|
||||
|
@ -491,18 +491,19 @@ Ext.define('PVE.lxc.MountPointInputPanel', {
|
||||
});
|
||||
|
||||
me.column2 = [
|
||||
{
|
||||
xtype: 'pvecheckbox',
|
||||
name: 'ro',
|
||||
defaultValue: 0,
|
||||
fieldLabel: gettext('Read-only'),
|
||||
hidden: me.insideWizard
|
||||
},
|
||||
me.acl,
|
||||
me.quota
|
||||
];
|
||||
|
||||
if (!isroot) {
|
||||
me.column2.unshift({
|
||||
xtype: 'pvecheckbox',
|
||||
name: 'ro',
|
||||
defaultValue: 0,
|
||||
fieldLabel: gettext('Read-only'),
|
||||
hidden: me.insideWizard
|
||||
});
|
||||
|
||||
me.backup = Ext.createWidget('pvecheckbox',{
|
||||
xtype: 'pvecheckbox',
|
||||
name: 'backup',
|
||||
|
@ -260,7 +260,7 @@ Ext.define('PVE.node.Config', {
|
||||
},
|
||||
{
|
||||
xtype: 'pveNodeCephPoolList',
|
||||
title: gettext('Pools'),
|
||||
title: 'Pools',
|
||||
iconCls: 'fa fa-sitemap',
|
||||
groups: ['ceph'],
|
||||
itemId: 'ceph-pools'
|
||||
|
@ -5,18 +5,19 @@ Ext.define('PVE.node.StatusView', {
|
||||
height: 300,
|
||||
bodyPadding: '20 15 20 15',
|
||||
|
||||
layout: {
|
||||
type: 'table',
|
||||
columns: 2,
|
||||
tableAttrs: {
|
||||
style: {
|
||||
width: '100%'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
defaults: {
|
||||
xtype: 'pveInfoWidget',
|
||||
padding: '0 15 5 15',
|
||||
// default available width on 1920x1080 is
|
||||
// 1545, so we have for one column
|
||||
// ~770px
|
||||
// -10 for padding
|
||||
// -2 for border
|
||||
// -30 for inner padding
|
||||
// = 728px
|
||||
// = 364px per column inside statuspanel
|
||||
width: 364
|
||||
padding: '0 15 5 15'
|
||||
},
|
||||
|
||||
items: [
|
||||
@ -30,7 +31,8 @@ Ext.define('PVE.node.StatusView', {
|
||||
{
|
||||
itemId: 'wait',
|
||||
title: gettext('IO delay'),
|
||||
valueField: 'wait'
|
||||
valueField: 'wait',
|
||||
rowspan: 2
|
||||
},
|
||||
{
|
||||
itemId: 'load',
|
||||
@ -40,7 +42,7 @@ Ext.define('PVE.node.StatusView', {
|
||||
},
|
||||
{
|
||||
xtype: 'box',
|
||||
width: 400,
|
||||
colspan: 2,
|
||||
padding: '0 0 20 0'
|
||||
},
|
||||
{
|
||||
@ -77,11 +79,12 @@ Ext.define('PVE.node.StatusView', {
|
||||
},
|
||||
{
|
||||
xtype: 'box',
|
||||
width: 400,
|
||||
colspan: 2,
|
||||
padding: '0 0 20 0'
|
||||
},
|
||||
{
|
||||
itemId: 'cpus',
|
||||
colspan: 2,
|
||||
printBar: false,
|
||||
title: gettext('CPU(s)'),
|
||||
textField: 'cpuinfo',
|
||||
@ -93,24 +96,23 @@ Ext.define('PVE.node.StatusView', {
|
||||
gettext('Socket')
|
||||
) + ")";
|
||||
},
|
||||
value: '',
|
||||
width: 730
|
||||
value: ''
|
||||
},
|
||||
{
|
||||
itemId: 'kversion',
|
||||
colspan: 2,
|
||||
title: gettext('Kernel Version'),
|
||||
printBar: false,
|
||||
textField: 'kversion',
|
||||
value: '',
|
||||
width: 730
|
||||
value: ''
|
||||
},
|
||||
{
|
||||
itemId: 'version',
|
||||
colspan: 2,
|
||||
printBar: false,
|
||||
title: gettext('PVE Manager Version'),
|
||||
textField: 'pveversion',
|
||||
value: '',
|
||||
width: 730
|
||||
value: ''
|
||||
}
|
||||
],
|
||||
|
||||
|
@ -104,6 +104,7 @@ Ext.define('PVE.qemu.CreateWizard', {
|
||||
hdpanel,
|
||||
{
|
||||
xtype: 'pveQemuProcessorPanel',
|
||||
insideWizard: true,
|
||||
title: gettext('CPU')
|
||||
},
|
||||
{
|
||||
|
@ -3,12 +3,31 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
|
||||
alias: 'widget.pveQemuProcessorPanel',
|
||||
onlineHelp: 'qm_cpu',
|
||||
|
||||
insideWizard: false,
|
||||
|
||||
// defines the possible cpu flags and their labels
|
||||
flagsAvail: ['pcid', 'spec-ctrl'],
|
||||
flagLabels: ['PCID', 'SPEC-CTRL'],
|
||||
|
||||
onGetValues: function(values) {
|
||||
var me = this;
|
||||
|
||||
// build the cpu options:
|
||||
me.cpu.cputype = values.cputype;
|
||||
|
||||
var flags = [];
|
||||
|
||||
me.flagsAvail.forEach(function(flag) {
|
||||
if (values[flag]) {
|
||||
flags.push('+' + flag.toString());
|
||||
}
|
||||
delete values[flag];
|
||||
});
|
||||
|
||||
me.cpu.flags = flags.length ? flags.join(';') : undefined;
|
||||
|
||||
delete values.cputype;
|
||||
delete values.flags;
|
||||
var cpustring = PVE.Parser.printQemuCpu(me.cpu);
|
||||
|
||||
// remove cputype delete request:
|
||||
@ -96,9 +115,19 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
|
||||
name: 'totalcores',
|
||||
value: '1'
|
||||
}
|
||||
|
||||
];
|
||||
|
||||
me.flagsAvail.forEach(function(flag, i) {
|
||||
me.column2.push({
|
||||
hidden: me.insideWizard,
|
||||
disabled: me.insideWizard,
|
||||
xtype: 'pvecheckbox',
|
||||
fieldLabel: me.flagLabels[i] || flag,
|
||||
name: flag,
|
||||
uncheckedValue: 0
|
||||
});
|
||||
});
|
||||
|
||||
me.callParent();
|
||||
}
|
||||
});
|
||||
@ -126,6 +155,14 @@ Ext.define('PVE.qemu.ProcessorEdit', {
|
||||
var cpu = PVE.Parser.parseQemuCpu(value);
|
||||
ipanel.cpu = cpu;
|
||||
data.cputype = cpu.cputype;
|
||||
if (cpu.flags) {
|
||||
var flags = cpu.flags.split(';');
|
||||
flags.forEach(function(flag) {
|
||||
var sign = flag.substr(0,1);
|
||||
flag = flag.substr(1);
|
||||
data[flag] = (sign === '+');
|
||||
});
|
||||
}
|
||||
}
|
||||
me.setValues(data);
|
||||
}
|
||||
|
@ -229,7 +229,7 @@ Ext.define('PVE.window.Wizard', {
|
||||
display_header(tabs[0]);
|
||||
|
||||
Ext.Array.each(me.query('field'), function(field) {
|
||||
field.on('change', function(f) {
|
||||
var validcheck = function() {
|
||||
var tp = me.down('#wizcontent');
|
||||
var atab = tp.getActiveTab();
|
||||
var valid = check_card(atab);
|
||||
@ -242,7 +242,9 @@ Ext.define('PVE.window.Wizard', {
|
||||
} else if (ntab && !atab.onSubmit) {
|
||||
ntab.enable();
|
||||
}
|
||||
});
|
||||
};
|
||||
field.on('change', validcheck);
|
||||
field.on('validitychange', validcheck);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user