Reorganize project: separate playbooks/ and files/, add shell-setup (fish+nvim+tide+lazyvim)
This commit is contained in:
parent
9bed146909
commit
b5cabaf1fe
10 changed files with 155 additions and 15 deletions
|
|
@ -7,10 +7,14 @@
|
||||||
```text
|
```text
|
||||||
ansible.cfg
|
ansible.cfg
|
||||||
inventory.ini
|
inventory.ini
|
||||||
|
playbooks/
|
||||||
facts.yml
|
facts.yml
|
||||||
add-ssh-key.yml
|
add-ssh-key.yml
|
||||||
bootstrap-new-client.yml
|
bootstrap-new-client.yml
|
||||||
generate-ssh-config.yml
|
generate-ssh-config.yml
|
||||||
|
shell-setup.yml
|
||||||
|
files/
|
||||||
|
config.fish
|
||||||
```
|
```
|
||||||
|
|
||||||
## ansible.cfg
|
## ansible.cfg
|
||||||
|
|
@ -51,7 +55,7 @@ monitoring ansible_host=192.168.8.176 ansible_user=vrubel
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ansible proxmox_vms -m ping
|
ansible proxmox_vms -m ping
|
||||||
ansible-playbook facts.yml
|
ansible-playbook playbooks/facts.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
## facts.yml
|
## facts.yml
|
||||||
|
|
@ -70,7 +74,7 @@ ansible-playbook facts.yml
|
||||||
Запуск:
|
Запуск:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ansible-playbook facts.yml
|
ansible-playbook playbooks/facts.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит.
|
Используется для проверки, какие машины Ubuntu/Debian, какие Fedora/RedHat, и какой пакетный менеджер Ansible видит.
|
||||||
|
|
@ -88,19 +92,19 @@ Playbook для добавления публичного SSH-ключа в `aut
|
||||||
Запуск, если доступ по ключу уже есть:
|
Запуск, если доступ по ключу уже есть:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ansible-playbook add-ssh-key.yml
|
ansible-playbook playbooks/add-ssh-key.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
Если надо добавить не текущий ключ, а другой публичный ключ из файла:
|
Если надо добавить не текущий ключ, а другой публичный ключ из файла:
|
||||||
|
|
||||||
```bash
|
```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
|
```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` в репозиторий не добавлять и никому не передавать.
|
Важно: файл должен быть именно публичным ключом, то есть `.pub`. Приватный ключ `id_ed25519` в репозиторий не добавлять и никому не передавать.
|
||||||
|
|
@ -119,7 +123,7 @@ Playbook для первичной настройки нового клиент
|
||||||
Запуск на новом компьютере:
|
Запуск на новом компьютере:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ansible-playbook bootstrap-new-client.yml --ask-pass
|
ansible-playbook playbooks/bootstrap-new-client.yml --ask-pass
|
||||||
```
|
```
|
||||||
|
|
||||||
Ansible спросит SSH-пароль пользователя `vrubel`.
|
Ansible спросит SSH-пароль пользователя `vrubel`.
|
||||||
|
|
@ -157,13 +161,13 @@ Host docker-prodVM
|
||||||
Сначала безопасная проверка:
|
Сначала безопасная проверка:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ansible-playbook generate-ssh-config.yml --check --diff
|
ansible-playbook playbooks/generate-ssh-config.yml --check --diff
|
||||||
```
|
```
|
||||||
|
|
||||||
Если diff выглядит нормально, применить:
|
Если diff выглядит нормально, применить:
|
||||||
|
|
||||||
```bash
|
```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` не трогает.
|
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
|
```bash
|
||||||
sudo pacman -S ansible sshpass
|
sudo pacman -S ansible sshpass
|
||||||
git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git
|
git clone git@github.com:vrubelroman/ansibleHostsHomeVM.git
|
||||||
cd ansibleHostsHomeVM
|
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 proxmox_vms -m ping
|
||||||
ansible-playbook generate-ssh-config.yml --check --diff
|
ansible-playbook playbooks/generate-ssh-config.yml --check --diff
|
||||||
ansible-playbook generate-ssh-config.yml
|
ansible-playbook playbooks/generate-ssh-config.yml
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -2,3 +2,7 @@
|
||||||
inventory = inventory.ini
|
inventory = inventory.ini
|
||||||
interpreter_python = auto_silent
|
interpreter_python = auto_silent
|
||||||
host_key_checking = True
|
host_key_checking = True
|
||||||
|
timeout = 60
|
||||||
|
|
||||||
|
[ssh_connection]
|
||||||
|
ssh_args = -o ConnectTimeout=60
|
||||||
|
|
|
||||||
26
files/config.fish
Normal file
26
files/config.fish
Normal file
|
|
@ -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
|
||||||
1
files/fish_plugins
Normal file
1
files/fish_plugins
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
ilancosman/tide@v6
|
||||||
|
|
@ -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
|
docker-test ansible_host=192.168.8.174 ansible_user=vrubel
|
||||||
cicd ansible_host=192.168.8.175 ansible_user=vrubel
|
cicd ansible_host=192.168.8.175 ansible_user=vrubel
|
||||||
monitoring ansible_host=192.168.8.176 ansible_user=vrubel
|
monitoring ansible_host=192.168.8.176 ansible_user=vrubel
|
||||||
|
mediavm ansible_host=192.168.8.177 ansible_user=vrubel
|
||||||
|
|
|
||||||
88
playbooks/shell-setup.yml
Normal file
88
playbooks/shell-setup.yml
Normal file
|
|
@ -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
|
||||||
Loading…
Add table
Add a link
Reference in a new issue