--- - name: Install Xcode CLI tools on Mac OS X tags: - macosx - darwin - xcode_cli_tools - xcode_tools hosts: all tasks: - name: Check Command Line Tools are already installed check_mode: false register: cli_tools_check ansible.builtin.command: xcode-select --print-path ignore_errors: true changed_when: false - name: Try headless installing command line tools when: cli_tools_check is failed block: - name: Force `softwareupdate` to list the Command Line Tools ansible.builtin.file: path: /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress state: touch mode: u=rw,g=rw,o=r - name: Get the tools' label register: cli_tools_label ansible.builtin.shell: >- /usr/sbin/softwareupdate --list | grep -B 1 -E 'Command Line Tools' | awk -F'*' '/^ *\\*/ {print $2}' | sed -e 's/^ *Label: //' -e 's/^ *//' | sort -V | tail -n1 changed_when: - cli_tools_label.rc == 0 - cli_tools_label.stdout is not match('Command Line Tools for Xcode') failed_when: cli_tools_label.rc != 0 - name: Install the tools register: headless_cli_tools_installation ansible.builtin.command: >- /usr/sbin/softwareupdate --install --agree-to-license {{ cli_tools_label.stdout | quote }} changed_when: - headless_cli_tools_installation.rc == 0 - headless_cli_tools_installation.stdout is not match('No new software available.') - name: Print message on failure when: headless_cli_tools_installation is failed ansible.builtin.fail: msg: >- Command Line Tools are not installed. Please execute 'xcode-select --install' in a terminal and accept the license.