解决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 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: ...
随机推荐
- 震惊!OI居然还考天体运动
看图说话 看这里: 标签: 标签竟然还是模拟,简直活到爆,物理老师狂喜
- Convert to Ones CodeForces(超水题)
题目大意:给你几个数,这些数里面只有0或1,你有两种操作:1.把一段区域内的所有数前后交换位置.2.把一段区域内所有数取反.(区域可大可小,可以是所有数也 ...
- beego增删改查
package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go ...
- mysql中事件失效如何解决
重启Mysql服务可能会导致event_scheduler关闭,事件失效.解决方法如下: 1.解决办法: #查看是否开启 show variables like 'event_scheduler'; ...
- 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
InnoDB的一棵B+树可以存放多少行数据? 答案:约2千万 为什么是这么多? 因为这是可以算出来的,要搞清楚这个问题,先从InnoDB索引数据结构.数据组织方式说起. 计算机在存储数据的时候,有最小 ...
- Hive Sql的日常使用笔记
date: 2019-03-22 17:02:37 updated: 2020-04-08 16:00:00 Hive Sql的日常使用笔记 1. distinct 和 group by distin ...
- Longest common subsequence(LCS)
问题 说明该问题在生物学中的实际意义 Biological applications often need to compare the DNA of two (or more) different ...
- CodeForces 1409E Two Platforms
题意 有 \(n\) 个点,分别位于 \((x_i,y_i)\),求最多能用两个长度为 \(k\) 的平台接住多少个点. \(\texttt{Data Range:}n\leq 2\times 10^ ...
- 串口服务器和modbus网关有什么不同
串口服务器是什么? 串口服务器一般也会被称之为串口设备服务器,它是一种小型电子设备,可以将以太网IP/TCP数据包转换为RS232,RS485或RS422串口数据信号,反之亦然. Modbus网关是什 ...
- Learn day1 变量/数据类型
1.Python 简介 (1) 1989年开发的语言,创始人范罗苏姆(Guido van Rossum),别称:龟叔(Guido). (2) python具有非常多并且强大的第三方库,使得程序开发起来 ...