如何使用Ansible设置OpenStack Swift存储容器特定的API密钥

57次阅读
没有评论

问题描述

想要将以下用于设置Swift对象存储容器的OpenStack命令转换为Ansible,以便作为角色的一部分运行:

openstack container create $CONTAINER_NAME
openstack container set --property Full-Key=$CONTAINER_API_KEY $CONTAINER_NAME

对于第一个命令,用户知道可以使用os_object模块来创建容器,但似乎没有提供设置属性的参数,而在这种情况下,需要设置容器的密钥访问权限。(参考文档:Container Specific API Keys

那么,如何在Ansible中本地执行第二个命令,而不是直接运行shell命令呢?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据进一步的研究,目前无法在Ansible中本地执行该操作。因此,我们必须使用command模块在shell中执行该命令。
以下是在Ansible中执行第二个命令的步骤:
1. 使用command模块来执行shell命令。
2. 将命令中的变量替换为Ansible变量。
下面是一个示例Ansible任务:

- name: Set container property
  command: openstack container set --property Full-Key={{ KEY }} {{ CONTAINER }}

在上面的示例中,我们使用command模块执行了openstack container set命令,并将命令中的变量KEYCONTAINER替换为Ansible变量。这将在Ansible中本地执行该命令。

请注意,这种方法需要确保在执行Ansible任务时,目标主机上已经安装了OpenStack命令行工具,并且已经配置了正确的环境变量。

方案2

如果Ansible模块不支持设置容器属性,您可以尝试使用Ansible的shell模块来执行命令。
另一种方法是使用Ansible的shell模块来执行命令。这将直接在目标主机上执行shell命令,而不是使用Ansible模块。

以下是使用shell模块执行第二个命令的步骤:
1. 使用shell模块来执行shell命令。
2. 将命令中的变量替换为Ansible变量。
下面是一个示例Ansible任务:

- name: Set container property
  shell: openstack container set --property Full-Key={{ KEY }} {{ CONTAINER }}

在上面的示例中,我们使用shell模块执行了openstack container set命令,并将命令中的变量KEYCONTAINER替换为Ansible变量。这将在目标主机上直接执行该命令。

请注意,使用shell模块执行命令可能会有一些安全风险,请确保在执行之前对命令进行验证和测试。

总结

在本文中,我们介绍了如何使用Ansible设置OpenStack Swift存储容器特定的API密钥。我们提供了两种解决方案:使用command模块和使用shell模块。根据您的需求和环境,您可以选择适合您的方法来执行命令。请确保在执行任何命令之前,对命令进行验证和测试,并确保目标主机上已经安装了OpenStack命令行工具。

正文完