我使用以下块来检测自制程序是否已安装。在新版本中,自制程序安装在/opt/文件夹中,而我的 \xe2\x80\x9csolution\xe2\x80\x9d 不再工作。检查命令是否可用的更好方法是什么?
- name: Check if homebrew is installed\n stat:\n path: "/usr/local/bin/brew"\n register: "homebrew_check"\nRun Code Online (Sandbox Code Playgroud)\n我知道which一些考虑因素command -v,但假设 Ansible 本身应该有一些东西,我错了吗?
就一个
...检查命令是否可用的方法
哪个是
通过脚本直接从二进制文件安装,并且不会在包管理器中留下任何痕迹
直接检查它的版本也可能是可行的。在示例中这样做
---
- hosts: test.example.com
become: no
gather_facts: no
tasks:
- name: Gather installed Java version, if there is any
shell:
cmd: java -version 2>&1 | head -1 | cut -d '"' -f 2
register: result
check_mode: false
changed_when: false
failed_when: result.rc != 0 and result.rc != 127
- name: Set default version, if there is no
set_fact:
result:
stdout_lines: "0.0.0_000"
when: "'command not found' in result.stdout"
check_mode: false
- name: Report result
debug:
msg: "{{ result.stdout_lines }}"
check_mode: false
Run Code Online (Sandbox Code Playgroud)
根据安装的版本,如有必要,可以调用安装程序或更新程序来安装或更新到最新版本。
另外,可以通过find_module 检查文件是否存在于某处。
在我看来,在任务中使用which或是可以的,因为自制程序是通过脚本直接从二进制文件安装的,并且不会在包管理器中留下任何痕迹。commandcommand
同时,由于ansible支持Homebrew,我们可以使用该community.general.homebrew模块来测试它是否可用。
笔记:
login、.bashrc、...)。如果您的二进制文件安装在任务的可用路径之外,您将得到错误的否定响应。这是想法,适应您的需求。
剧本:
---
- name: Test homebrew presence
hosts: localhost
gather_facts: false
tasks:
- name: Check if homebrew is available
block:
- name: try using homebrew in check_mode (no changes)
homebrew:
update_homebrew: true
check_mode: true
- name: Homebrew available
debug:
msg: Homebrew is installed
rescue:
- name: No homebrew
debug:
msg: Homebrew is not installed
Run Code Online (Sandbox Code Playgroud)
给出(没有自制软件):
PLAY [Test homebrew presence] ***********************************************
TASK [try using homebrew in check_mode (no changes)] ************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to find required executable \"brew\" in paths: /usr/local/bin:/home/user/.local/bin:/home/user/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"}
TASK [No homebrew] **********************************************************
ok: [localhost] => {
"msg": "Homebrew is not installed"
}
PLAY RECAP ******************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=1 ignored=0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10756 次 |
| 最近记录: |