)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":12,"context_line":"NFS-Ganesha gateways."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"And while adding the driver\u0027s helper class that subclasses Ganesha"},{"line_number":15,"context_line":"library\u0027s GaneshaNASHelper2 idenitified minor issues in the"},{"line_number":16,"context_line":"Ganesha library. Fix the issues by:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* escaping special character \u0027\u003d\u0027 in values of Ganesha conf\u0027s string"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"7f231b9d_12c88871","line":15,"range":{"start_line":15,"start_character":28,"end_line":15,"end_character":39},"updated":"2017-06-18 00:20:08.000000000","message":"nit: spelling","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":12,"context_line":"NFS-Ganesha gateways."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"And while adding the driver\u0027s helper class that subclasses Ganesha"},{"line_number":15,"context_line":"library\u0027s GaneshaNASHelper2 idenitified minor issues in the"},{"line_number":16,"context_line":"Ganesha library. Fix the issues by:"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* escaping special character \u0027\u003d\u0027 in values of Ganesha conf\u0027s string"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"7f231b9d_23956987","line":15,"range":{"start_line":15,"start_character":28,"end_line":15,"end_character":39},"in_reply_to":"7f231b9d_12c88871","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"}],"doc/source/devref/cephfs_driver.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The CephFS driver enables manila to export shared filesystems backed by Ceph\u0027s"},{"line_number":22,"context_line":"File System (CephFS) using either the Ceph network protcol or NFS protocol."},{"line_number":23,"context_line":"Guests require a native Ceph client or a NFS client in order to mount the"},{"line_number":24,"context_line":"filesystem."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_b2a674c0","line":22,"range":{"start_line":22,"start_character":51,"end_line":22,"end_character":58},"updated":"2017-06-18 00:20:08.000000000","message":"protocol","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The CephFS driver enables manila to export shared filesystems backed by Ceph\u0027s"},{"line_number":22,"context_line":"File System (CephFS) using either the Ceph network protcol or NFS protocol."},{"line_number":23,"context_line":"Guests require a native Ceph client or a NFS client in order to mount the"},{"line_number":24,"context_line":"filesystem."},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_03902d94","line":22,"range":{"start_line":22,"start_character":51,"end_line":22,"end_character":58},"in_reply_to":"7f231b9d_b2a674c0","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The CephFS driver enables manila to export shared filesystems backed by Ceph\u0027s"},{"line_number":22,"context_line":"File System (CephFS) using either the Ceph network protcol or NFS protocol."},{"line_number":23,"context_line":"Guests require a native Ceph client or a NFS client in order to mount the"},{"line_number":24,"context_line":"filesystem."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"When guests access CephFS using the native Ceph protocol, access is"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_92a93891","line":23,"range":{"start_line":23,"start_character":39,"end_line":23,"end_character":40},"updated":"2017-06-18 00:20:08.000000000","message":"nit: an","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"The CephFS driver enables manila to export shared filesystems backed by Ceph\u0027s"},{"line_number":22,"context_line":"File System (CephFS) using either the Ceph network protcol or NFS protocol."},{"line_number":23,"context_line":"Guests require a native Ceph client or a NFS client in order to mount the"},{"line_number":24,"context_line":"filesystem."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"When guests access CephFS using the native Ceph protocol, access is"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_e38ad161","line":23,"range":{"start_line":23,"start_character":39,"end_line":23,"end_character":40},"in_reply_to":"7f231b9d_92a93891","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":33,"context_line":"If you choose to use the kernel client rather than the FUSE client, the share"},{"line_number":34,"context_line":"size limits set in manila may not be obeyed."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"And when guests access CephFS through NFS, a NFS-Ganesha server mediates access"},{"line_number":37,"context_line":"to CephFS. The driver enables access control by managing the NFS-Ganesha"},{"line_number":38,"context_line":"server\u0027s exports."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_72ac5c9e","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":44},"updated":"2017-06-18 00:20:08.000000000","message":"nit: an","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":33,"context_line":"If you choose to use the kernel client rather than the FUSE client, the share"},{"line_number":34,"context_line":"size limits set in manila may not be obeyed."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"And when guests access CephFS through NFS, a NFS-Ganesha server mediates access"},{"line_number":37,"context_line":"to CephFS. The driver enables access control by managing the NFS-Ganesha"},{"line_number":38,"context_line":"server\u0027s exports."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_a3ee191f","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":44},"in_reply_to":"7f231b9d_72ac5c9e","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":77,"context_line":"Prerequisites"},{"line_number":78,"context_line":"~~~~~~~~~~~~~"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":".. important:: A manila share backed onto CephFS is only as good as the"},{"line_number":81,"context_line":"               underlying filesystem. Take care when configuring your Ceph"},{"line_number":82,"context_line":"               cluster, and consult the latest guidance on the use of"},{"line_number":83,"context_line":"               CephFS in the Ceph documentation ("}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_52972049","line":80,"range":{"start_line":80,"start_character":37,"end_line":80,"end_character":41},"updated":"2017-06-18 00:20:08.000000000","message":"by?","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":77,"context_line":"Prerequisites"},{"line_number":78,"context_line":"~~~~~~~~~~~~~"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":".. important:: A manila share backed onto CephFS is only as good as the"},{"line_number":81,"context_line":"               underlying filesystem. Take care when configuring your Ceph"},{"line_number":82,"context_line":"               cluster, and consult the latest guidance on the use of"},{"line_number":83,"context_line":"               CephFS in the Ceph documentation ("}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_63f481f1","line":80,"range":{"start_line":80,"start_character":37,"end_line":80,"end_character":41},"in_reply_to":"7f231b9d_52972049","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":504,"context_line":"-----------------------------------------"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"As the guests need direct access to Ceph\u0027s public network, CephFS native"},{"line_number":507,"context_line":"share backend are suitable only in private clouds where guests can be trusted."},{"line_number":508,"context_line":""},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"The :mod:`manila.share.drivers.cephfs.driver` Module"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_f2974c44","line":507,"range":{"start_line":507,"start_character":14,"end_line":507,"end_character":17},"updated":"2017-06-18 00:20:08.000000000","message":"is","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":504,"context_line":"-----------------------------------------"},{"line_number":505,"context_line":""},{"line_number":506,"context_line":"As the guests need direct access to Ceph\u0027s public network, CephFS native"},{"line_number":507,"context_line":"share backend are suitable only in private clouds where guests can be trusted."},{"line_number":508,"context_line":""},{"line_number":509,"context_line":""},{"line_number":510,"context_line":"The :mod:`manila.share.drivers.cephfs.driver` Module"}],"source_content_type":"text/x-rst","patch_set":15,"id":"7f231b9d_43df4568","line":507,"range":{"start_line":507,"start_character":14,"end_line":507,"end_character":17},"in_reply_to":"7f231b9d_f2974c44","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"}],"manila/share/drivers/cephfs/cephfs.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c69c0ae9cd9fc0aeed6775b66453fdf0bdba8cd8","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            execute \u003d ganesha_utils.RootExecutor(execute)"},{"line_number":440,"context_line":"        self.ganesha_host \u003d config_object.cephfs_ganesha_server_ip"},{"line_number":441,"context_line":"        if not self.ganesha_host:"},{"line_number":442,"context_line":"            self.ganesha_host \u003d socket.gethostname()"},{"line_number":443,"context_line":"        kwargs[\u0027tag\u0027] \u003d \u0027-\u0027.join((\u0027CEPHFS\u0027, \u0027Ganesha\u0027, self.ganesha_host))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        self.volume_client \u003d kwargs.pop(\u0027volume_client\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_f3fd123b","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":52},"updated":"2017-02-06 22:21:14.000000000","message":"As we discussed in email, we want IPs rather than hostnames in export locations since the latter may resolve to more than one IP address, even in multiple address families.  I like your suggestion from email, namely to make `cephfs_ganesha_server_ip` config option mandatory, even if the ganesha server is local.\n\nYou also suggested having another bool config option, `cephfs_ganesha_server_is_remote` (default false) to figure out whether the driver needs to use a local or remote Ganesha server.  I suppose you could also just keep things loosely coupled, require the ganesha server username, password, private key always, and not bother with local vs SSHExecutor??","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"88d22931137cec95992c0d831e1596752cc22656","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            execute \u003d ganesha_utils.RootExecutor(execute)"},{"line_number":440,"context_line":"        self.ganesha_host \u003d config_object.cephfs_ganesha_server_ip"},{"line_number":441,"context_line":"        if not self.ganesha_host:"},{"line_number":442,"context_line":"            self.ganesha_host \u003d socket.gethostname()"},{"line_number":443,"context_line":"        kwargs[\u0027tag\u0027] \u003d \u0027-\u0027.join((\u0027CEPHFS\u0027, \u0027Ganesha\u0027, self.ganesha_host))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        self.volume_client \u003d kwargs.pop(\u0027volume_client\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_4503ac43","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":52},"in_reply_to":"1a430d35_f3fd123b","updated":"2017-04-24 09:40:46.000000000","message":"\u003e I suppose you could also just keep things loosely coupled, require the ganesha server username, password, private key always, and not bother with local vs SSHExecutor??\n\nYou mean use SSHExecutor also for managing exports of a local ganesha server? I tried this out in my setup and it worked (so maybe this is proof that SSHExecutor works after all and that we can use this code as is to manage exports of a remote Ganesha server). Normally, ganesha server and its conf files are owned by root. So is it OK for the driver to ssh as root into its host and modify the ganesha conf files? Is it as safe/unsafe as using localexecutor that relies on rootwrap.conf to run only certain commands with elevated privileges on driver\u0027s host?\n\nOf secondary concern, if we\u0027re OK with using SSHExecutor and making ganesha server IP mandatory for a local ganesha server setup, then we\u0027d need to do the following in the upstream cephfs-nfs driver gate,\n*  identify the ganesha server IP (maybe there\u0027s a devstack func that can do this and it\u0027s stored in a env variable? Just $HOST_IP as in http://logs.openstack.org/05/424605/6/experimental/gate-manila-tempest-minimal-dsvm-cephfs-nfs-centos-7-nv/65f829b/logs/devstacklog.txt.gz#_2017-04-23_17_45_45_246 ?)\n* modify sshd_config of the host to ssh as root\n* know the root passwd or have the required permissions for root\u0027s private key file","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"d9348e84adeba47bf2f0c71100038283ab6babed","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            execute \u003d ganesha_utils.RootExecutor(execute)"},{"line_number":440,"context_line":"        self.ganesha_host \u003d config_object.cephfs_ganesha_server_ip"},{"line_number":441,"context_line":"        if not self.ganesha_host:"},{"line_number":442,"context_line":"            self.ganesha_host \u003d socket.gethostname()"},{"line_number":443,"context_line":"        kwargs[\u0027tag\u0027] \u003d \u0027-\u0027.join((\u0027CEPHFS\u0027, \u0027Ganesha\u0027, self.ganesha_host))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        self.volume_client \u003d kwargs.pop(\u0027volume_client\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_d40d1991","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":52},"in_reply_to":"5ff73747_4503ac43","updated":"2017-04-24 22:11:19.000000000","message":"I don\u0027t think we need to rush to change anything right away,\nas I\u0027m happy to merge this patch when we think it\u0027s otherwise ready and add ssh stuff in another iteration.  Both devstack plugin and TripleO can easily control startup of dbus and nfs-ganesha on the local host.\n\nBut we will need this when we want to place the nfs ganesha service and its accompanying dbus on another server, whether virtual or physical.  That isn\u0027t necessarily something we\u0027ll do in Pike, and even if it is, it can be a second iteration.\n\nLet\u0027s look at the ZFS driver and see how it handles ssh to a remote ZFS server (whether physical or virtual).  Does it just ssh in as root, or as some service user that has sudoers control to limit it to root privileges certain commands, etc.","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"cce2f3998af45b84b0d7a1724f96efd3eb837819","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            execute \u003d ganesha_utils.RootExecutor(execute)"},{"line_number":440,"context_line":"        self.ganesha_host \u003d config_object.cephfs_ganesha_server_ip"},{"line_number":441,"context_line":"        if not self.ganesha_host:"},{"line_number":442,"context_line":"            self.ganesha_host \u003d socket.gethostname()"},{"line_number":443,"context_line":"        kwargs[\u0027tag\u0027] \u003d \u0027-\u0027.join((\u0027CEPHFS\u0027, \u0027Ganesha\u0027, self.ganesha_host))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        self.volume_client \u003d kwargs.pop(\u0027volume_client\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_92b018df","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":52},"in_reply_to":"5ff73747_d40d1991","updated":"2017-06-18 00:14:20.000000000","message":"Nice discussion here. Typed a bunch of comments with similar concerns and reread previous reviews to drop them. ZFS does the same thing as Ramana is doing here.. zfs_ssh_username is analogous to cephfs_ganesha_server_username..","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"20bfd3e88ed1a7d9b2c17bf0fa5e004d1dea162f","unresolved":false,"context_lines":[{"line_number":439,"context_line":"            execute \u003d ganesha_utils.RootExecutor(execute)"},{"line_number":440,"context_line":"        self.ganesha_host \u003d config_object.cephfs_ganesha_server_ip"},{"line_number":441,"context_line":"        if not self.ganesha_host:"},{"line_number":442,"context_line":"            self.ganesha_host \u003d socket.gethostname()"},{"line_number":443,"context_line":"        kwargs[\u0027tag\u0027] \u003d \u0027-\u0027.join((\u0027CEPHFS\u0027, \u0027Ganesha\u0027, self.ganesha_host))"},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        self.volume_client \u003d kwargs.pop(\u0027volume_client\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f231b9d_83fe7d68","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":52},"in_reply_to":"7f231b9d_92b018df","updated":"2017-06-19 09:20:57.000000000","message":"Oh! Can you post the links to those discussions? It\u0027d be helpful. Thanks!","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"f824c0e4277d6b81d5cb72b98961ee4663932d27","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                \u0027export_template\u0027: self.export_template}"},{"line_number":459,"context_line":"            return False"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        if _init_helper():"},{"line_number":462,"context_line":"            tagdata \u003d self.shared_data[self.tag]"},{"line_number":463,"context_line":"            self.ganesha \u003d tagdata[\u0027ganesha\u0027]"},{"line_number":464,"context_line":"            self.export_template \u003d tagdata[\u0027export_template\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_11d8301d","line":461,"updated":"2017-01-25 08:38:29.000000000","message":"Need to better understand the need for this function. Copied over from GlusterFS\u0027s Ganesha helper implementation.","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"0f62b1d70fb3614c46cb159bf46f391e07c22015","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                \u0027export_template\u0027: self.export_template}"},{"line_number":459,"context_line":"            return False"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        if _init_helper():"},{"line_number":462,"context_line":"            tagdata \u003d self.shared_data[self.tag]"},{"line_number":463,"context_line":"            self.ganesha \u003d tagdata[\u0027ganesha\u0027]"},{"line_number":464,"context_line":"            self.export_template \u003d tagdata[\u0027export_template\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_925143db","line":461,"in_reply_to":"1a430d35_471d8d72","updated":"2017-02-06 12:37:14.000000000","message":"Got it. Thanks for the explanation.","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"88d22931137cec95992c0d831e1596752cc22656","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                \u0027export_template\u0027: self.export_template}"},{"line_number":459,"context_line":"            return False"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        if _init_helper():"},{"line_number":462,"context_line":"            tagdata \u003d self.shared_data[self.tag]"},{"line_number":463,"context_line":"            self.ganesha \u003d tagdata[\u0027ganesha\u0027]"},{"line_number":464,"context_line":"            self.export_template \u003d tagdata[\u0027export_template\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_f47cb0b6","line":461,"in_reply_to":"1a430d35_471d8d72","updated":"2017-04-24 09:40:46.000000000","message":"Okay. I got rid of this entire def init_helper() and the use of tags. I don\u0027t immediately see the use of tags. Please see PS #8 and let me know what you think.","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":9521,"name":"Csaba Henk","email":"chenk@redhat.com","username":"chenk"},"change_message_id":"61252d598c5b5353f7ab24a4435c5cf5ddbd22f8","unresolved":false,"context_lines":[{"line_number":458,"context_line":"                \u0027export_template\u0027: self.export_template}"},{"line_number":459,"context_line":"            return False"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        if _init_helper():"},{"line_number":462,"context_line":"            tagdata \u003d self.shared_data[self.tag]"},{"line_number":463,"context_line":"            self.ganesha \u003d tagdata[\u0027ganesha\u0027]"},{"line_number":464,"context_line":"            self.export_template \u003d tagdata[\u0027export_template\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a430d35_471d8d72","line":461,"in_reply_to":"5a3905b3_11d8301d","updated":"2017-02-03 22:45:44.000000000","message":"tag is a kind of ad-hoc identifier for the Ganesha instance being managed. It\u0027s primary purpose is to be used in log messages to give a clear indication about the resource the message is reporting on (eg. IP address).\n\nAslo if multiple Ganessha instances are used, tag can be used as internal iidentifier when managing / dispatching to the particular instances.\n\nshared_data is a Gluster specific hack, please forget about it.\n\nThis init helper code is not needed. There is no magic involved :)","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"f824c0e4277d6b81d5cb72b98961ee4663932d27","unresolved":false,"context_lines":[{"line_number":486,"context_line":""},{"line_number":487,"context_line":"    def _fsal_hook(self, base, share, access):"},{"line_number":488,"context_line":"        \"\"\"Callback to create FSAL subblock.\"\"\""},{"line_number":489,"context_line":"        return {}"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _get_export_path(self, share):"},{"line_number":492,"context_line":"        \"\"\"Callback to provide export path.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a3905b3_5430e69e","line":489,"updated":"2017-01-25 08:38:29.000000000","message":"Need to add CEPH FSAL specific options later such `User_Id`, `Secret_Access_Key`. These options would be needed by the Ganesha server if the all powerful Ceph `admin` user ID  is not created in the Ganesha server node.","commit_id":"a94094dc214a62fe2ac991d59deb0eea3467dbb1"}],"manila/share/drivers/cephfs/driver.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"1fa0f6b4ecae9ba49c4b3be4798899536e1835b8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               default\u003d\u0027root\u0027,"},{"line_number":74,"context_line":"               help\u003d\"Remote Ganesha server node\u0027s username.\"),"},{"line_number":75,"context_line":"    cfg.StrOpt(\u0027cephfs_ganesha_path_to_private_key\u0027,"},{"line_number":76,"context_line":"               help\u003d\u0027Path of Manila host\\\u0027s private SSH key file.\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027cephfs_ganesha_server_password\u0027,"},{"line_number":78,"context_line":"               secret\u003dTrue,"},{"line_number":79,"context_line":"               help\u003d\"Remote Ganesha server node\u0027s login password. \""}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_1458e82f","line":76,"range":{"start_line":76,"start_character":20,"end_line":76,"end_character":66},"updated":"2017-04-07 11:01:45.000000000","message":"you could surround in double quotes to avoid escaping the \u0027. You did that below.","commit_id":"e9803ab9b439deff75735ae90cb3f11a3fad96ee"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"787c1e8e3ebed282403b066bbd06885caa75e43b","unresolved":false,"context_lines":[{"line_number":73,"context_line":"               default\u003d\u0027root\u0027,"},{"line_number":74,"context_line":"               help\u003d\"Remote Ganesha server node\u0027s username.\"),"},{"line_number":75,"context_line":"    cfg.StrOpt(\u0027cephfs_ganesha_path_to_private_key\u0027,"},{"line_number":76,"context_line":"               help\u003d\u0027Path of Manila host\\\u0027s private SSH key file.\u0027),"},{"line_number":77,"context_line":"    cfg.StrOpt(\u0027cephfs_ganesha_server_password\u0027,"},{"line_number":78,"context_line":"               secret\u003dTrue,"},{"line_number":79,"context_line":"               help\u003d\"Remote Ganesha server node\u0027s login password. \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_7f1e4271","line":76,"range":{"start_line":76,"start_character":20,"end_line":76,"end_character":66},"in_reply_to":"bff0334d_1458e82f","updated":"2017-04-24 05:06:40.000000000","message":"Done","commit_id":"e9803ab9b439deff75735ae90cb3f11a3fad96ee"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"1fa0f6b4ecae9ba49c4b3be4798899536e1835b8","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            super(NFSProtocolHelper, self).init_helper()"},{"line_number":459,"context_line":"            self.shared_data[self.tag] \u003d {"},{"line_number":460,"context_line":"                \u0027ganesha\u0027: self.ganesha,"},{"line_number":461,"context_line":"                \u0027export_template\u0027: self.export_template}"},{"line_number":462,"context_line":"            return False"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        if _init_helper():"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_9464f8e5","line":461,"range":{"start_line":461,"start_character":55,"end_line":461,"end_character":56},"updated":"2017-04-07 11:01:45.000000000","message":"this wrapping could be improved by moving it to a new line below. When doing so, please don\u0027t forget the comma.","commit_id":"e9803ab9b439deff75735ae90cb3f11a3fad96ee"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"787c1e8e3ebed282403b066bbd06885caa75e43b","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            super(NFSProtocolHelper, self).init_helper()"},{"line_number":459,"context_line":"            self.shared_data[self.tag] \u003d {"},{"line_number":460,"context_line":"                \u0027ganesha\u0027: self.ganesha,"},{"line_number":461,"context_line":"                \u0027export_template\u0027: self.export_template}"},{"line_number":462,"context_line":"            return False"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        if _init_helper():"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_cbd23335","line":461,"range":{"start_line":461,"start_character":55,"end_line":461,"end_character":56},"in_reply_to":"bff0334d_9464f8e5","updated":"2017-04-24 05:06:40.000000000","message":"This code wasn\u0027t required after all (based on Csaba\u0027s comments on PS #3).","commit_id":"e9803ab9b439deff75735ae90cb3f11a3fad96ee"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"1fa0f6b4ecae9ba49c4b3be4798899536e1835b8","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":472,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        LOG.info(_LI(\"Calculated export location for share %(id)s: %(loc)s\"),"},{"line_number":475,"context_line":"                 {\"id\": share[\u0027id\u0027], \"loc\": export_location})"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_349f6cb5","line":474,"range":{"start_line":474,"start_character":17,"end_line":474,"end_character":20},"updated":"2017-04-07 11:01:45.000000000","message":"no need to use this anymore","commit_id":"e9803ab9b439deff75735ae90cb3f11a3fad96ee"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"787c1e8e3ebed282403b066bbd06885caa75e43b","unresolved":false,"context_lines":[{"line_number":471,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":472,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        LOG.info(_LI(\"Calculated export location for share %(id)s: %(loc)s\"),"},{"line_number":475,"context_line":"                 {\"id\": share[\u0027id\u0027], \"loc\": export_location})"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":5,"id":"5ff73747_3f18ba7f","line":474,"range":{"start_line":474,"start_character":17,"end_line":474,"end_character":20},"in_reply_to":"bff0334d_349f6cb5","updated":"2017-04-24 05:06:40.000000000","message":"Done","commit_id":"e9803ab9b439deff75735ae90cb3f11a3fad96ee"},{"author":{"_account_id":7582,"name":"Jan Provaznik","email":"jan.provaznik@gmail.com","username":"jprovazn"},"change_message_id":"293d9cefe7e82ea367b4e9f7797e63b2bde79f79","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                                                **kwargs)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def get_export_locations(self, share, cephfs_volume):"},{"line_number":457,"context_line":"        export_location \u003d \"{server_address}:{path}\".format("},{"line_number":458,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":459,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":460,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"df140735_4fe703e6","line":457,"range":{"start_line":457,"start_character":8,"end_line":457,"end_character":23},"updated":"2017-05-31 12:15:32.000000000","message":"It should be possible to set export_location\u0027s IP independently on ganesha IP. If a virtual IP is used for accessing ganesha server (and ganesha server runs on the same node as manila-share), then this driver sets SSHExecutor (line 440 above) instead of RootExecutor. It would be nice to add e.g. cephfs_export_location_ip variable and use it primarily for export_location, if it\u0027s not set then fall back to self.ganesha_host.","commit_id":"53068812f08f16f071ecc21a6da85e8317d0a610"},{"author":{"_account_id":7582,"name":"Jan Provaznik","email":"jan.provaznik@gmail.com","username":"jprovazn"},"change_message_id":"e9ba404b7226fba8ed69d86b2f2034031d297780","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def get_export_locations(self, share, cephfs_volume):"},{"line_number":457,"context_line":"        export_location \u003d \"{server_address}:{path}\".format("},{"line_number":458,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":459,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        LOG.info(\"Calculated export location for share %(id)s: %(loc)s\" %"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf091321_e513cfb7","line":458,"updated":"2017-06-08 12:21:43.000000000","message":"It might be my previous comment from patchset9 (https://review.openstack.org/#/c/424605/9/manila/share/drivers/cephfs/driver.py) got lost during rebases, but I think it\u0027s still valid:\nsupposing that a virtual IP is used to access nfs-ganesha service it\u0027s not possible to set this VIP *without* using sshexecuter (line 440 above) at the same time. IOW I can\u0027t use custom IP and not use ssh at the same time, which is exactly TripleO use case.","commit_id":"de7bdc6d4d2a4969cc11e25097f3b911c0a194dc"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"48c5896b3a22770ff4fdb62061b3ef3a91ac50e7","unresolved":false,"context_lines":[{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def get_export_locations(self, share, cephfs_volume):"},{"line_number":457,"context_line":"        export_location \u003d \"{server_address}:{path}\".format("},{"line_number":458,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":459,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        LOG.info(\"Calculated export location for share %(id)s: %(loc)s\" %"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_02f29206","line":458,"in_reply_to":"bf091321_e513cfb7","updated":"2017-06-16 09:38:00.000000000","message":"Done","commit_id":"de7bdc6d4d2a4969cc11e25097f3b911c0a194dc"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"bb0792b25ddb2e78a9dd49a1e40542ab735655b6","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":459,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        LOG.info(\"Calculated export location for share %(id)s: %(loc)s\" %"},{"line_number":462,"context_line":"                 {\"id\": share[\u0027id\u0027], \"loc\": export_location})"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":14,"id":"df140735_57ab9173","line":461,"range":{"start_line":461,"start_character":72,"end_line":461,"end_character":73},"updated":"2017-06-05 19:15:14.000000000","message":"Use \",\".","commit_id":"de7bdc6d4d2a4969cc11e25097f3b911c0a194dc"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"48c5896b3a22770ff4fdb62061b3ef3a91ac50e7","unresolved":false,"context_lines":[{"line_number":458,"context_line":"            server_address\u003dself.ganesha_host,"},{"line_number":459,"context_line":"            path\u003dcephfs_volume[\u0027mount_path\u0027])"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        LOG.info(\"Calculated export location for share %(id)s: %(loc)s\" %"},{"line_number":462,"context_line":"                 {\"id\": share[\u0027id\u0027], \"loc\": export_location})"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f231b9d_628b8667","line":461,"range":{"start_line":461,"start_character":72,"end_line":461,"end_character":73},"in_reply_to":"df140735_57ab9173","updated":"2017-06-16 09:38:00.000000000","message":"Done","commit_id":"de7bdc6d4d2a4969cc11e25097f3b911c0a194dc"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        elif self.configuration.cephfs_protocol_helper_type.upper() \u003d\u003d \"NFS\":"},{"line_number":119,"context_line":"            protocol_helper_class \u003d getattr("},{"line_number":120,"context_line":"                sys.modules[__name__], \u0027NFSProtocolHelper\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        self.protocol_helper \u003d protocol_helper_class("},{"line_number":123,"context_line":"            self._execute,"},{"line_number":124,"context_line":"            self.configuration,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f231b9d_12c4083f","line":121,"range":{"start_line":121,"start_character":0,"end_line":121,"end_character":0},"updated":"2017-06-18 00:20:08.000000000","message":"else?\n\nsemantically not necessary, because oslo.config enforces that one always specifies a string from the \"choices\" field.. so, line 118 should just be an \"else\"","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        elif self.configuration.cephfs_protocol_helper_type.upper() \u003d\u003d \"NFS\":"},{"line_number":119,"context_line":"            protocol_helper_class \u003d getattr("},{"line_number":120,"context_line":"                sys.modules[__name__], \u0027NFSProtocolHelper\u0027)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        self.protocol_helper \u003d protocol_helper_class("},{"line_number":123,"context_line":"            self._execute,"},{"line_number":124,"context_line":"            self.configuration,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f231b9d_63cda1b5","line":121,"range":{"start_line":121,"start_character":0,"end_line":121,"end_character":0},"in_reply_to":"7f231b9d_12c4083f","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"}],"releasenotes/notes/cephfs-add-nfs-protocol-support-44764094c9d784d8.yaml":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add NFS protocol support for shares backed by CephFS."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"7f231b9d_72857c06","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"updated":"2017-06-18 00:20:08.000000000","message":"not necessary","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add NFS protocol support for shares backed by CephFS."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"7f231b9d_c36235ae","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":5},"in_reply_to":"7f231b9d_72857c06","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2839c6a0f7548221802df4144d13c5b17c2ed10","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add NFS protocol support for shares backed by CephFS."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"7f231b9d_528040f5","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":7},"updated":"2017-06-18 00:20:08.000000000","message":"Added","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cae0d6d88a0dd0a476e94620ee90ac4d7e0fc591","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add NFS protocol support for shares backed by CephFS."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"7f231b9d_a3d7394b","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":7},"in_reply_to":"7f231b9d_528040f5","updated":"2017-06-19 09:11:08.000000000","message":"Done","commit_id":"7b8a8370837f2627579abddf30c2100fa400626a"}]}
