2014.09.30

来源:互联网 发布:kindle语音阅读软件 编辑:程序博客网 时间:2024/05/04 05:16

昨晚睡得挺晚的,妈蛋,想想大家都tmd的要结婚了,就剩我一个大屌丝,不爽,想找个妹子聊,没有,蛋疼,故意不睡,高血压又上来了,没休息好,今天早上抢小米手环没抢到,妈蛋,领导还不走,没法提前下班。。。

1. nova 有直接修改hostname的cli,我想调一下,看看它是怎么运行的

nova rename    

usage: nova rename <server> <name>

Rename a server.
Positional arguments
<server>
Name (old name) or ID of server.

<name>
New name for the server.

比如:nova rename old_server_name new_server_name


@utils.arg('server', metavar='<server>',
           help=_('Name (old name) or ID of server.'))
@utils.arg('name', metavar='<name>', help=_('New name for the server.'))
def do_rename(cs, args):
    """Rename a server."""
    _find_server(cs, args.server).update(name=args.name)

每个函数上面都有这个@。。。,感觉应该是命令如何使用的,具体是怎么工作的,我不了解


1.  novaclient/v1_1.shell.py      1350    def do_rename(cs,args):

def do_rename(cs, args):
    """Rename a server."""
    _find_server(cs, args.server).update(name=args.name)


2. novaclient/v1_1.shell.py      1666

def _find_server(cs, server): 
    """Get a server by name or ID."""
    return utils.find_resource(cs.servers, server)


3. novaclient/utils.py   205

def find_resource(manager, name_or_id, **find_args):       manager= <novaclient.v1_1.servers.ServerManager object at 0x353f310>  name_or_id=lihao-123

1) return manager.get(int(name_or_id))   # try to get entity as integer id  失败

2)tmp_id = strutils.safe_encode(name_or_id)  # now try to get entity as uuid 也失败,因为我们传进的是server name

     uuid.UUID(tmp_id)

3) return manager.find(human_id=name_or_id, **find_args)    成功,通过human-id,就是人类的命名,就是server_name,然后返回这个server的信息(对象)

4. novaclient/base.py   138        def find(self, **kwargs):

1)matches = self.findall(**kwargs) 查询是否有何kwargs名字相同的server

2)返回0个,出错,返回>=2个也出错,只有返回1个的时候正确,并返回这一个server的信息



5. novaclient/base.py   148   def findall(self, **kwargs):     kwargs = {'human_id': u'lihao-123'}

1)非detail的  listing = self.list(**list_kwargs)    list_kwargs= {'detailed': False}

2)查询得到的所有list中,是否有kwargs一样名字的。有则返回那个server的粗略信息。


6. novaclient/base.py  63        def _list(self, url, response_key, obj_class=None, body=None):   url=/servers ,response_key=servers ,其余两个为none

1)_resp, body = self.api.client.get(url)           

# url = /servers,但是到了底层就变为 http://192.168.39.78:8774/v2/f7f0411a6a654f7c814c5da889aba647/servers

#get u'http://192.168.39.78:8774/v2/f7f0411a6a654f7c814c5da889aba647/servers'  通过rest api获得了所有的虚机信息(虚机的基本信息,和虚机详细信息的链接)

2) 将这些查询到的server信息,写入到novaclient的缓存中,/root/.novaclient/XXXX 具体用意不了解


7. novaclient/v1_1/shell.py   update(name=args.name) 1350    name = ppppp

2-6分析完了前一个函数_find_server的功能,下面分析后一个功能,update

8. novaclient/v1_1/servers.py   901   return self._update("/servers/%s" % base.getid(server), body, "server")    

# base.getid(server) = server's uuid,body = {'server': {'name': u'pppp'}}


9.novaclient/base.py  112     def _update(self, url, body, response_key=None, **kwargs):  

#url = u'/servers/acf18c19-c2de-47bb-be97-16fe229eabd1'

#body={'server': {'name': u'pppp'}}

#response_key= 'server'

#kwargs= none

1) self.run_hooks('modify_body_for_update', body, **kwargs)  #貌似没有什么作用

2)_resp, body = self.api.client.put(url, body=body)   #url = u'/servers/acf18c19-c2de-47bb-be97-16fe229eabd1'  , body= {'server': {'name': u'pppp'}}

#最终是调用_cs_request(self, url, method, **kwargs):    url=u'/servers/acf18c19-c2de-47bb-be97-16fe229eabd1' method = "PUT" kwargs = {'body': {'server': {'name': u'pppp'}}}

#说白了,又是调用一个restapi


10. novaclient/utils.py   319       def run_hooks(cls, hook_type, *args, **kwargs):   

#cls=<class 'novaclient.v1_1.servers.ServerManager'>

#hook_type='modify_body_for_update'

#arg=({'server': {'name': u'pppp'}},)

#kwargs={}

        hook_funcs = cls._hooks_map.get(hook_type) or []
        for hook_func in hook_funcs:
            hook_func(*args, **kwargs)

总结一下:说白了,调用了两个restapi

   1) /servers/ 获得所有servers的基本信息(最重要的是uuid)

   2)/servers/uuid   put   {'body': {'server': {'name': u'pppp'}}}  修改名字


下面我们将从nova-api的视角,看一下/servers/uuid   put   {'body': {'server': {'name': u'pppp'}}}  这个restapi到来之后,nova-api是如何处理的






2. nova启动一个虚机,meta_data存放在什么地方?数据库?还是在nova compute的节点上?还是哪?还有查询meta_data的cli是什么?我得跟踪一下

nova host-meta   Set or Delete metadata on all instances of a host.

nova meta            Set or Delete metadata on a server.




3. nova boot的流程比较复杂,但也得硬着头皮去分析,最好能调试着看下

nova boot


4.与密码有关的cli

nova clear-password

nova get-password

nova root-password


5. 弄清楚,nova list或者nova XXX-list 是否是查询数据库?还是通过其他的方式得到list


ps:nova cli的调用都是从python-novaclient进入的,devstack部署的话,都在/opt/stack/python-novaclient下



补充知识:

http中:

GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据

PUT- 更新或创建 


下午翘班去某湖骑行,风景不错。心情还好。

和同事都发现nova api无法用pycharm调试

但是可以用其他方法弥补,比如找到到底是哪个方法,用打log的方式将其输出,还有一点,有可能这个类中没有某个函数,一定要仔细的看他的父类是否有这个函数。


meta_data数据到底是保存在什么地方?这个问题一定要仔细的分析,还有对工作的一丝不苟的精神也应该被得到贯彻,最近工作用心不深,感觉在那瞎搞!


今天晚上,一个花田才认识2,3天,没见过,连个微信号都没有的妹子,她居然让我给她买东西,好吧,我忍了,买,结果一看,一个杯子接近300元,我忍不了了。残忍拒绝,妹子让我滚...我真的不知道是不是我社会经验太不丰富了,我真的被雷到了。确实,我挺喜欢这种强势而犀利的妹子,但是这么厉害的,我还是接受不了。最终还被妹子拉黑了...

我从妹子的角度上思考了下,一个海归,一个教雅思的海归,必然受到西方的那种思想影响,人家觉得我让你给我送个东西,是给你机会,你tmd的还不识抬举,磨磨唧唧的,这么点小钱都不舍得出,还是个男人么...

但是我真的没法说服自己冒“这么大”的风险去迎合妹子,所以,我活该找不到女朋友。。。

也许,她可能变本加厉的要这要那,也许她只是一个小小的试探以筛去那些不合格的人,甚至,当你代付之后,她就会立刻把钱还回你的账户上。但是对于我,一切都已经晚了。

一个不舍得花300元去追逐自己可能的幸福的人注定碌碌无为!这是送给不争气的自己的话。






0 0
原创粉丝点击