丢失 jenv 文件后恢复对 juju 环境的访问

丢失 jenv 文件后恢复对 juju 环境的访问

我有一个由三台服务器组成的 juju 环境,通过手动提供程序设置。硬件故障后,我丢失了手动环境的 .jenv 文件。我仍然有管理员用户密码,可以登录该环境上的 gui,并且我仍然可以 ssh 访问这些机器。

我尝试过简单地创建一个新的手动提供程序 config.yaml 并设置管理员用户密码,但这显然不是需要做的全部工作,因为 juju 仍然看到一个未启动的环境。有没有办法恢复对此环境的访问权限?

答案1

基本上,您需要重建 .jenv 文件。OpenStack 的示例如下:这个博客。这个过程非常详细,我知道这个问题已经过时了,但我想将其存档以供后人参考。

我不会打印该博客上的所有内容,而只是快速版本。从样板 .jenv 开始,在撰写本文时,使用如下内容:

user: admin  
password: test  
environ-uuid: ENVIRONMENT_UUID  
state-servers:  
- ip-address-of-your-bootstrap-node:17070

server-hostnames:  
- ip-address-of-your-bootstrap-node:17070

ca-cert: CA_CERT

bootstrap-config:  
  access-key: ""
  admin-secret: TO_BE_DEFINED
  agent-metadata-url: https://streams.canonical.com/juju/tools/
  api-port: 17070
  apt-http-proxy: http://squid.internal:3128
  apt-https-proxy: http://squid.internal:3128
  auth-mode: userpass
  auth-url: http://10.230.19.65:5000/v2.0
  authorized-keys: 
  bootstrap-addresses-delay: 10
  bootstrap-retry-delay: 5
  bootstrap-timeout: 600
  ca-cert: SECOND_CA_CERT
  ca-private-key: SECOND_CA_CERT_PRIVATE
  charm-store-auth: ""
  control-bucket: CONTROL_BUCKET
  default-series: ""
  development: false
  disable-network-management: false
  firewall-mode: instance
  image-metadata-url: http://x.x.x.x:80/swift/v1/simplestreams/data/
  image-stream: released
  logging-config: <root>=WARNING;unit=DEBUG
  lxc-clone-aufs: false
  name: USERNAME
  network: ""
  password: PASSWORD
  prefer-ipv6: false
  proxy-ssh: true
  region: region
  secret-key: ""
  set-numa-control-policy: false
  ssl-hostname-verification: true
  state-port: 37017
  syslog-port: 6514
  tenant-name: USERNAME
  test-mode: false
  tools-metadata-url: https://streams.canonical.com/juju/tools/
  type: openstack
  use-default-secgroup: true
  use-floating-ip: false
  username: USERNAME
  uuid: ENVIRONMENT_UUID

然后进行如下修改:

环境-uuid唯一标识可以从 bootstrap 节点上的 mongo 获取,如下所示:

mongo --ssl -u admin -p $(grep oldpassword /var/lib/juju/agents/machine-0/agent.conf | awk -e '{print $2}') localhost:37017/admin

进入数据库后,获取您的 UUID:

juju:PRIMARY> db = db.getSiblingDB('juju')  
juju:PRIMARY> db.environments.find().pretty()

{ "_id" : "cc503d03-6933-47a7-8a16-4d1094a6593e"

控制桶第一个 ca 证书可以从数据库中获取条目:

# look for 'ca-cert' in this mess of output, copy out into your file
# with 'begin' and 'end' blocks.  Look at another .jenv to get the
# right yaml format
juju:PRIMARY> db.settings.find().pretty()  

第二个 ca 证书和 ca 私钥位于 '/var/lib/juju/server.pem' 的引导节点上

其他一切都应该很容易理解。如果你丢失了密码,那么密码可能很难找回,但如果丢失了,那篇博客文章详细描述了如何从数据库中恢复密码。请参阅博客了解详细而肮脏的细节,包括如果你丢失了 ssh 访问权限,如何访问 openstack 后端的虚拟机等。

相关内容