【问题标题】:How to use Keycloak Admin CLI with Ansible on Windows如何在 Windows 上使用 Keycloak Admin CLI 和 Ansible
【发布时间】:2019-05-16 10:41:41
【问题描述】:

我在 Windows 2016 服务器上安装了 Keycloak 并通过 Ansible 创建了一个管理员用户,到目前为止一切顺利。 现在我想通过 Ansible 安装 Admin API,以便也通过 Ansible 配置 Keycloak。 当我在 Windows 机器的命令行中本地运行接下来的 3 个命令时,一切正常: 1. 安装API:从bin文件夹运行kcadm.bat

  1. 连接到 api:\bin>kcadm config credentials --server http://localhost:8080/auth --realm master --user keycloak 然后我被要求进行身份验证: 登录http://localhost:8080/auth 作为域主的用户keycloak 输入密码:xxxxx

  2. 创建客户端: c:\> kcadm create clients -r master -s clientId=my-client-s "redirectUris=[\"http://localhost:8980/myapp/*\"]" -i > clientid.txt

谁能建议如何在 Ansible 中执行此操作?

我用 win 命令运行第一个命令:

- name: install admin cli for keycloak
  win_command: 'C:\Install\Keycloak\keycloak-6.0.1\keycloak- 6.0.1\bin\kcadm.bat'

我得到:

fatal: [keykloak-ansible]: FAILED! => {"changed": true, "cmd": "C:\\Install\\Keycloak\\keycloak-6.0.1\\keycloak-6.0.1\\bin\\kcadm.bat", "delta": "0:00:01.190629", "end": "2019-05-16 06:42:36.617885", "msg": "non-zero return code", "rc": 1, "start": "2019-05-16 06:42:35.427256", "stderr": "", "stderr
_lines"

不确定 kcadm.bat 需要什么,因为从细节上看它没有安装任何东西。 因此,我尝试立即运行以下身份验证命令:

- name: keycloak cli authentication
  win_command: kcadm config credentials --server http://10.128.32.220:8080/auth --realm master --user keycloak --password xxx
 args:
   chdir: 'C:\Install\Keycloak\keycloak-6.0.1\keycloak-6.0.1\bin'

但这失败了:

fatal: [keykloak-ansible]: FAILED! => {"changed": false, "cmd": "C:\\Install\\Keycloak\\keycloak-6.0.1\\keycloak-6.0.1\\bin\\kcadm config credentials --server http://10.128.32.220:8080/auth --realm master --user keycloak", "msg": "Exception calling \"SearchPath\" with \"1\" argument(s): \"Could not
locate the following executable C:\\Install\\Keycloak\\keycloak-6.0.1\\keycloak-6.0.1\\bin\\kcadm.exe

有人有建议吗?有人曾经在 Windows 上将 Admin CLI 与 Ansible 一起使用吗?

谢谢 莉娜

【问题讨论】:

    标签: ansible devops keycloak


    【解决方案1】:

    不是 Windows,而是 Linux,我们也在做同样的事情,在安装 keycloak 之后,我们从 kcadm 添加 Realm/Client/User/Group/Mapper 等,并且它的过程非常顺利,你必须做的一件事请记住,如果您打算使用 kcadm 只是一个从命令行使用 Keycloak 的管理工具,那么对于 linux 和 Windows 必须使用 kcadm.shkcadm.bat。这些是从命令提示符运行 Keycloak 命令的核心脚本。

    因此您必须使用 kcadm.sh 运行命令,或者您必须转到存在 kcadm.batkcadm.sh 文件的 keycloak 目录,然后运行命令,所以在我们的例子中,我们正在运行 shell 脚本文件Ansible 和 shell 脚本包含这样的命令

    STEP1:启用 HTTPS

    /opt/keycloak/bin/kcadm.sh config truststore --trustpass keycloak  /opt/keycloak/security/ssl/keycloak.jks
    

    STEP2:使用客户端 admin-cli 登录

    /opt/keycloak/bin/kcadm.sh config credentials --server https://{{keycloak_server_IP}}:{{keycloak_port}}/auth --realm master --user admin --password admin --client admin-cli
    

    STEP3:创建一个新领域TEST

    /opt/keycloak/bin/kcadm.sh create realms -s realm=SURE -s id="TEST" -s enabled=true
    
    1. 如果您的 Keycloak 在 HTTPS 上运行,请使用第一个命令。
    2. 使用master realm 登录keycloak。
    3. 现在成功登录后,您可以运行其他命令了。

    【讨论】:

      【解决方案2】:

      我也在尝试在 Windows 中实现相同的功能。我有一个服务提供者文件,它是一个 XML 文档。我想使用 keycloak CLI 创建客户端,但无法使用服务提供者 xml 文件创建客户端。虽然用于创建客户端的命令是:

      kcadm.bat create clients -r demo -s clientId=adminconsole -s "redirectUris=[\"https://localhost:8080/admin-web/*\"]" -s protocol=saml

      此命令正在创建客户端,但不像通过导入文件所做的那样。可能需要使用一些额外的参数来提供更多信息,例如签名证书、加密证书等的值。

      对于提出的问题,您可以使用:

      • 名称:Keycloak 配置 - 创建领域、用户、客户端并设置用户密码

        become_method: runas
        
        become: yes
        
        vars:
        
          ansible_become_user: "{{ ansible_user }}"
        
          ansible_become_pass: "{{ ansible_password }}"
        
        ansible.windows.win_command: cmd.exe
        
        args:
        
          chdir: '{{ keycloak_bin_path }}'
        
          stdin: "{{ item.From }}"
        
        loop:
        
          - { From: 'kcadm.bat config credentials --server https://localhost:8081/auth --realm master --user {{ keycloak_admin }} --password {{ keycloak_password }}' }
        
          - { From: 'kcadm.bat create realms -s realm={{ keycloak_realm }} -s enabled=true' }
        
          - { From: 'kcadm.bat create users -r {{ keycloak_realm }} -s username={{ keycloak_user }} -s enabled=true -o --fields id,username' }
        
          - { From: 'kcadm.bat set-password -r {{ keycloak_realm }} --username {{ keycloak_user }} --new-password {{ keycloak_user_pass }} -t' }
        
          - { From: 'kcadm.bat create clients -r {{ keycloak_realm }} -s clientId=adminconsole -s "redirectUris=[\"https://localhost:8080/admin-web/*"]" -s protocol=saml' }
        

      【讨论】:

      • “我也是”不是答案。
      • 好吧,我提到它是因为我需要帮助来使用带有属性的 CLI 在 Keycloak 中创建客户端。我也确实回答了需要什么的问题。对于 keycloak,我已经发布了一个尚未得到答案的问题。 stackoverflow.com/questions/66313664/…
      • 我已经删除了这个问题,所以它纯粹是一个答案。随意继续编辑,但请将问题作为问题发布,而不是将其合并到答案空间中。
      猜你喜欢
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 2014-06-19
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      相关资源
      最近更新 更多