Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

SaltStack开发遇到的问题

0
0

开发SaltStack的Web界面,遇到一个神奇的问题:

通过python调用salt-api没有返回值,直到超时,并且后端打印DEBUG日志:


SaltStack开发遇到的问题

会提示机器链接不上,而且机器hostname是被拆分开的。

但是如果使用curl命令是可以得到返回值的。

curl -k https://xx.xxx.com:9000 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: xxxxx' -d client='local' -d tgt='*' -d expr_from='list' -d fun='test.ping'

Python代码:

import json import urllib import urllib2 import ssl ssl._create_default_https_context = ssl._create_unverified_context salt_url = 'https://xxx.xxx.xxx.com:9000' salt_json_data = {'client':'local', 'tgt':'*', 'expr_form':'list', 'fun':'test.ping'} salt_json = json.dumps(salt_json_data) header = {'Content-Type':'application/json', 'Accept':'application/x-yaml', 'X-Auth-Token':'xxxx'} req = urllib2.Request(salt_url, salt_json, header) res = urllib2.urlopen(req) result = res.read()

后来。仔细排查日志,发现了问题。


SaltStack开发遇到的问题

有问题的部分的代码:

if 'topic_lst' in package: topic_lst = package['topic_lst'] for topic in topic_lst: if topic in self.present: for client in self.present[topic]: try: f = client.stream.write(payload) self.io_loop.add_future(f, lambda f: True) except tornado.iostream.StreamClosedError: to_remove.append(client) else: log.debug('Publish target {0} not connected'.format(topic))

最后发现tcp transport默认是解析数组。

也就是说topic_lst,即机器列表,应该是以数组形式传递的。

修正后,问题得到解决。


Viewing all articles
Browse latest Browse all 12749