openstack中使用curl命令获取token并访问底层的API

  在oepnstack中,访问所提供的服务(如创建虚拟机等)首先需要获取认证的token,也就是一个凭证,获取的方式是通过向OpenStack Identity模块发送一个带负载的认证请求,通常负载中携带的信息是用户名和密码。当访问底层提供的服务的时候,需要将token封装在X-Auth-Token头部中,如果需要访问openstack提供的多个服务,需要为每个服务提供一个token,值得注意的是,每个token都有一个期满时间,过了这个时间,token就会自动失效。下面将结合实例详细阐述使用linux的curl命令发送http请求来获取token并访问nova keypairs服务。

使用之前需要使用devstack/openrc 设置OS_PASSWARD,OS_USERNAME和OS_PROJECTNAME(需要将其封装在http请求的头部字段中)

1、获取token

在终端中执行:curl -s -X POST $OS_AUTH_URL/tokens -H "Content-Type: application/json" -d ‘{"auth": {"tenantName": "‘"$OS_PROJECT_NAME"‘", "passwordCredentials": {"username": "‘"$OS_USERNAME"‘", "password": "‘"$OS_PASSWORD"‘"}}}‘ | python -m json.tool

返回结果如下:

由于篇幅的原因,不能一次将返回结果返回,下面就可以看到返回结果中的token部分:

此时,我们可以看到expires后面的就是期满时间,为2016-10-22T02:23:27Z,id后面的就是token,为b0cad0d8ab3b478683180985d06c437a。我们可以直接将token封装在http头部字段通过curl命令发送,也可以将其export为环境变量,然后直接封装环境变量,两者本质上是一样的,在这里我们使用export会方便一些,如下所示:

2、发送API请求访问nova keypairs服务

通过使用nova --help,我们可以看到python-novaclient提供了对keypairs访问的四种命令,分别是keypair-add,keypair-delete,keypair-list和keypair-show,这个和官网上的API一一对应,如下所示:

可以看到,如果要新建一个keypair,需要使用post命令。我们继续使用nova help keypair-add命令可以看到该命令的详细使用方法,如下所示:

例如我们可以通过nova keypair-add keypair-d20a3d59-9433-4b79-8726-20b431d89c78创建一个名为keypair-d20a3d59-9433-4b79-8726-20b431d89c78的keypair,为了看到更多的信息,我们可以在nova后面添加--debug参数,此时整个创建keypair的过程会在终端中显示出来,(注意python-novaclient封装了我们的http请求并使用curl发送http请求),截取其中的片段来分析一下:

这是获取的token

我们可以看到发送了一个post命令,里面封装了Accept,User-Agent,OpenStack-API-Version,X-OpenStack-Nova-API-Version,X-Auth-Token和Content-Type头部字段(-H就是封装头部字段的意思),X-Auth-Toekn封装的就是我们之前获取的token。后面的keypair字段表示http的Body,对应用户的数据,keypair里面有type和name字段,其中name字段就是我们之前nova --debug keypair-add keypair-d20a3d59-9433-4b79-8726-20b431d89c78命令对应的keypair的名称。这与官方给出的文档一致,如下所示:

综上所述,我们在使用curl命令获取token之后,export一下,可以自己使用curl命令访问对应的服务,例如再创建一个keypair:

curl -g -i -X POST http://192.168.140.133:8774/v2.1/os-keypairs -H "Accept: application/json" -H "User-Agent: python-novaclient" -H "OpenStack-API-Version: compute 2.37" -H "X-OpenStack-Nova-API-Version: 2.37" -H "X-Auth-Token: $OS_TOKEN" -H "Content-Type: application/json" -d ‘{"keypair": {"type": "ssh", "name": "keypair-d20a3d59-9433-4b79-8726-20b431d89c12"}}‘

其中name后面的字段需要改成一个和之前创建的keypair名称不同的名称,这里直接将后两位改成了12,然后将X-Auth-Token后面的字段改成我们export的OS_TOKEN,前面加一个$,表示系统环境变量。

结果如下所示:

可以看到我们已经创建了一个名为keypair-d20a3d59-9433-4b79-8726-20b431d89c12的keypair,之后为了方便观看,可以使用nova keypair-list查看所有我们创建的kyepair,如下所示:

至此,整个使用curl命令访问openstack服务的过程已经完成。

总结一下:

首先需要使用curl命令获取token,然后访问对应的服务时需要将token封装在http的X-Auth-Token头部字段中,并按照官方API的使用讲解封装其他的头部或者Body(对应post),便可以访问openstack服务了。还有一点,通常http协议的GET对应list服务,POST对应create服务,PUT对应update服务,DELETE对应delete服务。

时间: 2024-05-02 02:58:06

openstack中使用curl命令获取token并访问底层的API的相关文章

linux中shell curl命令获取http状态码

通过curl的-w参数我们可以自定义curl的输出,%{http_code}代表http状态码 代码如下 复制代码 # curl -I -m 10 -o /dev/null -s -w %{http_code}  www.111cn.net 上面的输出是不含换行的,如果需要换行的话,加上\n 代码如下 复制代码 # curl -I -m 10 -o /dev/null -s -w %{http_code}  www.111cn.net 200# curl -I -m 10 -o /dev/nul

linux中shell curl命令获取http状态码--------强大的网络传输工具

文章来源:http://dbajun.iteye.com/blog/1813801 curl命令详解:http://blog.sina.com.cn/s/blog_94cf845f0102w8vt.html curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类似的工具还有wget. 常用参数 curl命令参数很多,这里只列出我曾经用过.特别是在shell脚本中

curl 命令获取网络网站的响应码

curl命令参数很多,博主很多都没有用过.今天发现可以用-w参数挺好用的. -w:--write-out,作用就是输出点什么.curl的-w参数用于在一次完整且成功的操作后输出指定格式的内容到标准输出.输出格式由普通字符串和任意数量的变量组成,输出变量需要按照%{variable_name}的格式,如果需要输出%,double一下即可,即%%,同时,\n是换行,\r是回车,\t是TAB.curl会用合适的值来替代输出格式中的变量,所有可用变量如下: url_effective 最终获取的url地

Linux系统中的curl命令使用教程

这篇文章主要介绍了Linux系统中的curl命令使用教程,是Linux入门学习中的基础知识,需要的朋友可以参考下. 命令:curl在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具.语法:# curl [option] [url]常见参数:-A/--user-agent <string>              设置用户代理发送给服务器-b/--cookie

openstack中利用screen命令重启服务

在openstack的老一点的版本中,通常使用./rejoin-stack.sh重新启动所有指定的服务,在最新的master分支中,并没有rejoin-stack.sh,那么是不是重启服务只能先./unstack.sh,然后再./stack.sh.当然不是了,这样极其浪费时间.事实上,我们可以通过窗口管理器管理每一个已经启动的openstack服务,在使用devstack安装部署openstack后,多个openstack服务进程共享一个物理终端的窗口管理器,这个screen session里包

WPF中DataGrid双击命令获取选中的ViewModel

xaml <DataGrid x:Name="myGrd" ItemsSource="{Binding SearchItems}" SelectedItem="{Binding SelectedItem}" SelectionMode="Single" SelectionUnit="FullRow"> <i:Interaction.Triggers> <i:EventTrigg

cmd - 使用curl命令的注意点

前言 最近在cmd中使用curl命令来测试rest api,发现有不少问题,这里记录一下. 在cmd中使用curl命令的注意事项 json不能由单引号包括起来 json数据里的双引号要用反斜杠\转义 json数据里不能带有空格 如果想要在json数据里使用空格则必须用双引号将整个json数据包括起来 Content-type要由双引号包括起来 比如下边的例子就是正确的格式: curl -X POST localhost:8080/employees -H "Content-type:applic

curl命令大全

curl 命令行工具的使用及命令参数说明 curl是一个开源的用于数据传输的命令行工具与库,它使用URL语法格式,支持众多传输协议,包括:HTTP.HTTPS.FTP.FTPS.GOPHER.TFTP.SCP.SFTP.SMB.TELNET.DICT.LDAP.LDAPS.FILE.IMAP.SMTP.POP3.RTSP和RTMP.curl库提供了很多强大的功能,你可以利用它来进行HTTP/HTTPS请求.上传/下载文件等,且支持Cookie.认证.代理.限速等. 1. curl的使用 1.1

shell脚本中常用的命令:wget、curl、ss、lsof、nmap、nc、netstat、telnet

shell脚本中常用的命令:wget.curl.ss.lsof.nmap.nc.netstat.telnet 实验环境说明: (1)远程nginx服务器IP:192.169.5.136,nginx服务使用的端口是80: (2)本地ceshiji的IP: 192.169.5.121 在服务器本地监控服务端口常见命令:netstat.ss.lsof(简称三'S') 举例说明常用命令的选项: (1)[[email protected] ~]# netstat -lnp |grep nginx tcp