--- - name: Установка и настройка Golang hosts: "{{ TARGET }}" pre_tasks: - name: Проверка, установлен ли Go command: go version register: go_check failed_when: false changed_when: false - name: Извлечение версии Go из stdout set_fact: current_go_version: "{{ (go_check.stdout | regex_findall('go([0-9.]+)')) | first | default('') }}" - name: Отладка — текущая версия Go debug: msg: - "Требуется версия Go: {{ go_version }}" - "Установленная версия Go: {{ current_go_version }}" - "Принудительная установка Go: {{ force }}" - name: Проверка, нужно ли обновлять Go set_fact: go_update_needed: "{{ force | bool or current_go_version != go_version }}" tasks: - block: - name: Удаление старой установки Go file: path: "{{ go_install_path }}/go" state: absent - name: Загрузка архива Go get_url: url: "{{ go_url }}" dest: "/tmp/{{ go_tar }}" - name: Распаковка Go unarchive: src: "/tmp/{{ go_tar }}" dest: "{{ go_install_path }}" remote_src: yes when: go_update_needed post_tasks: - name: Настройка переменных окружения для Go copy: dest: "{{ go_env_path }}" content: | export GOROOT={{ go_install_path }}/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin mode: '0644' - name: Применение переменных окружения shell: source {{ go_env_path }} args: executable: /bin/bash - name: Добавляем CLI утилиты shell: GOBIN=$GOROOT/bin go install {{ item }} args: executable: /bin/bash loop: - github.com/pressly/goose/cmd/goose@latest