You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible-Lint检测自定义Keycloak模块参数时抛出异常警告的解决问询

Keycloak自定义Ansible模块ansible-lint警告问题

自定义模块参数定义

我编写了一个用于管理Keycloak领域的自定义Ansible模块,其中包含smtp_server子字典参数,模块参数定义代码如下:

def keycloak_argument_spec():
  return dict(
    auth_keycloak_url=dict(type='str', aliases=['url'], required=True),
    auth_client_id=dict(type='str', default='admin-cli'),
    auth_realm=dict(type='str', required=True),
    auth_client_secret=dict(type='str', default=None),
    auth_username=dict(type='str', aliases=['username'], required=True),
    auth_password=dict(type='str', aliases=['password'], required=True, no_log=True),
    validate_certs=dict(type='bool', default=True)
  )

def main():
  argument_spec = keycloak_argument_spec()

  meta_args = dict(
    state=dict(default='present', choices=['present', 'absent']),
    realm=dict(type='str', required=True),
    smtp_server=dict(type='dict', aliases=['smtpServer'], options={
      'host': dict(default='localhost'),
      'port': dict(type='int', default=25),
      'auth': dict(type='bool', default=False),
      'ssl': dict(type='bool', default=False),
      'starttls': dict(type='bool', default=False),
      'user': dict(no_log=True),
      'password': dict(no_log=True),
      'envelopeFrom': dict(),
      'from': dict(),
      'fromDisplayName': dict(),
      'replyTo': dict(),
      'replyToDisplayName': dict(),
    }),
  )
  
  argument_spec.update(meta_args)

  module = AnsibleModule(
    argument_spec = argument_spec,
    supports_check_mode=True
  )

对应的Ansible任务配置

- name: "Create realm"
  keycloak_realm:
    realm: "{{ keycloak_realm.key }}"
    smtp_server:
      host: "{{ keycloak_realm.value.mail.host | default('localhost') }}"
      port: "{{ keycloak_realm.value.mail.port | default(25) | int }}"
      starttls: "{{ keycloak_realm.value.mail.starttls | default(false) }}"
      ssl: "{{ keycloak_realm.value.mail.ssl | default(false) }}"
      auth: "{{ keycloak_realm.value.mail.auth | default(false) }}"
      user: "{{ keycloak_realm.value.mail.user | default(omit) }}"
      password: "{{ keycloak_realm.value.mail.password | default(omit) }}"
      replyTo: "{{ keycloak_realm.value.mail.replyto | default(omit) }}"
      from: "{{ keycloak_realm.value.mail.from | default(omit) }}"
      fromDisplayName: "{{ keycloak_realm.value.mail.from_name | default(omit) }}"
    state: "present"

遇到的ansible-lint警告

运行ansible-lint(版本6.14.2,基于ansible 2.14.1)检测该任务时,出现如下警告:

WARNING Ignored exception from ArgsRule. while processing roles/keycloak/tasks/install/configure_realm.yml (tasks): 'port'

已尝试的无效操作

  • 使用ansible-lint -vv尝试获取堆栈跟踪,但未成功
  • 调整模块内参数顺序,会触发其他int或bool类型参数的警告
  • 将port参数改为type=str类型,其他非str类型参数仍会触发警告
  • 用default(omit)处理可选参数,警告依旧
  • 尝试另一种smtp_server字典定义方式,问题未解决

实际执行任务一切正常,但ansible-lint对该字典参数的检测存在问题,请问有什么方法可以消除该警告?


内容的提问来源于stack exchange,提问作者TRW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:23:26