This playbook installs Spack natively on the host system from source and configures baseline shell integration.
- name: Configure Spack host
hosts: spack
become: true
vars:
spack_user: spack
spack_group: spack
spack_root: /opt/spack
spack_branch: "releases/latest"
spack_repo: "https://github.com/spack/spack.git"
tasks:
- name: Create Spack user and group
ansible.builtin.user:
name: "{{ spack_user }}"
group: "{{ spack_group }}"
shell: /bin/bash
create_home: true
system: false
- name: Install prerequisites
ansible.builtin.package:
name:
- git
- python3
- python3-pip
- python3-dev
- gcc
- g++
- gfortran
- make
- cmake
- patch
- curl
- wget
- bzip2
- xz
- zlib1g-dev
- libssl-dev
state: present
- name: Clone Spack repository
ansible.builtin.git:
repo: "{{ spack_repo }}"
dest: "{{ spack_root }}"
version: "{{ spack_branch }}"
force: false
become: true
become_user: "{{ spack_user }}"
- name: Set Spack directory ownership
ansible.builtin.file:
path: "{{ spack_root }}"
owner: "{{ spack_user }}"
group: "{{ spack_group }}"
recurse: true
mode: "u+rwX,g-wX,o-wX"
- name: Create global profile script
ansible.builtin.copy:
dest: /etc/profile.d/spack.sh
mode: "0644"
content: |
# Spack initialization script
if [ -f {{ spack_root }}/share/spack/setup-env.sh ]; then
. {{ spack_root }}/share/spack/setup-env.sh
fi
- name: Configure Spack mirrors directory
ansible.builtin.file:
path: "{{ spack_root }}/mirrors"
state: directory
owner: "{{ spack_user }}"
group: "{{ spack_group }}"
mode: "0755"
- name: Configure Spack config directory
ansible.builtin.file:
path: "{{ spack_root }}/etc/spack"
state: directory
owner: "{{ spack_user }}"
group: "{{ spack_group }}"
mode: "0755"
- name: Deploy Spack packages.yaml configuration
ansible.builtin.copy:
dest: "{{ spack_root }}/etc/spack/packages.yaml"
owner: "{{ spack_user }}"
group: "{{ spack_group }}"
mode: "0644"
content: |
packages:
all:
compiler: [gcc]
providers:
mpi: [openmpi]
blas: [openblas]
lapack: [openblas]
- name: Verify Spack version
ansible.builtin.shell: . {{ spack_root }}/share/spack/setup-env.sh && spack --version
args:
executable: /bin/bash
become: true
become_user: "{{ spack_user }}"
register: spack_version
changed_when: false
- name: Show Spack version output
ansible.builtin.debug:
var: spack_version.stdout_lines
- name: Show Spack compiler list
ansible.builtin.shell: . {{ spack_root }}/share/spack/setup-env.sh && spack compiler find --scope site
args:
executable: /bin/bash
become: true
become_user: "{{ spack_user }}"
register: spack_compilers
changed_when: false
- name: Display found compilers
ansible.builtin.debug:
var: spack_compilers.stdout_lines
releases/latest for deterministic provisioning.