我有一个由三台服务器组成的 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 后端的虚拟机等。