HPA GEN 8 EXSi 升级

过年在家,决定抽出时间来解决掉之前自己HPA GEN8 EXSi磁盘读写过慢的问题
google 一下发现有人说升级一下就好1果断决定升级一下

esxcli network firewall ruleset set -e true -r httpClient
esxcli software profile update -p ESXi-6.5.0-20170702001-standard \
-d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
 [InstallationError]
 [Errno 28] No space left on device
       vibs = VMware_locker_tools-light_6.5.0-0.23.5969300
 Please refer to the log file for more details.

结果按照操作发现本地报错, google发现有人已经解决了2

cd /tmp/
wget http://hostupdate.vmware.com/software/VUM/PRODUCTION/main/esx/vmw/vib20/tools-light/VMware_locker_tools-light_6.5.0-0.23.5969300.vib

我在vmware里下载了几次都没有成功,直接去外面下载好,用scp传了回去

md5sum VMware_locker_tools-light_6.5.0-0.23.5969300.vib
5d5194cdc0795e74c29fa41d41d96110  VMware_locker_tools-light_6.5.0-0.23.5969300.vib

可以对照一下md5摘要,把下载好的vib文件存放到tmp下,然后安装:

esxcli software vib install -f -v /tmp/VMware_locker_tools-light_6.5.0-0.23.5969300.vib

出现如下结果说明成功了

Installation Result
   Message: Operation finished successfully.
   Reboot Required: false
   VIBs Installed: VMware_locker_tools-light_6.5.0-0.23.5969300
   VIBs Removed:
   VIBs Skipped:

清理空间
需要在设置里开启swap,否则可能回无法下载成功

rm /tmp/VMware_locker_tools-light_6.5.0-0.23.5969300.vib

现在重新执行更新命令

esxcli software profile update -f -p ESXi-6.5.0-20170702001-standard -d \
https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml

成功后重新开启防火墙

esxcli network firewall ruleset set -e false -r httpClient

reference:

  1. https://jayshao.com/update-esxi-solve-achi-problem/
  2. https://communities.vmware.com/message/2695601#2695601
发表在 系統 | 标签为 , , , | HPA GEN 8 EXSi 升级已关闭评论

docker 安装 sentry 踩坑记录

之前公司项目里用到了sentry。当初很轻松的用docker装好跑起来了,由于要上https。当初用端口区分的方案被换成了用域名访问,一切顺利。由于sentry服务要迁移服务器。考虑到老数据没太大用,所以直接下掉了老得sentry服务,打算重新架一套。万万没想到,走上了一条踩坑路
由于之前一次的经验,所以直接吧配置写到了docker-compose.yml里面,万万没想到,服务直接起不来了。查日志才发现,原来sentry-docker的文档太滞后,所以起服务的方式变了。重新调整姿势,好不容易服务器来了。万万没想到,浏览器没法访问,访问报告400 bad request。照着sentry-docker的评论说要改secure.prefix_url的配置,好不容易吧配置文件搞好,发现一点效果没有。
用w3m在localhost上试了一下,发现果然localhost可以访问。想一下sentey貌似是django写的,估计ALLOW_HOST设置问题,试了一下发现不行。一怒之下attach进去看python源码,看了半天发现sentry改的东西太多了。google半天也没有结果。不过遇到一个妹子和我遇到同一个问题,还在上海,果断github上follow。
想了一下默默的去nginx里吧host改成了localhost:9000(我的sentry放在了9000端口上)
试一下被重定向到了localhost:9000
心说为啥不proxy_redirect一下?
proxy_redirect ~(http://|https://)?.*?/(.*) /$2;
reload之后居然好了。。。
果然有的时候换个思路海阔天空,sentry确实开源版是不想让人用了啊

发表在 日誌 | 标签为 , , | 留下评论

漫话 python 类的私有方法

前几天同事问我关于如何外部访问python私有属性的问题,当时觉得私有属性不应该被外部访问。但是回过头来想一下python私有属性的实现却是很有意思。
先看这段代码

class A(object):
    _a = "this is _a"
    __a = "this is __a"
    def set_private(self, a1, a2):
        self._a = a1
        self.__a = a2
 
    def read_private(self):
        print(self._a, self.__a, self._A__a)
 
a1 = A()
print(a1._a)
print(hasattr(a1.__a))  # => False; 没有__a这个属性
print(a1._A__a)  # 可以成功读取私有变量
a1._A__a = None
a1.read_private()  # 可以从外修改私有变量

貌似python对私有变量的实现就是改了下变量名啊?看着貌似挺简单的,但是聪明的你一定发现了问题,重命名变量如果重名咋办?
看这段例子:

class A(object):
    _a = "this is _a"
    __a = "this is __a"
    _A__a = "this is _A__a"
    def set_private(self, a1, a2=None, a3=None):
        self._a = a1
        if a2:
             self.__a = a2
        if a3:
            self._A__a = a3
    def read_private(self):
        print(self._a, self.__a, self._A__a)
 
a2 = A()
a2.read_private()  # 期望结果是 (this is _a, this is __a, this is _A__a)
#=> (this is _a, this is _A__a, this is _A__a)
## 说明python的私有变量果然只是简单测重命名,规则就是"_{class_name}__{private_name}"
a2.set_private(0, 1)
print(a2.read_private())
#=> 0 1 1
a2._A__a = 2
print(a2.read_private())
#=> 0 2 2

不难看出,类方法内修改__private_name 等价于外部直接访问"_{class_name}__{private_name}"
看似很美好,但如果出现重名的类呢?

class A(object):
  __p1 = 1
  __p = "A1"
  def get1(self):
     print(self.__p, self.__p1)
 
A1 = A
class A(object):
  __p = "A2"
  __p2 = "2"
  def get2(self):
     print(self.__p, self.__p2)
 
A2 = A
 
print(A1, A2)
class B(A1, A2):
   _A__p = "B"
 
b = B()
print(b.get1())
print(b.get2())

不难发现python私有变量只是一种访问的语法糖。在某些情况下,比如利用type函数动态生成的class中使用了相同的类名称和空间。一定会造成私有变量的互相影响,所以再大型项目中需要谨慎使用

发表在 python | 标签为 , | 留下评论