/ceph-iscsi-cli

configshell based cli for managing ceph/iscsi gateways built using LIO

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

ceph-iscsi-cli installs a targetcli-like interface to allow multiple ceph/iscsi
gateways to be managed from a single interface. The CLI interfaces with the API
exposed in the rbd-target-gw daemon running on each gateway.

Here's an example of the shell interface the gwcli tool provides;

/> ls
o- / .................................................................................. [...]
  o- clusters ................................................................. [Clusters: 1]
  | o- ceph ..................................................................... [HEALTH_OK]
  |   o- pools ................................................................... [Pools: 3]
  |   | o- ec ........................................ [(2+1), Commit: 0b/40G (0%), Used: 0b]
  |   | o- iscsi ..................................... [(x3), Commit: 0b/20G (0%), Used: 18b]
  |   | o- rbd ....................................... [(x3), Commit: 8G/20G (40%), Used: 5K]
  |   o- topology ......................................................... [OSDs: 3,MONs: 3]
  o- disks ................................................................... [8G, Disks: 5]
  | o- rbd.disk_1 ............................................................. [disk_1 (1G)]
  | o- rbd.disk_2 ............................................................. [disk_2 (2G)]
  | o- rbd.disk_3 ............................................................. [disk_3 (2G)]
  | o- rbd.disk_4 ............................................................. [disk_4 (1G)]
  | o- rbd.disk_5 ............................................................. [disk_5 (2G)]
  o- iscsi-target .............................................................. [Targets: 1]
    o- iqn.2003-01.com.redhat.iscsi-gw:ceph-gw ................................ [Gateways: 2]
      o- gateways ..................................................... [Up: 2/2, Portals: 2]
      | o- rh7-gw1 .................................................... [192.168.122.69 (UP)]
      | o- rh7-gw2 ................................................... [192.168.122.104 (UP)]
      o- hosts ................................................................... [Hosts: 2]
        o- iqn.1994-05.com.redhat:myhost1 ........................ [Auth: None, Disks: 1(1G)]
        | o- lun 0 ......................................... [rbd.disk_1(1G), Owner: rh7-gw2]
        o- iqn.1994-05.com.redhat:rh7-client .......... [LOGGED-IN, Auth: CHAP, Disks: 1(2G)]
          o- lun 0 ......................................... [rbd.disk_5(2G), Owner: rh7-gw2]


The rbd-target-api daemon utilises the flask's internal development server to
provide the REST api. It is normally not used in a production context, but
given this specific use case it provides a simple way to provide an admin
interface - at least for the first release!

The API has been tested with Firefox RESTclient add-on with https (based on a common
self-signed certificate). With the certificate in place on each gateway you can
add basic auth credentials to match the local api configuration in the RESTclient
and use the client as follows;

Add a Header content type for application/x-www-form-urlencoded
METHOD: PUT        URL: https://192.168.122.69:5001/api/gateway/rh7-gw1
select the urlencoded content type and the basic auth credentials
add the required variables to the body section in the client ui
  eg. ip_address=192.168.122.69
Click 'SEND'


Curl Examples
If the UI is not your thing, curl probably is! Here's an example of using
curl to create a gateway node.

curl --insecure --user admin:admin -d "ip_address=192.168.122.104" \
     -X PUT https://192.168.122.69:5001/api/gateway/rh7-gw2