在 Devstack 中部署 Adjutant¶
本指南介绍了在正在运行的 Devstack 环境中设置 Adjutant 的方法,类似于我们用于开发目的的方式。
本指南假定您正在使用干净的 Ubuntu 20.04 虚拟机作为用户 ubuntu 运行。
部署 Devstack¶
获取 Devstack 仓库
git clone https://opendev.org/openstack/devstack
cd devstack
然后定义一个基本的 local.conf 文件,设置密码,并将其放置在 devstack 文件夹中
[[local|localrc]]
ADMIN_PASSWORD=openstack
DATABASE_PASSWORD=openstack
RABBIT_PASSWORD=openstack
SERVICE_PASSWORD=openstack
HOST_IP=<Floating IP of VM, if needed>
运行 devstack 构建
./stack.sh
如果您的虚拟机具有足够的 RAM(建议 5GiB)来处理 devstack 安装,这应该需要一段时间,但会顺利进行。
部署 Adjutant¶
获取 Adjutant 仓库
git clone https://opendev.org/openstack/adjutant
然后您需要设置一个虚拟环境
cd adjutant
virtualenv venv
source venv/bin/activate
完成此操作后,您可以安装 Adjutant 及其依赖项
pip install -r requirements.txt
python setup.py develop
如果您愿意,可以完全安装它,但使用 develop 模式允许您更新 Adjutant 代码,并在不重新运行安装的情况下使服务反映该更改。
配置 Adjutant¶
大多数默认配置值应该可以很好地与 devstack 配合使用,但您需要设置一些值,如下面的标题中所述。
身份用户¶
Adjutant 需要知道要作为哪个服务帐户用户运行。
默认情况下这些是未设置的,需要进行配置
identity.auth.username
identity.auth.password
identity.auth.project_name
identity.auth.auth_url
从 devstack local.conf 或从环境变量中找到这些值
cd devstack
source openrc admin
env | grep OS_
网络 UUID¶
为了能够使用操作 NewDefaultNetworkAction 和 NewProjectDefaultNetworkAction,您需要在
workflow.action_defaults.NewDefaultNetworkAction.public_network
workflow.action_defaults.NewProjectDefaultNetworkAction.public_network
中设置网络 UUID。如果您没有将 public_network 值设置为与您的 OpenStack 环境匹配的值,那么使用这些操作进行的注册或任务将无法正确创建默认网络,因为它们无法找到正确的外部公共网络。
在新的 devstack 上只有一个公共网络,因此要查找公共网络 UUID,您可以运行
source openrc admin
openstack network show public
然后获取 id 值并将其放入 Adjutant 配置中。
用户名是电子邮件¶
Adjutant 的示例配置设置为 identity.username_is_email = true,该配置假定用户名是电子邮件。可以在配置中轻松更改此设置,但这是避免用户名冲突的一种非常有效的方法。如果将其设置为 false,则大多数处理用户创建的任务都需要用户名和电子邮件。
在两种状态之间迁移尚未完全处理,因此一旦为 identity.username_is_email 选择了一个值,请坚持使用它,或者在两者之间清除数据库。
运行 Adjutant¶
如果您希望使用与 /etc/adjutant 不同的 Adjutant 配置文件路径,则需要设置环境变量
export ADJUTANT_CONFIG_FILE=etc/adjutant.yaml
仍然在 Adjutant 仓库目录中,您现在需要运行迁移来构建基本的数据库。默认情况下,这将使用 sqlite3。
adjutant-api migrate
现在迁移已设置并构建了数据库,从同一目录运行 API 服务
adjutant-api runserver 0.0.0.0:5050
注意
端口无关紧要,但 5050 是一个不错的选择,因为它不被任何其他 DevStack 服务使用,因此我们可以安全地假设您将为本指南的其余部分使用相同的 URL。
现在 Adjutant 正在运行,请保持此窗口打开,因为您需要关注控制台输出。
API 请求日志默认写入 adjutant.log。
将 Adjutant 添加到 Keystone 目录¶
在新的 SSH 终端中,连接到您的 Ubuntu 虚拟机,将您的凭据设置为环境变量
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_PROJECT_NAME=demo
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_DOMAIN_NAME=default
export OS_AUTH_URL=http://localhost/identity
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME=RegionOne
如果您使用上述 local.conf 文件,这些应该有效。
或者,使用 devstack 目录中提供的 openrc 文件
source openrc admin
现在我们可以为 Adjutant 在 Keystone 中设置一个新服务,并将一个端点添加到目录中
openstack service create registration --name adjutant
openstack endpoint create adjutant public http://127.0.0.1:5050/v1 --region RegionOne
Adjutant 特定角色¶
为了允许某些操作,Adjutant 需要存在两个特殊角色。您可以这样创建它们
openstack role create project_admin
openstack role create project_mod
此外,由于 Adjutant 默认还会添加该角色,因此您需要创建 ‘heat_stack_owner’,除非您安装了 Heat,否则它默认情况下不会存在于 devstack 中
openstack role create heat_stack_owner
通过 CLI 测试 Adjutant¶
现在服务正在运行,并且端点已设置,您需要安装客户端并尝试与服务通信
pip install python-adjutantclient
现在让我们检查服务的状态
openstack adjutant status
您应该得到
{
"error_notifications": [],
"last_completed_task": null,
"last_created_task": null
}
由于我们尚未对服务进行任何操作,因此这是预期的输出。
要列出当前项目中的用户(默认情况下隐藏管理员用户)
openstack project user list
上述操作仅适用于具有以下角色的用户:‘admin’、‘project_admin’、‘project_mod’
现在让我们尝试邀请一个新用户
openstack project user invite bob@example.com project_admin
然后您将收到一条消息,说明您的邀请已发送。您可以使用 ‘openstack project user list’ 再次列出您的项目用户,以查看您的邀请。
现在,如果您查看 Adjutant 终端中仍然打开的日志,您将看到将发送到 bob@example.com 的电子邮件的打印输出。在电子邮件中有一行如下所示
http://192.168.122.160:8080/token/e86cbfb187d34222ace90845f900893c
通常,这将引导用户到一个 Horizon 仪表板页面,他们可以在那里提交密码。
由于我们没有运行该页面,您唯一的选择是通过 CLI 提交它。这很麻烦,但可以做到。
使用 Adjutant 输出中的 URL,获取 ‘…/token/’ 后的值。那是 bob 的令牌。您可以通过 CLI 提交它
openstack admin task token submit <token> <json_data>
openstack admin task token submit e86cbfb187d34222ace90845f900893c '{"password": "123456"}'
现在,如果您获取用户列表,您将看到 bob 已经处于活动状态
openstack project user list
并且还显示为用户,如果您执行
openstack user list
并且由于您是管理员,您甚至可以查看任务本身
openstack admin task list
最上面的一个应该是您的邀请,如果您使用该 id 执行 show,您将看到一些关于它的详细信息
openstack admin task show <UUID>
在 Horizon 上设置 Adjutant¶
Adjutant 具有 Horizon UI 插件,其代码和设置说明可以在 此处 找到。
如果您设置了此项,您需要编辑默认 Adjutant 配置,以便将 workflow.horizon_url 的值正确设置为指向您的 Horizon URL。