{"id":4907,"date":"2014-05-02T13:22:37","date_gmt":"2014-05-02T11:22:37","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=4907"},"modified":"2014-05-02T14:14:36","modified_gmt":"2014-05-02T12:14:36","slug":"deploy-ceph-librados-client-part-33","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/","title":{"rendered":"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)"},"content":{"rendered":"<p>(<a title=\"Deploy Ceph and start using it: end to end tutorial \u2013 Installation (part 1\/3)\" href=\"http:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-and-start-using-it-end-to-end-tutorial-installation-part-13\/\">Part 1\/3 &#8211; Installation<\/a>\u00a0&#8211;\u00a0<a title=\"Deploy Ceph and start using it: end to end tutorial \u2013 Troubleshooting (part 2\/3)\" href=\"http:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-troubleshooting-part-23\/\">Part 2\/3 &#8211; troubleshooting<\/a>)<\/p>\n<p>This part of the tutorial describes how to\u00a0setup a simple Ceph client using librados (for\u00a0C++).<\/p>\n<p>The only information that the client requires for the <code>cephx<\/code> authentication is<\/p>\n<ul>\n<li>Endpoint of the monitor node<\/li>\n<li>Keyring containing the pre-shared secret (we will use the admin keyring)<\/li>\n<\/ul>\n<h1>Install librados APIs<\/h1>\n<p>On Ubuntu, the library is available on the repositories<\/p>\n<pre id=\"CA-5e3aec0b0a80f3d01ce799eb45e3032706a096cc\" style=\"color: #000000\"><span class=\"line\"><span class=\"ID\" style=\"color: #000000\">$<\/span> sudo apt-get install librados-dev<\/span><\/pre>\n<h1>Create a client configuration file<\/h1>\n<p>This is the file from which librados will read the client configuration.<\/p>\n<p>The content of the file is structured according to this template:<\/p>\n<pre>[global]\r\nmon host= &lt;IP address of one of the monitors&gt;\r\nkeyring = &lt;path\/to\/client.admin.keyring&gt;<\/pre>\n<p>for example:<\/p>\n<pre>[global]\r\nmon host = 192.168.252.10:6789\r\nkeyring = .\/ceph.client.admin.keyring<\/pre>\n<p>The public endpoint of the monitor node can be retrieved with<\/p>\n<pre>$ ceph mon stat<\/pre>\n<p>The keyring file can be copied from the admin node. No change is needed to this file. The same information that is contained in the file can be retrieved with this command that will also list the client capabilities:<\/p>\n<pre>$ ceph auth get client.admin<\/pre>\n<h1>Connect to the cluster<\/h1>\n<p>The following simple client will perform the following operations:<\/p>\n<ul>\n<li>Read the configuration file (ceph.conf) from the local directory<\/li>\n<li>Get an handle to the cluster and IO context on the &#8220;data&#8221; pool<\/li>\n<li>Create a new object<\/li>\n<li>Set an xattr<\/li>\n<li>Read the object and xattr back<\/li>\n<li>Print the list of pools<\/li>\n<li>Print the list of objects in the &#8220;data&#8221; pool<\/li>\n<li>Cleanup<\/li>\n<\/ul>\n<ol style=\"color: #acacac\">\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><span class=\"co2\" style=\"color: #339900\">#include &lt;rados\/librados.hpp&gt;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><span class=\"co2\" style=\"color: #339900\">#include &lt;string&gt;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><span class=\"co2\" style=\"color: #339900\">#include &lt;list&gt;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><span class=\"kw4\" style=\"color: #0000ff\">int<\/span>\u00a0main<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"kw4\" style=\"color: #0000ff\">int<\/span>\u00a0argc,\u00a0<span class=\"kw4\" style=\"color: #0000ff\">const<\/span>\u00a0<span class=\"kw4\" style=\"color: #0000ff\">char<\/span>\u00a0<span class=\"sy2\" style=\"color: #000040\">**<\/span>argv<span class=\"br0\" style=\"color: #008000\">)<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><span class=\"br0\" style=\"color: #008000\">{<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"kw4\" style=\"color: #0000ff\">int<\/span>\u00a0ret\u00a0<span class=\"sy1\" style=\"color: #000080\">=<\/span>\u00a0<span class=\"nu0\" style=\"color: #0000dd\">0<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"coMULTI\" style=\"font-style: italic;color: #ff0000\">\/*<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><span class=\"coMULTI\" style=\"font-style: italic;color: #ff0000\">\u00a0 \u00a0* Errors are not checked to avoid pollution.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><span class=\"coMULTI\" style=\"font-style: italic;color: #ff0000\">\u00a0 \u00a0* After each Ceph operation:<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><span class=\"coMULTI\" style=\"font-style: italic;color: #ff0000\">\u00a0 \u00a0* if (ret &lt; 0) error_condition<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><span class=\"coMULTI\" style=\"font-style: italic;color: #ff0000\">\u00a0 \u00a0* else success<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><span class=\"coMULTI\" style=\"font-style: italic;color: #ff0000\">\u00a0 \u00a0*\/<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Get cluster handle and connect to cluster<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">string<\/span>\u00a0cluster_name<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;ceph&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">string<\/span>\u00a0user_name<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;client.admin&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">Rados<\/span>\u00a0cluster<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 cluster.<span class=\"me1\" style=\"color: #007788\">init2<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>user_name.<span class=\"me1\" style=\"color: #007788\">c_str<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>, cluster_name.<span class=\"me1\" style=\"color: #007788\">c_str<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>,\u00a0<span class=\"nu0\" style=\"color: #0000dd\">0<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 cluster.<span class=\"me1\" style=\"color: #007788\">conf_read_file<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;ceph.conf&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 cluster.<span class=\"me1\" style=\"color: #007788\">connect<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ IO context<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">IoCtx<\/span>\u00a0io_ctx<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">string<\/span>\u00a0pool_name<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;data&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 cluster.<span class=\"me1\" style=\"color: #007788\">ioctx_create<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>pool_name.<span class=\"me1\" style=\"color: #007788\">c_str<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>, io_ctx<span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Write an object synchronously<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">bufferlist<\/span>\u00a0bl<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">string<\/span>\u00a0objectId<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;hw&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">string<\/span>\u00a0objectContent<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;Hello World!&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 bl.<span class=\"me1\" style=\"color: #007788\">append<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectContent<span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"me1\" style=\"color: #007788\">write<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectId, bl, objectContent.<span class=\"me1\" style=\"color: #007788\">size<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>,\u00a0<span class=\"nu0\" style=\"color: #0000dd\">0<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Add an xattr to the object.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">bufferlist<\/span>\u00a0lang_bl<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 lang_bl.<span class=\"me1\" style=\"color: #007788\">append<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"st0\" style=\"color: #ff0000\">&#8220;en_US&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"me1\" style=\"color: #007788\">setxattr<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectId,\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;lang&#8221;<\/span>, lang_bl<span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Read the object back asynchronously<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">bufferlist<\/span>\u00a0read_buf<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"kw4\" style=\"color: #0000ff\">int<\/span>\u00a0read_len\u00a0<span class=\"sy1\" style=\"color: #000080\">=<\/span>\u00a0<span class=\"nu0\" style=\"color: #0000dd\">4194304<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/Create I\/O Completion.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">AioCompletion<\/span>\u00a0<span class=\"sy2\" style=\"color: #000040\">*<\/span>read_completion\u00a0<span class=\"sy1\" style=\"color: #000080\">=<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">Rados<\/span><span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">aio_create_completion<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/Send read request.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"me1\" style=\"color: #007788\">aio_read<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectId, read_completion,\u00a0<span class=\"sy3\" style=\"color: #000040\">&amp;<\/span>read_buf, read_len,\u00a0<span class=\"nu0\" style=\"color: #0000dd\">0<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Wait for the request to complete, and print content<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 read_completion<span class=\"sy2\" style=\"color: #000040\">&#8211;<\/span><span class=\"sy1\" style=\"color: #000080\">&gt;<\/span>wait_for_complete<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 read_completion<span class=\"sy2\" style=\"color: #000040\">&#8211;<\/span><span class=\"sy1\" style=\"color: #000080\">&gt;<\/span>get_return_value<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"kw3\" style=\"color: #0000dd\">cout<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;Object name: &#8220;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0objectId\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;<span class=\"es1\" style=\"font-weight: bold;color: #000099\">\\n<\/span>&#8220;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;Content: &#8220;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0read_buf.<span class=\"me1\" style=\"color: #007788\">c_str<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">endl<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Read the xattr.<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">bufferlist<\/span>\u00a0lang_res<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"me1\" style=\"color: #007788\">getxattr<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectId,\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;lang&#8221;<\/span>, lang_res<span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"kw3\" style=\"color: #0000dd\">cout<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;Object xattr: &#8220;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0lang_res.<span class=\"me1\" style=\"color: #007788\">c_str<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">endl<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Print the list of pools<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">list<\/span><span class=\"sy1\" style=\"color: #000080\">&lt;<\/span>std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">string<\/span><span class=\"sy1\" style=\"color: #000080\">&gt;<\/span>\u00a0pools<span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 cluster.<span class=\"me1\" style=\"color: #007788\">pool_list<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>pools<span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"kw3\" style=\"color: #0000dd\">cout<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;List of pools from this cluster handle&#8221;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">endl<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"kw1\" style=\"color: #0000ff\">for<\/span>\u00a0<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"kw4\" style=\"color: #0000ff\">auto<\/span>\u00a0pool_id\u00a0<span class=\"sy4\" style=\"color: #008080\">:<\/span>\u00a0pools<span class=\"br0\" style=\"color: #008000\">)<\/span>\u00a0<span class=\"br0\" style=\"color: #008000\">{<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 \u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"kw3\" style=\"color: #0000dd\">cout<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;<span class=\"es1\" style=\"font-weight: bold;color: #000099\">\\t<\/span>&#8220;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0pool_id\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">endl<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"br0\" style=\"color: #008000\">}<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Print the list of objects<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">ObjectIterator<\/span>\u00a0oit\u00a0<span class=\"sy1\" style=\"color: #000080\">=<\/span>\u00a0io_ctx.<span class=\"me1\" style=\"color: #007788\">objects_begin<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 librados<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">ObjectIterator<\/span>\u00a0oet\u00a0<span class=\"sy1\" style=\"color: #000080\">=<\/span>\u00a0io_ctx.<span class=\"me1\" style=\"color: #007788\">objects_end<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"kw3\" style=\"color: #0000dd\">cout<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;List of objects from this pool&#8221;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">endl<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"kw1\" style=\"color: #0000ff\">for<\/span>\u00a0<span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span>\u00a0oit\u00a0<span class=\"sy3\" style=\"color: #000040\">!<\/span><span class=\"sy1\" style=\"color: #000080\">=<\/span>\u00a0oet<span class=\"sy4\" style=\"color: #008080\">;<\/span>\u00a0oit<span class=\"sy2\" style=\"color: #000040\">++<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span>\u00a0<span class=\"br0\" style=\"color: #008000\">{<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 \u00a0 std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"kw3\" style=\"color: #0000dd\">cout<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;<span class=\"es1\" style=\"font-weight: bold;color: #000099\">\\t<\/span>&#8220;<\/span>\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0oit<span class=\"sy2\" style=\"color: #000040\">&#8211;<\/span><span class=\"sy1\" style=\"color: #000080\">&gt;<\/span>first\u00a0<span class=\"sy1\" style=\"color: #000080\">&lt;&lt;<\/span>\u00a0std<span class=\"sy4\" style=\"color: #008080\">::<\/span><span class=\"me2\" style=\"color: #007788\">endl<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"br0\" style=\"color: #008000\">}<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Remove the xattr<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"me1\" style=\"color: #007788\">rmxattr<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectId,\u00a0<span class=\"st0\" style=\"color: #ff0000\">&#8220;lang&#8221;<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Remove the object.<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"kw3\" style=\"color: #0000dd\">remove<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span>objectId<span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"co1\" style=\"color: #666666\">\/\/ Cleanup<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\">\u00a0 io_ctx.<span class=\"me1\" style=\"color: #007788\">close<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0 cluster.<span class=\"me1\" style=\"color: #007788\">shutdown<\/span><span class=\"br0\" style=\"color: #008000\">(<\/span><span class=\"br0\" style=\"color: #008000\">)<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><\/div>\n<\/li>\n<li class=\"li1\">\n<div class=\"de1\" style=\"color: #000000\">\u00a0\u00a0<span class=\"kw1\" style=\"color: #0000ff\">return<\/span>\u00a0<span class=\"nu0\" style=\"color: #0000dd\">0<\/span><span class=\"sy4\" style=\"color: #008080\">;<\/span><\/div>\n<\/li>\n<li class=\"li2\">\n<div class=\"de2\" style=\"color: #000000\"><span class=\"br0\" style=\"color: #008000\">}<\/span><\/div>\n<\/li>\n<\/ol>\n<p>Find the pastebin <a href=\"http:\/\/pastebin.com\/VjKtvcKW\">here<\/a>.<\/p>\n<p>This example can be compiled and executed\u00a0with<\/p>\n<pre>$ g++ client.cpp -lrados -o cephclient\r\n$ .\/cephclient<\/pre>\n<h1>Operate with\u00a0cluster data from\u00a0the command line<\/h1>\n<p>To quickly verify if an object was written or to remove it, use the following commands (e.g., from the monitor node).<\/p>\n<ul style=\"color: #000000\">\n<li>\n<p class=\"line862\">List objects in pool\u00a0<tt>data<\/tt><span id=\"line-802\" class=\"anchor\"><\/span><span id=\"line-803\" class=\"anchor\"><\/span><span id=\"line-804\" class=\"anchor\"><\/span><\/p>\n<pre><span id=\"line-1-55\" class=\"anchor\"><\/span>$ rados -p data ls<\/pre>\n<\/li>\n<li class=\"gap\">\n<p class=\"line862\">Check the location of an object in pool\u00a0<tt>data<\/tt><span id=\"line-807\" class=\"anchor\"><\/span><span id=\"line-808\" class=\"anchor\"><\/span><span id=\"line-809\" class=\"anchor\"><\/span><\/p>\n<pre><span id=\"line-1-56\" class=\"anchor\"><\/span>$ ceph osd map data &lt;object name&gt;<\/pre>\n<\/li>\n<li class=\"gap\">\n<p class=\"line862\">Remove object from pool\u00a0<tt>data<\/tt><span id=\"line-812\" class=\"anchor\"><\/span><span id=\"line-813\" class=\"anchor\"><\/span><span id=\"line-814\" class=\"anchor\"><\/span><\/p>\n<pre><span id=\"line-1-57\" class=\"anchor\"><\/span>$ rados rm &lt;object name&gt; --pool=data<\/pre>\n<\/li>\n<\/ul>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/ceph\/\">Ceph<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/client\/\">client<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/cloud-storage\/\">cloud storage<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/librados\/\">librados<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>(Part 1\/3 &#8211; Installation\u00a0&#8211;\u00a0Part 2\/3 &#8211; troubleshooting) This part of the tutorial describes how to\u00a0setup a simple Ceph client using librados (for\u00a0C++). The only information that the client requires for the cephx authentication is Endpoint of the monitor node Keyring containing the pre-shared secret (we will use the admin keyring) Install librados APIs On Ubuntu, [&hellip;]<\/p>\n","protected":false},"author":96,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5,15],"tags":[70,414,413,415],"features":[],"class_list":["post-4907","post","type-post","status-publish","format-standard","hentry","category-articles","category-howtos","tag-ceph","tag-client","tag-cloud-storage","tag-librados"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3) - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)\" \/>\n<meta property=\"og:description\" content=\"(Part 1\/3 &#8211; Installation\u00a0&#8211;\u00a0Part 2\/3 &#8211; troubleshooting) This part of the tutorial describes how to\u00a0setup a simple Ceph client using librados (for\u00a0C++). The only information that the client requires for the cephx authentication is Endpoint of the monitor node Keyring containing the pre-shared secret (we will use the admin keyring) Install librados APIs On Ubuntu, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-02T11:22:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-05-02T12:14:36+00:00\" \/>\n<meta name=\"author\" content=\"piiv\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"piiv\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\"},\"author\":{\"name\":\"piiv\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/b75ac4e936b5921c8a9de4fb84202703\"},\"headline\":\"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)\",\"datePublished\":\"2014-05-02T11:22:37+00:00\",\"dateModified\":\"2014-05-02T12:14:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\"},\"wordCount\":668,\"commentCount\":2,\"keywords\":[\"Ceph\",\"client\",\"cloud storage\",\"librados\"],\"articleSection\":[\"Articles\",\"HowTos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\",\"name\":\"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3) - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"datePublished\":\"2014-05-02T11:22:37+00:00\",\"dateModified\":\"2014-05-02T12:14:36+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/b75ac4e936b5921c8a9de4fb84202703\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/b75ac4e936b5921c8a9de4fb84202703\",\"name\":\"piiv\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c7b4c6df4485c24b56af1a1a92442259dfc735b8c0dcf8d3ddcb16f88deeb723?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c7b4c6df4485c24b56af1a1a92442259dfc735b8c0dcf8d3ddcb16f88deeb723?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c7b4c6df4485c24b56af1a1a92442259dfc735b8c0dcf8d3ddcb16f88deeb723?s=96&d=mm&r=g\",\"caption\":\"piiv\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/piiv\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3) - Service Engineering (ICCLab &amp; SPLab)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/","og_locale":"en_US","og_type":"article","og_title":"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)","og_description":"(Part 1\/3 &#8211; Installation\u00a0&#8211;\u00a0Part 2\/3 &#8211; troubleshooting) This part of the tutorial describes how to\u00a0setup a simple Ceph client using librados (for\u00a0C++). The only information that the client requires for the cephx authentication is Endpoint of the monitor node Keyring containing the pre-shared secret (we will use the admin keyring) Install librados APIs On Ubuntu, [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-05-02T11:22:37+00:00","article_modified_time":"2014-05-02T12:14:36+00:00","author":"piiv","twitter_card":"summary_large_image","twitter_misc":{"Written by":"piiv","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/"},"author":{"name":"piiv","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/b75ac4e936b5921c8a9de4fb84202703"},"headline":"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)","datePublished":"2014-05-02T11:22:37+00:00","dateModified":"2014-05-02T12:14:36+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/"},"wordCount":668,"commentCount":2,"keywords":["Ceph","client","cloud storage","librados"],"articleSection":["Articles","HowTos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/","url":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/","name":"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3) - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"datePublished":"2014-05-02T11:22:37+00:00","dateModified":"2014-05-02T12:14:36+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/b75ac4e936b5921c8a9de4fb84202703"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/deploy-ceph-librados-client-part-33\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Deploy Ceph and start using it: end to end tutorial \u2013 simple librados client (part 3\/3)"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/b75ac4e936b5921c8a9de4fb84202703","name":"piiv","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c7b4c6df4485c24b56af1a1a92442259dfc735b8c0dcf8d3ddcb16f88deeb723?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c7b4c6df4485c24b56af1a1a92442259dfc735b8c0dcf8d3ddcb16f88deeb723?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c7b4c6df4485c24b56af1a1a92442259dfc735b8c0dcf8d3ddcb16f88deeb723?s=96&d=mm&r=g","caption":"piiv"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/piiv\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/96"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=4907"}],"version-history":[{"count":8,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4907\/revisions"}],"predecessor-version":[{"id":4926,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4907\/revisions\/4926"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=4907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=4907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=4907"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=4907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}