Ansible在AIX上安装WebSphere Liberty ND新版本失败求助
问题分析与解决办法
核心原因推测
手动执行安装命令成功但Ansible任务失败,且listAvailablePackages仅能识别旧版本,核心原因大概率是IBM Installation Manager(IM)的仓库缓存未更新,或是Ansible执行环境与手动登录环境存在差异,导致无法获取最新的仓库元数据。
具体原因拆解
- IM缓存未刷新:IM会本地缓存仓库的包信息,Ansible任务执行时复用了旧缓存,未拉取最新的仓库元数据;而手动执行时IM可能自动触发了缓存刷新,或你之前手动更新过缓存。
- 执行环境差异:
- 环境变量缺失:Ansible通过
become切换用户时,未继承手动登录时的关键环境变量(如代理配置HTTP_PROXY),导致IM无法访问IBM官方仓库获取新版本信息。 - 缓存目录权限不足:IM的缓存目录(如
/var/ibm/InstallationManager/cache或mwuser家目录下的缓存路径)权限配置异常,Ansible执行时无法写入新的缓存数据。
- 环境变量缺失:Ansible通过
解决办法
1. 在Ansible任务中强制刷新IM仓库缓存
在安装任务前添加刷新仓库的步骤,确保IM获取最新包列表:
- name: Refresh Installation Manager repository cache ansible.builtin.command: argv: - ./imcl - refreshRepository - "{{ liberty_repo }}" - -secureStorageFile - "{{ mwuser_home }}/credential.store" - -masterPasswordFile - "{{ mwuser_home }}/master_password_file.txt" chdir: "{{ eclipse_tools }}" become: true become_user: mwuser
2. 清理IM本地缓存(刷新无效时使用)
如果刷新缓存后仍无法识别新版本,可先清理缓存目录再重新刷新:
- name: Clean IM cache directory ansible.builtin.file: path: "/var/ibm/InstallationManager/cache" state: absent become: true become_user: mwuser - name: Recreate cache directory with correct permissions ansible.builtin.file: path: "/var/ibm/InstallationManager/cache" state: directory owner: mwuser group: mwgroup # 替换为实际用户组 mode: '0755' become: true
3. 确保Ansible执行环境与手动环境一致
在任务中显式传递必要环境变量(如代理),消除环境差异:
- name: Install liberty with java 8 ansible.builtin.command: argv: - ./imcl - install - "com.ibm.websphere.liberty.ND_{{ liberty_package }}" - "{{ java8_package }}" - -repositories - "{{ liberty_repo }}" - -installationDirectory - "{{ wlp_home }}" - -sharedResourcesDirectory - "{{ shared_directory }}" - -secureStorageFile - "{{ mwuser_home }}/credential.store" - -masterPasswordFile - "{{ mwuser_home }}/master_password_file.txt" - -acceptLicense chdir: "{{ eclipse_tools }}" environment: HTTP_PROXY: "{{ http_proxy | default('') }}" HTTPS_PROXY: "{{ https_proxy | default('') }}" register: liberty_install changed_when: liberty_install.rc != 0 become: true become_user: mwuser
4. 验证IM版本兼容性
检查IM版本是否支持新版本Liberty的元数据格式,若版本过旧则先升级:
- name: Check current IM version ansible.builtin.command: argv: - ./imcl - version chdir: "{{ eclipse_tools }}" register: im_version become: true become_user: mwuser - debug: var: im_version.stdout
若版本过低,参考IBM官方文档完成IM升级后再执行安装任务。
内容的提问来源于stack exchange,提问作者Jason Skeel
相关产品推荐
相关产品推荐

