【问题标题】:Pass Ansible variables into custom Ansible module将 Ansible 变量传递到自定义 Ansible 模块
【发布时间】:2022-11-07 23:42:12
【问题描述】:

我有一个自定义模块,它位于我的 Ansible 角色的 library/ 目录中。我可以从我的剧本中调用该模块,并且代码可以正确执行,但前提是它期望的值在模块代码本身中被硬编码。如何将值从剧本传递给模块?

我尝试了以下方法:

- name: Create repo and use specific KMS key
  ecr_kms:
    repositoryName: "new-ecr-repo"
    encryptionConfiguration.kmsKey: 'my-kms-key-id"

- name: Create repo and use specific KMS key
  ecr_kms:
    repositoryName: "{{ repo_name }}"
    encryptionConfiguration.kmsKey: "{{ kms_key_id }}"

我希望它可以工作,但也没有,而且我收到以下错误:

botocore.exceptions.ParamValidationError:参数验证失败:
参数 repositoryName 的长度无效,值:0,有效的最小长度:2
参数encryptionConfiguration.kmsKey的长度无效,值:0,有效最小长度:1

The service module I'm trying to use

自定义模块的代码:

#!/usr/bin/python

from urllib import response
import boto3
from jinja2 import Template
from ansible.module_utils.basic import AnsibleModule

def create_repo():
    client = boto3.client('ecr')

    response = client.create_repository(
        #registryId='',
        repositoryName='',
        imageTagMutability='IMMUTABLE',
        imageScanningConfiguration={
            'scanOnPush': True
        },
        encryptionConfiguration={
            'encryptionType': 'KMS',
            'kmsKey': ""
        }
    )



def main():
    create_repo()

if __name__ in '__main__':
    main()

【问题讨论】:

    标签: ansible amazon-ecr amazon-kms ansible-role ansible-module


    【解决方案1】:

    您确实需要让您的模块知道您希望它接受的参数,因此,在您的 main 函数中:

    #!/usr/bin/env python
    from ansible.module_utils.basic import AnsibleModule
    
    
    def create_repo(repositoryName, kmsKey):
      # Call to the API comes here
    
    
    def main():
      module = AnsibleModule(
        argument_spec = dict(
          repositoryName = dict(type = 'str', required = True),
          kmsKey = dict(type = 'str', required = True),
        )
      )
    
      params = module.params
      
      create_repo(
        params['repositoryName'], 
        params['kmsKey']
      )
    
    
    if __name__ == '__main__':
        main()
    

    更多可以在相关文档中找到:Argument spec


    有了这个,你的任务将是:

    - name: Create repo and use specific KMS key
      ecr_kms:
        repositoryName: "{{ repo_name }}"
        kmsKey: "{{ kms_key_id }}"
    

    PS,忠告:避免在 YAML 键中使用点,这只会让你的生活变得复杂而没有真正的充分理由。

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 1970-01-01
      • 2020-02-20
      • 2021-06-27
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多