问题描述
想要将以下用于设置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
命令,并将命令中的变量KEY
和CONTAINER
替换为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
命令,并将命令中的变量KEY
和CONTAINER
替换为Ansible变量。这将在目标主机上直接执行该命令。
请注意,使用shell
模块执行命令可能会有一些安全风险,请确保在执行之前对命令进行验证和测试。
总结
在本文中,我们介绍了如何使用Ansible设置OpenStack Swift存储容器特定的API密钥。我们提供了两种解决方案:使用command
模块和使用shell
模块。根据您的需求和环境,您可以选择适合您的方法来执行命令。请确保在执行任何命令之前,对命令进行验证和测试,并确保目标主机上已经安装了OpenStack命令行工具。