[ English | Indonesia | русский ]

以非 root 用户运行

部署者无需在部署或目标主机上使用 root 用户帐户。这种方法通过利用 Ansible 权限提升,即可开箱即用。

部署主机

您可以通过遵循以下指南来避免在部署中使用 root 用户

  1. 将 OpenStack-Ansible 仓库克隆到用户主目录。这意味着,代替 /opt/openstack-ansible 仓库将位于 ~/openstack-ansible

  2. /etc/openstack_deploy 目录使用自定义路径。您可以将 OpenStack-Ansible 配置文件目录放在用户主目录中。为此,您需要定义以下环境变量

    export OSA_CONFIG_DIR="${HOME}/openstack_deploy"
    
  3. 如果您想保留基本的 ansible 日志记录,则需要创建 /openstack/log/ansible-logging/ 目录并允许用户写入其中,或者定义以下环境变量

    export ANSIBLE_LOG_PATH="${HOME}/ansible-logging/ansible.log"
    

    注意

    您还可以将环境变量添加到 openstack_deploy 文件夹内的 user.rc 文件 (${OSA_CONFIG_DIR}/user.rc) 中。每次运行 openstack-ansible 二进制文件时,都会读取 user.rc 文件。

  4. 使用 ./scripts/bootstrap-ansible.sh 脚本进行 OpenStack-Ansible 的初始引导仍然需要以 root 用户身份或使用 sudosu 提升权限来完成。

目标主机

也可以使用非 root 用户在目标主机上进行 Ansible 身份验证。但是,该用户必须能够使用 Ansible 权限提升 提升权限。

注意

您可以将该部分中的环境变量添加到 openstack_deploy 文件夹内的 user.rc 文件 (${OSA_CONFIG_DIR}/user.rc) 中。每次运行 openstack-ansible 二进制文件时,都会读取 user.rc 文件。

还有一些其他事项您可能需要考虑

  1. 每次运行 playbook 或 ad-hoc 命令时,都提供 --become 标志。或者,您可以定义以下环境变量

    export ANSIBLE_BECOME="true"
    
  2. 如果使用 LXC 容器,请覆盖 Ansible 临时路径。从物理主机到 LXC 容器的 ansible 连接会传递主机上的环境变量。这意味着 Ansible 会尝试在 LXC 容器中使用与在主机上相同的临时文件夹,相对于非 root 用户 ${HOME} 目录。这在容器内部不存在,必须使用其他路径代替。

    您可以通过多种方式执行此操作

    1. 在 user_variables.yml 中定义 ansible_remote_tmp: /tmp

    2. 定义以下环境变量

    export ANSIBLE_LOCAL_TEMP="/tmp"
    
  3. 定义将用于从部署主机到 ansible 目标主机连接的用户。如果您的部署中所有主机的用户都相同,则可以在以下两种方式之一中执行此操作

    1. 在 user_variables.yml 中定义 ansible_user: <USER>

    2. 定义以下环境变量

    export ANSIBLE_REMOTE_USER="<USER>"
    

    如果用户因主机而异,则可以使用 group_vars 或 host_vars。有关如何使用这些变量的更多信息,请参阅 覆盖指南