【问题标题】:How to execute a shell script and use the result in ansible如何执行shell脚本并在ansible中使用结果
【发布时间】:2018-02-26 08:36:57
【问题描述】:

首先,我还是个新手,所以请原谅我的无知。

我不知道这是否可能,但我正在尝试获取此命令生成的 URL:

curl -s https://api.github.com/repos/Radarr/Radarr/releases | grep linux.tar.gz | grep browser_download_url | head -1 | cut -d \" -f 4

并在游戏中使用它来下载包:

这是我的剧本:

  - name: download Radarr
    get_url:
      url: "{{ Radarr_exe_url }}" #should be the url from above
      dest: "{{ Radarr_data_path }}"
    become: true
    become_user: "{{ Radarr_user_name }}"
    notify:
      - Restart Radarr service

【问题讨论】:

    标签: linux unix automation ansible devops


    【解决方案1】:
    - name:               Get Radar exe url
      shell:              curl -s https://api.github.com/repos/Radarr/Radarr/releases | grep linux.tar.gz | grep browser_download_url | head -1 | cut -d \" -f 4
      register:           shell_output
    - set_fact:
        Radarr_exe_url : "{{ shell_output.stdout }}"
    

    【讨论】:

    • @KonstantinSuvorov 有关在 bash 中解析它的正确方法有什么建议吗?
    • 我想我可以更好地使用jq 吗?但这不是便携式的
    【解决方案2】:

    这是纯 Ansible 解决方案,当有可用模块时调用 shell 命令被认为是不好的做法:

    - hosts: localhost
      gather_facts: no
      tasks:
        - uri:
            url: https://api.github.com/repos/Radarr/Radarr/releases
            return_content: yes
            body_format: json
          changed_when: no
          register: radarr_releases
    
        - set_fact:
            Radarr_exe_url: "{{ radarr_releases.json | json_query('[0].assets[].browser_download_url') | select('search','linux.tar.gz') | first }}"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 2020-03-05
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多