diff --git a/PROJECT_SCRIPTS.md b/PROJECT_SCRIPTS.md index c1ebb9d..35ac245 100644 --- a/PROJECT_SCRIPTS.md +++ b/PROJECT_SCRIPTS.md @@ -7,10 +7,14 @@ ```text ansible.cfg inventory.ini -facts.yml -add-ssh-key.yml -bootstrap-new-client.yml -generate-ssh-config.yml +playbooks/ + facts.yml + add-ssh-key.yml + bootstrap-new-client.yml + generate-ssh-config.yml + shell-setup.yml +files/ + config.fish ``` ## ansible.cfg @@ -51,7 +55,7 @@ monitoring ansible_host=192.168.8.176 ansible_user=vrubel ```bash ansible proxmox_vms -m ping -ansible-playbook facts.yml +ansible-playbook playbooks/facts.yml ``` ## facts.yml @@ -70,7 +74,7 @@ ansible-playbook facts.yml Запуск: ```bash -ansible-playbook facts.yml +ansible-playbook playbooks/facts.yml ``` Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит. @@ -88,19 +92,19 @@ Playbook для добавления публичного SSH-ключа в `aut Запуск, если доступ по ключу уже есть: ```bash -ansible-playbook add-ssh-key.yml +ansible-playbook playbooks/add-ssh-key.yml ``` Если надо добавить не текущий ключ, а другой публичный ключ из файла: ```bash -ansible-playbook add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub" +ansible-playbook playbooks/add-ssh-key.yml -e "key_file=$HOME/Downloads/new-client.pub" ``` Или, например: ```bash -ansible-playbook add-ssh-key.yml -e "key_file=$HOME/infra/ansible/keys/laptop.pub" +ansible-playbook playbooks/add-ssh-key.yml -e "key_file=$HOME/infra/ansible/keys/laptop.pub" ``` Важно: файл должен быть именно публичным ключом, то есть `.pub`. Приватный ключ `id_ed25519` в репозиторий не добавлять и никому не передавать. @@ -119,7 +123,7 @@ Playbook для первичной настройки нового клиент Запуск на новом компьютере: ```bash -ansible-playbook bootstrap-new-client.yml --ask-pass +ansible-playbook playbooks/bootstrap-new-client.yml --ask-pass ``` Ansible спросит SSH-пароль пользователя `vrubel`. @@ -157,13 +161,13 @@ Host docker-prodVM Сначала безопасная проверка: ```bash -ansible-playbook generate-ssh-config.yml --check --diff +ansible-playbook playbooks/generate-ssh-config.yml --check --diff ``` Если diff выглядит нормально, применить: ```bash -ansible-playbook generate-ssh-config.yml +ansible-playbook playbooks/generate-ssh-config.yml ``` После этого можно заходить так: @@ -176,14 +180,30 @@ ssh hermesVM Playbook управляет только блоком между маркерами `ANSIBLE MANAGED HOME VM HOSTS`. Остальные ручные записи в `~/.ssh/config` не трогает. +## shell-setup.yml + +Playbook для установки fish, neovim и CLI-утилит (lsd, bat, grc, zoxide) с настройкой fish как shell по умолчанию. + +Устанавливает пакеты через универсальный модуль `package` (работает и с apt, и с dnf). Для Debian создаёт симлинк `batcat -> bat`. + +Копирует `files/config.fish` в `~/.config/fish/config.fish` и меняет shell пользователя на `/usr/bin/fish`. + +Запуск: + +```bash +ansible-playbook playbooks/shell-setup.yml +``` + +После выполнения нужно перелогиниться для применения fish. + ## Типовой сценарий для нового компьютера ```bash sudo pacman -S ansible sshpass git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git cd ansibleHostsHomeVM -ansible-playbook bootstrap-new-client.yml --ask-pass +ansible-playbook playbooks/bootstrap-new-client.yml --ask-pass ansible proxmox_vms -m ping -ansible-playbook generate-ssh-config.yml --check --diff -ansible-playbook generate-ssh-config.yml +ansible-playbook playbooks/generate-ssh-config.yml --check --diff +ansible-playbook playbooks/generate-ssh-config.yml ``` diff --git a/ansible.cfg b/ansible.cfg index b223f14..ad068b6 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -2,3 +2,7 @@ inventory = inventory.ini interpreter_python = auto_silent host_key_checking = True +timeout = 60 + +[ssh_connection] +ssh_args = -o ConnectTimeout=60 diff --git a/files/config.fish b/files/config.fish new file mode 100644 index 0000000..febf4f8 --- /dev/null +++ b/files/config.fish @@ -0,0 +1,26 @@ +if status is-interactive + # Commands to run in interactive sessions can go here + set -g fish_greeting "" + alias ls='lsd' + alias l='ls -l' + alias la='ls -a' + alias lla='ls -la' + alias lt='ls --tree' + alias cat='bat' + alias ping='grc ping' + alias ping='grc --colour=auto ping' + alias traceroute='grc --colour=auto traceroute' + alias ip='grc --colour=auto ip' + alias ss='grc --colour=auto ss' + + alias df='grc --colour=auto df' + alias free='grc --colour=auto free' + alias ps='grc --colour=auto ps' + alias mount='grc --colour=auto mount' + + alias systemctl='grc --colour=auto systemctl' + alias journalctl='grc --colour=auto journalctl' + + zoxide init fish | source + +end diff --git a/files/fish_plugins b/files/fish_plugins new file mode 100644 index 0000000..eeb9cbf --- /dev/null +++ b/files/fish_plugins @@ -0,0 +1 @@ +ilancosman/tide@v6 diff --git a/inventory.ini b/inventory.ini index 01b8197..4d4e1b3 100644 --- a/inventory.ini +++ b/inventory.ini @@ -6,3 +6,4 @@ hermes ansible_host=192.168.8.173 ansible_user=vrubel docker-test ansible_host=192.168.8.174 ansible_user=vrubel cicd ansible_host=192.168.8.175 ansible_user=vrubel monitoring ansible_host=192.168.8.176 ansible_user=vrubel +mediavm ansible_host=192.168.8.177 ansible_user=vrubel diff --git a/add-ssh-key.yml b/playbooks/add-ssh-key.yml similarity index 100% rename from add-ssh-key.yml rename to playbooks/add-ssh-key.yml diff --git a/bootstrap-new-client.yml b/playbooks/bootstrap-new-client.yml similarity index 100% rename from bootstrap-new-client.yml rename to playbooks/bootstrap-new-client.yml diff --git a/facts.yml b/playbooks/facts.yml similarity index 100% rename from facts.yml rename to playbooks/facts.yml diff --git a/generate-ssh-config.yml b/playbooks/generate-ssh-config.yml similarity index 100% rename from generate-ssh-config.yml rename to playbooks/generate-ssh-config.yml diff --git a/playbooks/shell-setup.yml b/playbooks/shell-setup.yml new file mode 100644 index 0000000..122341c --- /dev/null +++ b/playbooks/shell-setup.yml @@ -0,0 +1,88 @@ +--- +- name: Install fish, neovim, modern CLI tools and set fish as default shell + hosts: proxmox_vms + gather_facts: true + become: true + + vars: + target_user: vrubel + packages: + - fish + - neovim + - lsd + - bat + - grc + - zoxide + - curl + - git + + tasks: + - name: Install packages + ansible.builtin.package: + name: "{{ packages }}" + state: present + + - name: Symlink batcat -> bat (Debian workaround) + ansible.builtin.file: + src: /usr/bin/batcat + dest: /usr/local/bin/bat + state: link + when: ansible_facts["os_family"] == "Debian" + ignore_errors: true + + - name: Create ~/.config/fish directory + ansible.builtin.file: + path: "/home/{{ target_user }}/.config/fish" + state: directory + mode: "0755" + owner: "{{ target_user }}" + group: "{{ target_user }}" + + - name: Deploy fish config + ansible.builtin.copy: + src: ../files/config.fish + dest: "/home/{{ target_user }}/.config/fish/config.fish" + owner: "{{ target_user }}" + group: "{{ target_user }}" + mode: "0644" + + - name: Deploy fish_plugins + ansible.builtin.copy: + src: ../files/fish_plugins + dest: "/home/{{ target_user }}/.config/fish/fish_plugins" + owner: "{{ target_user }}" + group: "{{ target_user }}" + mode: "0644" + + - name: Install fisher + become_user: "{{ target_user }}" + ansible.builtin.shell: + cmd: > + curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && + fisher install jorgebucaran/fisher + executable: /usr/bin/fish + creates: "/home/{{ target_user }}/.config/fish/functions/fisher.fish" + + - name: Run fisher update to install plugins + become_user: "{{ target_user }}" + ansible.builtin.shell: + cmd: fisher update + executable: /usr/bin/fish + changed_when: true + + - name: Clone LazyVim starter + become_user: "{{ target_user }}" + ansible.builtin.git: + repo: https://github.com/LazyVim/starter + dest: "/home/{{ target_user }}/.config/nvim" + force: true + + - name: Remove .git from nvim config + ansible.builtin.file: + path: "/home/{{ target_user }}/.config/nvim/.git" + state: absent + + - name: Set fish as default shell + ansible.builtin.user: + name: "{{ target_user }}" + shell: /usr/bin/fish