<commit_before>### Ucloud Python SDK and Command-Line Tool

UcloudClient is a python sdk and a command-line client for Ucloud that brings
the command set for Uhost, Unet, Umon APIs together in a single shell with a
uniform command structure.
welcome to contribute to this tools.		
feel free to contact me if you find any bugs or have good advices.

#### 一、设计理念
这个项目包含python sdk 和 命令行工具,覆盖了UHOST,UNET,UMON这三大资源管理,以及UDISK两个API.SDK设计上也是按前面三大资源来做区分.
由于一直有研究openstack,发现它的命令行做得很不错,所以这里命令行则是参考了openstack 命令行工具的资源管理命令。

##### 1.1 SDK方法归类
现在有host,net,mon,disk三种资源：
基本上每种资源都有以下五个操作:

1. list:查询本类所有的创建的资源,输出应该是列表,包含资源名称和ID等重要信息.    
2. show:通过ID查询本类资源的某个创建资源的详细信息.    
3. CUD:create, update, delete. 增删改三个操作.

###### 1.1.1 uhost具体方法：

    ['attach_disk', 'create', 'create_image', 'create_snapshot',
    'delete_image', 'detach_disk', 'get', 'get_image', 'get_price',
    'get_vnc', 'list_snapshot', 'modify_name', 'modify_tag', 'reboot',
    'reinstall', 'reset_password', 'resize', 'start', 'stop', 'terminate']

###### 1.1.2 unet具体方法：

    'eip_bandwidth_modify', 'eip_bind', 'eip_create', 'eip_get',
    'eip_price_get', 'eip_release', 'eip_unbind', 'eip_update',
    'eip_weight_modify', 'sec_creat', 'sec_delete', 'sec_get', 'sec_grant',
    'sec_reource_get', 'sec_update', 'vip_allocate', 'vip_get', 'vip_release']

###### 1.1.3 umon具体方法：

    ['metric_get']

###### 1.1.4 udisk具体方法：

    ['get', 'list']

##### 1.2 命令行操作分类：
在命令行下，也是按资源分类，然后再到资源操作，具体可以留意下面的命令行操作帮助。另外，
命令行增加下面的功能：

1. 命令可以加 "--debug" 来查看操作的关键路径的打印信息.
2. 命令可以加 "--timming" 来获得执行命令发送http请求所花费的时间.

#### 二、SDK的安装与使用:

本项目已经打包好放到python社区的软件仓库里面了，可以通过pip或者easy_install 来进行安装。
本项目基于python2.7版本进行开发，同时也考虑python3的兼容，但没做python3的兼容测试。
本项目有了第三方的依赖包，安装时会自动进行依赖安装，依赖如下：

    PrettyTable>=0.7,<0.8
    six>=1.9.0
软件链接：[https://pypi.python.org/pypi/ucloudclient](https://pypi.python.org/pypi/ucloudclient)

##### 2.1 直接通过pip(或者easy_install)安装：

	#pip install ucloudclient

##### 2.2 SDK使用样例：

    from ucloudclient.client import Client as uclient
    client = uclient(base_url, public_key, private_key)
    uhosts = client.uhost.get(region="us-west-01")
    print uhosts

output:

    {
        u'Action': u'DescribeUHostInstanceResponse',
        u'TotalCount': 1,
        u'RetCode': 0,
        u'UHostSet': [
            {
                u'Remark': u'',
                u'Tag': u'Default',
                u'Name': u'yan-1',
                u'State': u'Running',
                u'IPSet': [
                    {
                        u'IP': u'10.11.1.126',
                        u'Type': u'Private'
                    },
                    {
                        u'IPId': u'eip-yci4qr',
                        u'IP': u'172.16.58.3',
                        u'Bandwidth': 2,
                        u'Type': u'International'
                    }
                ],
                u'DiskSet': [
                    {
                        u'Type': u'Boot',
                        u'Drive': u'/dev/sda',
                        u'DiskId': u'ce3b1751-d837-4949-9c73-29368b7fe820',
                        u'Size': 20
                    }
                ],
                u'CPU': 1,
                u'OsName': u'Ubuntu14.0464\u4f4d',
                u'BasicImageId': u'uimage-nhwrqn',
                u'ImageId': u'ce3b1751-d837-4949-9c73-29368b7fe820',
                u'ExpireTime': 1429632272,
                u'UHostType': u'Normal',
                u'UHostId': u'uhost-4dmzop',
                u'NetworkState': u'Connected',
                u'ChargeType': u'Month',
                u'Memory': 2048,
                u'OsType': u'Linux',
                u'CreateTime': 1426953872,
                u'BasicImageName': u'Ubuntu14.0464\u4f4d'
            }
        ]
    }

#### 2.3 在linux环境下的命令行使用:
使用之前,先编辑下uclud.rc文件,然后导入环境变量,接下来的命令就不用输入你的认证信息了.

	# cat ucloud.rc
	export UCLOUD_REGION="cn-north-03"
	export UCLOUD_URL="https://api.ucloud.cn"
	export UCLOUD_PUBKEY="asdf"
	export UCLOUD_PRIKEY="asdf"
	export PS1='[\u@\h \W(ucloud)]\$ '
	
	# source ucloud.rc

命令帮助:

    # ucloud help

    usage: ucloud [--debug] [--timing] <subcommand> ...

    Command line interface for ucloud

    Positional arguments:
      <subcommand>
        udisk-list               get all udisks list
        udisk-show               show details of a udisk
        uhost-attach-disk        attach a disk to a host
        uhost-create             boot a host
        uhost-create-image       create an image from a given host
        uhost-create-snapshot    create a snapshot from a host
        uhost-delete-image       delete an image by id
        uhost-detach-disk        deattach a disk to a host
        uhost-get-price          get price of given type of host/s
        uhost-get-vnc            get a host's vnc connection information
        uhost-image-list         list all images
        uhost-image-show         show image details
        uhost-list               list uhosts<commit_msg>add auto bash completion instruction in README.md<commit_after>### Ucloud Python SDK and Command-Line Tool

UcloudClient is a python sdk and a command-line client for Ucloud that brings
the command set for Uhost, Unet, Umon APIs together in a single shell with a
uniform command structure.
welcome to contribute to this tools.		
feel free to contact me if you find any bugs or have good advices.

#### 一、设计理念
这个项目包含python sdk 和 命令行工具,覆盖了UHOST,UNET,UMON这三大资源管理,以及UDISK两个API.SDK设计上也是按前面三大资源来做区分.
由于一直有研究openstack,发现它的命令行做得很不错,所以这里命令行则是参考了openstack 命令行工具的资源管理命令。

##### 1.1 SDK方法归类
现在有host,net,mon,disk三种资源：
基本上每种资源都有以下五个操作:

1. list:查询本类所有的创建的资源,输出应该是列表,包含资源名称和ID等重要信息.    
2. show:通过ID查询本类资源的某个创建资源的详细信息.    
3. CUD:create, update, delete. 增删改三个操作.

###### 1.1.1 uhost具体方法：

    ['attach_disk', 'create', 'create_image', 'create_snapshot',
    'delete_image', 'detach_disk', 'get', 'get_image', 'get_price',
    'get_vnc', 'list_snapshot', 'modify_name', 'modify_tag', 'reboot',
    'reinstall', 'reset_password', 'resize', 'start', 'stop', 'terminate']

###### 1.1.2 unet具体方法：

    'eip_bandwidth_modify', 'eip_bind', 'eip_create', 'eip_get',
    'eip_price_get', 'eip_release', 'eip_unbind', 'eip_update',
    'eip_weight_modify', 'sec_creat', 'sec_delete', 'sec_get', 'sec_grant',
    'sec_reource_get', 'sec_update', 'vip_allocate', 'vip_get', 'vip_release']

###### 1.1.3 umon具体方法：

    ['metric_get']

###### 1.1.4 udisk具体方法：

    ['get', 'list']

##### 1.2 命令行操作分类：
在命令行下，也是按资源分类，然后再到资源操作，具体可以留意下面的命令行操作帮助。另外，
命令行增加下面的功能：

1. 命令可以加 "--debug" 来查看操作的关键路径的打印信息.
2. 命令可以加 "--timming" 来获得执行命令发送http请求所花费的时间.

#### 二、SDK的安装与使用:

本项目已经打包好放到python社区的软件仓库里面了，可以通过pip或者easy_install 来进行安装。
本项目基于python2.7版本进行开发，同时也考虑python3的兼容，但没做python3的兼容测试。
本项目有了第三方的依赖包，安装时会自动进行依赖安装，依赖如下：

    PrettyTable>=0.7,<0.8
    six>=1.9.0
软件链接：[https://pypi.python.org/pypi/ucloudclient](https://pypi.python.org/pypi/ucloudclient)

##### 2.1 直接通过pip(或者easy_install)安装：

	#pip install ucloudclient

##### 2.2 SDK使用样例：

    from ucloudclient.client import Client as uclient
    client = uclient(base_url, public_key, private_key)
    uhosts = client.uhost.get(region="us-west-01")
    print uhosts

output:

    {
        u'Action': u'DescribeUHostInstanceResponse',
        u'TotalCount': 1,
        u'RetCode': 0,
        u'UHostSet': [
            {
                u'Remark': u'',
                u'Tag': u'Default',
                u'Name': u'yan-1',
                u'State': u'Running',
                u'IPSet': [
                    {
                        u'IP': u'10.11.1.126',
                        u'Type': u'Private'
                    },
                    {
                        u'IPId': u'eip-yci4qr',
                        u'IP': u'172.16.58.3',
                        u'Bandwidth': 2,
                        u'Type': u'International'
                    }
                ],
                u'DiskSet': [
                    {
                        u'Type': u'Boot',
                        u'Drive': u'/dev/sda',
                        u'DiskId': u'ce3b1751-d837-4949-9c73-29368b7fe820',
                        u'Size': 20
                    }
                ],
                u'CPU': 1,
                u'OsName': u'Ubuntu14.0464\u4f4d',
                u'BasicImageId': u'uimage-nhwrqn',
                u'ImageId': u'ce3b1751-d837-4949-9c73-29368b7fe820',
                u'ExpireTime': 1429632272,
                u'UHostType': u'Normal',
                u'UHostId': u'uhost-4dmzop',
                u'NetworkState': u'Connected',
                u'ChargeType': u'Month',
                u'Memory': 2048,
                u'OsType': u'Linux',
                u'CreateTime': 1426953872,
                u'BasicImageName': u'Ubuntu14.0464\u4f4d'
            }
        ]
    }

#### 2.3 在linux环境下的命令行使用:
使用之前,先编辑下uclud.rc文件,然后导入环境变量,接下来的命令就不用输入你的认证信息了.

	# cat ucloud.rc
	export UCLOUD_REGION="cn-north-03"
	export UCLOUD_URL="https://api.ucloud.cn"
	export UCLOUD_PUBKEY="asdf"
	export UCLOUD_PRIKEY="asdf"
	export PS1='[\u@\h \W(ucloud)]\$ '
	
	# source ucloud.rc

命令行写了使用TAB自动完成命令的功能，只需要如下操作即可自动完成命令。
	#complete -W "`ucloud bash-completion`" ucloud

命令帮助:

    # ucloud help

    usage: ucloud [--debug] [--timing] <subcommand> ...

    Command line interface for ucloud

    Positional arguments:
      <subcommand>
        udisk-list               get all udisks list
        udisk-show               show details of a udisk
        uhost-attach-disk        attach a disk to a host
        uhost-create             boot a host
        uhost-create-image       create an image from a given host
        uhost-create-snapshot    create a snapshot from a host
        uhost-delete-image       delete an image by id
        uhost-detach-disk        deattach a disk to a host
        uhost-get-price          get price of given type of host/s
        uhost-get-vnc            get a host's vnc connection information
        uhost-image-list         list all images
        uhost-image-show         show image details
        uhost-list               list uhosts
{'fraction_non_alphanumeric': 0.12450119712689545, 'fraction_numerical': 0.03112529928172386, 'mean_word_length': 2.0638753056234718, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 11, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 4, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '35400', 'n_tokens_mistral': 4301, 'n_tokens_neox': 4275, 'n_words': 695}