added claude role
This commit is contained in:
1 parent
b1ce761291
commit
7450892a68
13 files changed
+296
-11
No files matched your search
@@ -0,0 +1,70 @@
|
||||
# roles/claude_code/tasks/apt.yml
|
||||
---
|
||||
- name: Create apt keyrings directory
|
||||
ansible.builtin.file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
mode: "0755"
|
||||
owner: root
|
||||
group: root
|
||||
become: true
|
||||
|
||||
- name: Download Anthropic release signing key
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ claude_code_apt_key_url }}"
|
||||
dest: "{{ claude_code_apt_key_path }}"
|
||||
mode: "0644"
|
||||
owner: root
|
||||
group: root
|
||||
become: true
|
||||
|
||||
- name: Read key fingerprint
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
set -o pipefail
|
||||
gpg --show-keys --with-colons {{ claude_code_apt_key_path | quote }} | awk -F':' '/^fpr/ {print $10; exit}'
|
||||
executable: /bin/bash
|
||||
register: claude_code_key_fpr
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
become: true
|
||||
|
||||
- name: Refuse to continue if the key fingerprint does not match
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- claude_code_key_fpr.stdout | trim | upper == claude_code_apt_key_fingerprint | upper
|
||||
fail_msg: >-
|
||||
Signing key fingerprint mismatch: got '{{ claude_code_key_fpr.stdout | trim }}',
|
||||
expected '{{ claude_code_apt_key_fingerprint }}'. Removing the key file.
|
||||
quiet: true
|
||||
register: claude_code_key_check
|
||||
ignore_errors: true
|
||||
|
||||
- name: Remove untrusted key file
|
||||
ansible.builtin.file:
|
||||
path: "{{ claude_code_apt_key_path }}"
|
||||
state: absent
|
||||
become: true
|
||||
when: claude_code_key_check is failed
|
||||
|
||||
- name: Stop if key check failed
|
||||
ansible.builtin.fail:
|
||||
msg: "{{ claude_code_key_check.msg }}"
|
||||
when: claude_code_key_check is failed
|
||||
|
||||
- name: Configure Claude Code apt repository
|
||||
ansible.builtin.apt_repository:
|
||||
repo: >-
|
||||
deb [signed-by={{ claude_code_apt_key_path }}]
|
||||
{{ claude_code_apt_repo_base }}/{{ claude_code_apt_channel }}
|
||||
{{ claude_code_apt_channel }} main
|
||||
filename: claude-code
|
||||
state: present
|
||||
update_cache: true
|
||||
become: true
|
||||
|
||||
- name: Install claude-code package
|
||||
ansible.builtin.apt:
|
||||
name: claude-code
|
||||
state: "{{ claude_code_package_state }}"
|
||||
become: true
|
||||
@@ -0,0 +1,44 @@
|
||||
# roles/claude_code/tasks/main.yml
|
||||
---
|
||||
- name: Assert a supported install method
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- claude_code_install_method in ['apt', 'native']
|
||||
- claude_code_apt_channel in ['stable', 'latest']
|
||||
fail_msg: "claude_code_install_method must be apt|native and claude_code_apt_channel stable|latest"
|
||||
quiet: true
|
||||
|
||||
- name: Assert a supported OS (Ubuntu 20.04+ / Debian 10+)
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts['os_family'] == 'Debian'
|
||||
- >-
|
||||
(ansible_facts['distribution'] == 'Ubuntu' and ansible_facts['distribution_version'] is version('20.04', '>='))
|
||||
or (ansible_facts['distribution'] == 'Debian' and ansible_facts['distribution_version'] is version('10', '>='))
|
||||
- ansible_facts['architecture'] in ['x86_64', 'aarch64']
|
||||
fail_msg: "Claude Code needs Ubuntu 20.04+/Debian 10+ on x64 or ARM64"
|
||||
quiet: true
|
||||
|
||||
- name: Install prerequisite packages
|
||||
ansible.builtin.apt:
|
||||
name: "{{ claude_code_prereq_packages }}"
|
||||
state: present
|
||||
update_cache: true
|
||||
cache_valid_time: 3600
|
||||
become: true
|
||||
|
||||
- name: Install via apt repository
|
||||
ansible.builtin.include_tasks: apt.yml
|
||||
when: claude_code_install_method == 'apt'
|
||||
|
||||
- name: Install via native installer
|
||||
ansible.builtin.include_tasks: native.yml
|
||||
when: claude_code_install_method == 'native'
|
||||
|
||||
- name: Write Claude Code settings
|
||||
ansible.builtin.include_tasks: settings.yml
|
||||
when: claude_code_settings | length > 0
|
||||
|
||||
- name: Verify installation
|
||||
ansible.builtin.include_tasks: verify.yml
|
||||
when: claude_code_verify | bool
|
||||
@@ -0,0 +1,20 @@
|
||||
# roles/claude_code/tasks/native.yml
|
||||
---
|
||||
- name: Install Claude Code with the native installer
|
||||
ansible.builtin.shell:
|
||||
cmd: set -o pipefail; curl -fsSL https://claude.ai/install.sh | bash -s {{ claude_code_native_version | quote }}
|
||||
executable: /bin/bash
|
||||
creates: "~{{ claude_code_user }}/.local/bin/claude"
|
||||
become: true
|
||||
become_user: "{{ claude_code_user }}"
|
||||
|
||||
- name: Put ~/.local/bin on PATH for login shells
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/profile.d/claude-code.sh
|
||||
content: |
|
||||
# Managed by Ansible (claude_code role)
|
||||
case ":$PATH:" in *":$HOME/.local/bin:"*) ;; *) export PATH="$HOME/.local/bin:$PATH" ;; esac
|
||||
mode: "0644"
|
||||
owner: root
|
||||
group: root
|
||||
become: true
|
||||
@@ -0,0 +1,22 @@
|
||||
# roles/claude_code/tasks/settings.yml
|
||||
---
|
||||
- name: Look up settings user
|
||||
ansible.builtin.getent:
|
||||
database: passwd
|
||||
key: "{{ claude_code_settings_user }}"
|
||||
|
||||
- name: Create ~/.claude directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ ansible_facts['getent_passwd'][claude_code_settings_user][4] }}/.claude"
|
||||
state: directory
|
||||
mode: "0700"
|
||||
owner: "{{ claude_code_settings_user }}"
|
||||
become: true
|
||||
|
||||
- name: Write ~/.claude/settings.json
|
||||
ansible.builtin.copy:
|
||||
dest: "{{ ansible_facts['getent_passwd'][claude_code_settings_user][4] }}/.claude/settings.json"
|
||||
content: "{{ claude_code_settings | to_nice_json }}\n"
|
||||
mode: "0600"
|
||||
owner: "{{ claude_code_settings_user }}"
|
||||
become: true
|
||||
@@ -0,0 +1,17 @@
|
||||
# roles/claude_code/tasks/verify.yml
|
||||
---
|
||||
- name: Check claude --version
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
if command -v claude >/dev/null 2>&1; then claude --version
|
||||
else "$HOME/.local/bin/claude" --version; fi
|
||||
executable: /bin/bash
|
||||
become: "{{ claude_code_install_method == 'native' }}"
|
||||
become_user: "{{ claude_code_user if claude_code_install_method == 'native' else omit }}"
|
||||
register: claude_code_version_out
|
||||
changed_when: false
|
||||
check_mode: false
|
||||
|
||||
- name: Show installed version
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ claude_code_version_out.stdout }}"
|
||||
Reference in new issue
Block a user