]> git.proxmox.com Git - pve-manager.git/blame - bin/pveceph
ceph: display pool usage information
[pve-manager.git] / bin / pveceph
CommitLineData
7cce0f3e 1#!/usr/bin/perl -T
39ab3ea6
DM
2
3use strict;
4use warnings;
5use Getopt::Long;
6use Fcntl ':flock';
7use File::Path;
8use IO::File;
9use JSON;
10use Data::Dumper;
11
12use PVE::SafeSyslog;
13use PVE::Cluster;
14use PVE::INotify;
15use PVE::RPCEnvironment;
16use PVE::Storage;
17use PVE::Tools qw(run_command);
18use PVE::JSONSchema qw(get_standard_option);
38db610a 19use PVE::API2::Ceph;
39ab3ea6
DM
20
21use PVE::CLIHandler;
22
23use base qw(PVE::CLIHandler);
24
25$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
26
27initlog ('pveceph');
28
29die "please run as root\n" if $> != 0;
30
31PVE::INotify::inotify_init();
32
33my $rpcenv = PVE::RPCEnvironment->init('cli');
34
35$rpcenv->init_request();
36$rpcenv->set_language($ENV{LANG});
37$rpcenv->set_user('root@pam');
38
68e0c4bd
DM
39my $upid_exit = sub {
40 my $upid = shift;
41 my $status = PVE::Tools::upid_read_status($upid);
42 exit($status eq 'OK' ? 0 : -1);
43};
44
39ab3ea6
DM
45my $nodename = PVE::INotify::nodename();
46
39ab3ea6
DM
47__PACKAGE__->register_method ({
48 name => 'purge',
49 path => 'purge',
50 method => 'POST',
51 description => "Destroy ceph related data and configuration files.",
52 parameters => {
53 additionalProperties => 0,
54 properties => {
55 },
56 },
57 returns => { type => 'null' },
58 code => sub {
59 my ($param) = @_;
60
61 my $monstat;
62
38db610a 63 eval { $monstat = PVE::API2::Ceph::ceph_mon_status(1); };
39ab3ea6
DM
64 my $err = $@;
65
66 die "detected running ceph services- unable to purge data\n"
67 if !$err;
68
69 # fixme: this is dangerous - should we really support this function?
38db610a 70 PVE::API2::Ceph::purge_all_ceph_files();
39ab3ea6
DM
71
72 return undef;
73 }});
74
75__PACKAGE__->register_method ({
76 name => 'install',
77 path => 'install',
78 method => 'POST',
79 description => "Install ceph related packages.",
80 parameters => {
81 additionalProperties => 0,
82 properties => {
83 },
84 },
85 returns => { type => 'null' },
86 code => sub {
87 my ($param) = @_;
88
b1389cd4 89 my $cephver = 'emperor';
39ab3ea6
DM
90
91 local $ENV{DEBIAN_FRONTEND} = 'noninteractive';
92
93 my $keyurl = "https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc";
94
95 print "download and import ceph reqpository keys\n";
96 system("wget -q -O- '$keyurl'| apt-key add - 2>&1 >/dev/null") == 0 ||
97 die "unable to download ceph release key\n";
98
99
100 my $source = "deb http://ceph.com/debian-$cephver wheezy main\n";
101
102 PVE::Tools::file_set_contents("/etc/apt/sources.list.d/ceph.list", $source);
103
104 print "update available package list\n";
105 eval { run_command(['apt-get', '-q', 'update'], outfunc => sub {}, errfunc => sub {}); };
106
107 run_command(['apt-get', '-q', '--assume-yes', '--no-install-recommends',
108 '-o', 'Dpkg::Options::=--force-confnew',
109 'install', '--',
110 'ceph', 'ceph-common', 'gdisk']);
111
112 return undef;
113 }});
114
39ab3ea6 115my $cmddef = {
f016ec96 116 init => [ 'PVE::API2::Ceph', 'init', [], { node => $nodename } ],
b0537f7b
DM
117 lspools => [ 'PVE::API2::Ceph', 'lspools', [], { node => $nodename }, sub {
118 my $res = shift;
119
d54f1126 120 printf("%-20s %10s %10s %20s\n", "Name", "size", "pg_num", "used");
b0537f7b 121 foreach my $p (sort {$a->{pool_name} cmp $b->{pool_name}} @$res) {
d54f1126 122 printf("%-20s %10d %10d %20d\n", $p->{pool_name}, $p->{size}, $p->{pg_num}, $p->{bytes_used});
b0537f7b
DM
123 }
124 }],
125 createpool => [ 'PVE::API2::Ceph', 'createpool', ['name'], { node => $nodename }],
126 destroypool => [ 'PVE::API2::Ceph', 'destroypool', ['name'], { node => $nodename } ],
7d4fc5ef
DM
127 createosd => [ 'PVE::API2::CephOSD', 'createosd', ['dev'], { node => $nodename }, $upid_exit],
128 destroyosd => [ 'PVE::API2::CephOSD', 'destroyosd', ['osdid'], { node => $nodename }, $upid_exit],
52d7be41
DM
129 createmon => [ 'PVE::API2::Ceph', 'createmon', [], { node => $nodename }, $upid_exit],
130 destroymon => [ 'PVE::API2::Ceph', 'destroymon', ['monid'], { node => $nodename }, $upid_exit],
131 start => [ 'PVE::API2::Ceph', 'start', ['service'], { node => $nodename }, $upid_exit],
132 stop => [ 'PVE::API2::Ceph', 'stop', ['service'], { node => $nodename }, $upid_exit],
38db610a 133 install => [ __PACKAGE__, 'install', [] ],
39ab3ea6 134 purge => [ __PACKAGE__, 'purge', [] ],
f016ec96 135 status => [ 'PVE::API2::Ceph', 'status', [], { node => $nodename }, sub {
39ab3ea6
DM
136 my $res = shift;
137 my $json = JSON->new->allow_nonref;
138 print $json->pretty->encode($res) . "\n";
139 }],
140};
141
142my $cmd = shift;
143
144PVE::CLIHandler::handle_cmd($cmddef, "pveceph", $cmd, \@ARGV, undef, $0);
145
146exit 0;
147
148__END__
149
150=head1 NAME
151
152pveceph - tool to manage ceph services on pve nodes
153
154=head1 SYNOPSIS
155
156=include synopsis
157
158=head1 DESCRIPTION
159
160Tool to manage ceph services on pve nodes.
161
162=include pve_copyright