解决calamari无法获取节点信息的bug
前言
一直在做calamari的相关的一些打包和安装的工作,都是业余弄的东西,所以并没有仔细的进行功能点的验证测试,正好ceph社区群里面有人问了个问题
calamari上是不是能看到ceph的version?
对于这个问题,好像确实没有见到过,而之前正好有个页面看到是空的,当时还不清楚这个是什么用的

而另外一位群友贴出了这个地方的是有值的,这个地方是有BUG的,在咨询了相关的问题描述以后,我们来看下,可以如何解决这个问题
问题解决过程
salt的软件版本:
- salt-master-2015.8.1-1.el7.noarch
- salt-2015.8.1-1.el7.noarch
- salt-minion-2015.8.1-1.el7.noarch
问题描述
calamari的salt-master节点在读取
/var/cache/salt/master/minions/{minion-hostname}/data.p
的时候有权限问题,在修改权限以后,可以读取到了,但是在重启了salt-minion以后,这个文件会被更新,然后权限又变成无法读取的
相关知识补充
Grains - salt-minion 自身的一些静态信息
salt '*' grains.ls # 查看 grains 分类
salt '*' grains.items # 查看 grains 所有信息
salt '*' grains.item os # 查看 grains 某个信息
salt '*' grains.get os
上面的是salt-minion的静态信息的查询的相关的命令,salt-minion在进行重启的时候会将一些静态的信息推送到salt-master上面去,而这个生成的信息正好就是我们上面提出有权限问题的data.p这个存储的文件的,那么解决问题就是修改这个地方的权限的问题了
修改salt-master代码
这个问题通过修改salt-master的master.py代码可以解决
写入这个grains信息的代码在/usr/lib/python2.7/site-packages/salt/master.py这个文件当中,代码段如下:
def _pillar(self, load):
···
if self.opts.get('minion_data_cache', False):
cdir = os.path.join(self.opts['cachedir'], 'minions', load['id'])
if not os.path.isdir(cdir):
os.makedirs(cdir)
datap = os.path.join(cdir, 'data.p')
tmpfh, tmpfname = tempfile.mkstemp(dir=cdir)
os.close(tmpfh)
with salt.utils.fopen(tmpfname, 'w+b') as fp_:
fp_.write(
self.serial.dumps(
{'grains': load['grains'],
'pillar': data})
)
# On Windows, os.rename will fail if the destination file exists.
salt.utils.atomicfile.atomic_rename(tmpfname, datap)
return data
就是这个函数就是负责这个文件写入的,我们只在这个代码里面增加一个文件的权限的控制,在 salt.utils.atomicfile.atomic_rename(tmpfname, datap)这行之上增加一行代码os.chmod(tmpfname, 0o644)
def _pillar(self, load):
···
if self.opts.get('minion_data_cache', False):
cdir = os.path.join(self.opts['cachedir'], 'minions', load['id'])
if not os.path.isdir(cdir):
os.makedirs(cdir)
datap = os.path.join(cdir, 'data.p')
tmpfh, tmpfname = tempfile.mkstemp(dir=cdir)
os.close(tmpfh)
with salt.utils.fopen(tmpfname, 'w+b') as fp_:
fp_.write(
self.serial.dumps(
{'grains': load['grains'],
'pillar': data})
)
# On Windows, os.rename will fail if the destination file exists.
os.chmod(tmpfname, 0o644)
salt.utils.atomicfile.atomic_rename(tmpfname, datap)
return data
修改好了以后,重启下salt-master,然后重启下salt-minion
systemctl restart salt-minion
检查权限,已经看到权限变成了644了
[root@lab8106 ~]# ll /var/cache/salt/master/minions/lab8106/data.p
-rw-r--r-- 1 root root 5331 Jan 9 15:33 /var/cache/salt/master/minions/lab8106/data.p
现在再看下前台页面效果:

问题解决
总结
calamari有一些各种各样的小问题,总体上还是一款非常简洁漂亮的管理界面,在没有监控系统的情况下,还是一个不错的选择
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2017-01-09 |
解决calamari无法获取节点信息的bug的更多相关文章
- wx.createSelectorQuery() 获取节点信息 获取不到解决方法
场景:一个气泡的宽度由加载来的数据填充所决定,不定宽, wx.createSelectorQuery().selectAll('.talkbubble').boundingClientRect ...
- Selenium 获取节点信息
Selenium 可以通过 find_element() 找到指定的节点,Selenium 也提供了相关的方法和属性来直接提取节点信息,如属性.文本等 from selenium import web ...
- XML获取节点信息值
XmlDocument doc = new XmlDocument(); doc.LoadXml(sreturn); XmlNode xNode = doc.SelectSingleNode(&quo ...
- 小程序文案过长,‘收起/展开’文字,createSelectorQuery 获取节点成功,boundingClientRect 返回信息null
问题描述: wxml中id是动态生成的. 获取节点信息是在onReady生命周期函数内延时500ms执行的,select(id)可以获取全部节点信息,boundingClientRect (rect) ...
- 微信小程序在组件中获取界面上的节点信息wx.createSelectorQuery
节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: const query = wx.cre ...
- 小程序插件使用wx.createSelectorQuery()获取不到节点信息
发现小程序一个bug, 在小程序插件中使用wx.createSelectorQuery()获取不到节点信息,需要在后面加入in(this) 例如: const query = wx.createSel ...
- uni-app——小程序插件使用wx.createSelectorQuery()获取不到节点信息
发现小程序一个bug, 在小程序插件中使用wx.createSelectorQuery()获取不到节点信息,需要在后面加入in(this) 例如: const query = wx.createSel ...
- 获取BT节点信息bittorrent-discovery
获取BT节点信息bittorrent-discovery BT/磁力都是常见的P2P下载方式.用户作为一个节点node从其他用户node或者peer获取文件数据,以完成下载.bittorren-d ...
- 小程序框架之视图层 View~获取界面节点信息
获取界面上的节点信息 WXML节点信息 节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: ...
随机推荐
- 如何设计一个牛逼的API接口
在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...
- pytest文档44-allure.dynamic动态生成用例标题
前言 pytest 结合 allure 描述用例的时候我们一般使用 @allure.title 和 @allure.description 描述测试用例的标题和详情. 在用例里面也可以动态更新标题和详 ...
- CTSC2010
星际旅行 https://www.luogu.com.cn/problem/P4189 题目:且每个星球的\(H_i\)大于等于与该星球直接相连的星球数(即度数). 想到先从根到所有点都走一遍,然后贪 ...
- go panic
panic 抛出异常 通过recover捕获 类似 php python等语言的try catch package mainimport ( "fmt" "errors& ...
- nginx优化:worker_processes/worker_connections/worker_rlimit_nofile
一,优化nginx的worker进程数 1,worker_processes应设置为多少? worker_processes 4; 如何设置这个值: worker_processes默认值是1,一般要 ...
- ansible用user/group模块管理受控机上的用户和组(ansible2.9.5)
一,ansible的user/group模块的用途: ansible的user模块用来实现:生成用户.删除用户等用户的管理ansible的group模块用来实现:生成组.删除组等组的管理 说明:刘宏缔 ...
- 【应用服务 App Service】在Azure App Service中使用WebSocket - PHP的问题 - 如何使用和调用
问题描述 在Azure App Service中,有对.Net,Java的WebSocket支持的示例代码,但是没有成功的PHP代码. 以下的步骤则是如何基于Azure App Service实现PH ...
- SQL注入的一些学习
-------------------------------------- 这是我之前发布到的其他的一个网址,这里的话我重新总结 可能分很多,我也不是很清楚,只是皮毛的研究了一下 1,sql按数据库 ...
- Luogu P2447 [SDOI2010]外星千足虫
题意 给定 \(n\) 个变量和 \(m\) 个异或方程,求最少需要多少个才能确定每个变量的解. \(\texttt{Data Range:}1\leq n\leq 10^3,1\leq m\leq ...
- 浅析 AC 自动机
目录 简述 AC 自动机是什么 AC 自动机有什么用 AC 自动机·初探 AC 自动机·原理分析 AC 自动机·代码实现 AC 自动机·更进一步 第一题 第二题 第三题 从 AC 自动机到 fail ...