]>
git.proxmox.com Git - pve-manager.git/blob - bin/pveceph
16 use PVE
::RPCEnvironment
;
18 use PVE
::Tools
qw(run_command);
19 use PVE
::JSONSchema
qw(get_standard_option);
25 use base
qw(PVE::CLIHandler);
27 my $nodename = PVE
::INotify
::nodename
();
30 $ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
34 die "please run as root\n" if $> != 0;
36 PVE
::INotify
::inotify_init
();
38 my $rpcenv = PVE
::RPCEnvironment-
>init('cli');
40 $rpcenv->init_request();
41 $rpcenv->set_language($ENV{LANG
});
42 $rpcenv->set_user('root@pam');
47 my $status = PVE
::Tools
::upid_read_status
($upid);
48 exit($status eq 'OK' ?
0 : -1);
51 __PACKAGE__-
>register_method ({
55 description
=> "Destroy ceph related data and configuration files.",
57 additionalProperties
=> 0,
61 returns
=> { type
=> 'null' },
68 my $rados = PVE
::RADOS-
>new();
69 my $monstat = $rados->mon_command({ prefix
=> 'mon_status' });
73 die "detected running ceph services- unable to purge data\n"
76 # fixme: this is dangerous - should we really support this function?
77 PVE
::CephTools
::purge_all_ceph_files
();
82 __PACKAGE__-
>register_method ({
86 description
=> "Install ceph related packages.",
88 additionalProperties
=> 0,
92 enum
=> ['dumpling', 'emperor', 'firefly', 'giant', 'hammer'],
97 returns
=> { type
=> 'null' },
101 my $cephver = $param->{version
} || 'firefly';
103 local $ENV{DEBIAN_FRONTEND
} = 'noninteractive';
105 my $keyurl = "https://git.ceph.com/?p=ceph.git;a=blob_plain;f=keys/release.asc";
107 print "download and import ceph repository keys\n";
109 # Note: wget on Debian wheezy cannot handle new ceph.com certificates, so
110 # we use LWP::UserAgent
111 #system("wget -q -O- '$keyurl'| apt-key add - 2>&1 >/dev/null") == 0 ||
112 #die "unable to download ceph release key\n";
114 my $tmp_key_file = "/tmp/ceph-release-keys.asc";
115 my $ua = LWP
::UserAgent-
>new(protocols_allowed
=> ['http', 'https'], timeout
=> 30);
117 my $response = $ua->get($keyurl);
118 if ($response->is_success) {
119 my $data = $response->decoded_content;
120 PVE
::Tools
::file_set_contents
($tmp_key_file, $data);
122 die "unable to download ceph release key: " . $response->status_line . "\n";
125 system("apt-key add $tmp_key_file 2>&1 >/dev/null") == 0 ||
126 die "unable to download ceph release key\n";
128 unlink $tmp_key_file;
130 my $source = "deb http://ceph.com/debian-$cephver wheezy main\n";
132 PVE
::Tools
::file_set_contents
("/etc/apt/sources.list.d/ceph.list", $source);
134 print "update available package list\n";
135 eval { run_command
(['apt-get', '-q', 'update'], outfunc
=> sub {}, errfunc
=> sub {}); };
137 run_command
(['apt-get', '-q', '--assume-yes', '--no-install-recommends',
138 '-o', 'Dpkg::Options::=--force-confnew',
140 'ceph', 'ceph-common', 'gdisk']);
146 init
=> [ 'PVE::API2::Ceph', 'init', [], { node
=> $nodename } ],
147 lspools
=> [ 'PVE::API2::Ceph', 'lspools', [], { node
=> $nodename }, sub {
150 printf("%-20s %10s %10s %20s\n", "Name", "size", "pg_num", "used");
151 foreach my $p (sort {$a->{pool_name
} cmp $b->{pool_name
}} @$res) {
152 printf("%-20s %10d %10d %20d\n", $p->{pool_name
}, $p->{size
}, $p->{pg_num
}, $p->{bytes_used
});
155 createpool
=> [ 'PVE::API2::Ceph', 'createpool', ['name'], { node
=> $nodename }],
156 destroypool
=> [ 'PVE::API2::Ceph', 'destroypool', ['name'], { node
=> $nodename } ],
157 createosd
=> [ 'PVE::API2::CephOSD', 'createosd', ['dev'], { node
=> $nodename }, $upid_exit],
158 destroyosd
=> [ 'PVE::API2::CephOSD', 'destroyosd', ['osdid'], { node
=> $nodename }, $upid_exit],
159 createmon
=> [ 'PVE::API2::Ceph', 'createmon', [], { node
=> $nodename }, $upid_exit],
160 destroymon
=> [ 'PVE::API2::Ceph', 'destroymon', ['monid'], { node
=> $nodename }, $upid_exit],
161 start
=> [ 'PVE::API2::Ceph', 'start', ['service'], { node
=> $nodename }, $upid_exit],
162 stop
=> [ 'PVE::API2::Ceph', 'stop', ['service'], { node
=> $nodename }, $upid_exit],
163 install
=> [ __PACKAGE__
, 'install', [] ],
164 purge
=> [ __PACKAGE__
, 'purge', [] ],
165 status
=> [ 'PVE::API2::Ceph', 'status', [], { node
=> $nodename }, sub {
167 my $json = JSON-
>new->allow_nonref;
168 print $json->pretty->encode($res) . "\n";
174 PVE
::CLIHandler
::handle_cmd
($cmddef, "pveceph", $cmd, \
@ARGV, undef, $0, \
&prepare
);
182 pveceph - tool to manage ceph services on pve nodes
190 Tool to manage ceph services on pve nodes.
192 =include pve_copyright