Ora suwe aku kudu nulis sawetara playbook Ansible kanggo nyiapake server kanggo nggunakake aplikasi Rails. Lan, nggumunake, aku ora nemokake manual langkah-langkah sing gampang. Aku ora pengin nyalin playbook wong liya tanpa mangerteni apa sing kedadeyan, lan pungkasane aku kudu maca dokumentasi, ngumpulake kabeh dhewe. Mbok menawa aku bisa mbantu wong nyepetake proses iki kanthi bantuan artikel iki.
Wangsulan: Bab ingkang sapisanan mangertos iku ansible menehi sampeyan karo antarmuka trep kanggo nindakake dhaftar predefined saka tumindak ing server remot (s) liwat SSH. Ora ana sihir ing kene, sampeyan ora bisa nginstal plugin lan entuk panyebaran nol downtime aplikasi sampeyan kanthi docker, ngawasi lan barang-barang liyane sing metu saka kothak. Kanggo nulis playbook, sampeyan kudu ngerti persis apa sing arep ditindakake lan kepiye carane. Mulane aku ora puas karo playbook sing wis digawe saka GitHub, utawa artikel kaya: "Salin lan mbukak, bakal bisa."
Apa sing kita butuhake?
Kaya sing wis dakkandhakake, kanggo nulis playbook sampeyan kudu ngerti apa sing arep ditindakake lan kepiye carane. Ayo mutusake apa sing dibutuhake. Kanggo aplikasi Rails kita butuh sawetara paket sistem: nginx, postgresql (redis, etc). Kajaba iku, kita butuh versi ruby khusus. Luwih becik nginstal liwat rbenv (rvm, asdf...). Mlaku kabeh iki minangka pangguna root mesthi dadi ide sing ala, dadi sampeyan kudu nggawe pangguna sing kapisah lan ngatur hak-hak kasebut. Sawise iki, sampeyan kudu ngunggah kode kita menyang server, nyalin konfigurasi kanggo nginx, postgres, etc lan miwiti kabeh layanan kasebut.
Akibaté, urutan tumindak kaya ing ngisor iki:
- Mlebet minangka root
- nginstal paket sistem
- nggawe pangguna anyar, ngatur hak, tombol ssh
- ngatur paket sistem (nginx etc) lan mbukak
- Kita nggawe pangguna ing database (sampeyan bisa langsung nggawe database)
- Mlebet minangka pangguna anyar
- Instal rbenv lan ruby
- Nginstal bundler
- Ngunggah kode aplikasi
- Miwiti server Puma
Kajaba iku, tahap pungkasan bisa ditindakake kanthi nggunakake capistrano, paling ora saka kothak bisa nyalin kode menyang direktori rilis, ngalih rilis kanthi symlink nalika panyebaran sukses, nyalin konfigurasi saka direktori sing dienggo bareng, miwiti maneh puma, lsp. Kabeh iki bisa ditindakake nggunakake Ansible, nanging kenapa?
Struktur berkas
Ansible wis ketat
Playbook prasaja
Playbook minangka file yml sing, nggunakake sintaks khusus, nggambarake apa sing kudu ditindakake Ansible lan kepiye carane. Ayo nggawe playbook pisanan sing ora nindakake apa-apa:
---
- name: Simple playbook
hosts: all
Kene kita mung ngomong sing playbook kita disebut Simple Playbook
lan sing isine kudu kaleksanan kanggo kabeh sarwa dumadi. Kita bisa nyimpen ing / ansible direktori karo jeneng playbook.yml
lan nyoba kanggo mbukak:
ansible-playbook ./playbook.yml
PLAY [Simple Playbook] ************************************************************************************************************************************
skipping: no hosts matched
Ansible ujar manawa ora ngerti host sing cocog karo kabeh dhaptar. Padha kudu kadhaptar ing khusus
Ayo nggawe ing direktori ansible sing padha:
123.123.123.123
Iki carane kita mung nemtokake host (saenipun host VPS kita kanggo testing, utawa sampeyan bisa ndhaftar localhost) lan nyimpen ing jeneng inventory
.
Sampeyan bisa nyoba mbukak ansible karo file inventaris:
ansible-playbook ./playbook.yml -i inventory
PLAY [Simple Playbook] ************************************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************************************
PLAY RECAP ************************************************************************************************************************************
Yen sampeyan duwe akses ssh menyang host sing ditemtokake, banjur ansible bakal nyambung lan ngumpulake informasi babagan sistem remot. (TUGAS standar [Nglumpukake Fakta]) sawise iku bakal menehi laporan singkat babagan eksekusi (PLAY RECAP).
Kanthi gawan, sambungan nggunakake jeneng pangguna sing sampeyan mlebu ing sistem. Paling kamungkinan ora bakal ing inang. Ing file playbook, sampeyan bisa nemtokake pangguna sing digunakake kanggo nyambungake nggunakake arahan remote_user. Uga, informasi babagan sistem remot bisa uga asring ora perlu kanggo sampeyan lan sampeyan ora perlu mbuwang wektu kanggo ngumpulake. Tugas iki uga bisa dipateni:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
Coba mbukak playbook maneh lan priksa manawa sambungan bisa digunakake. (Yen sampeyan nemtokake pangguna root, sampeyan uga kudu nemtokake arahan dadi: bener kanggo entuk hak sing luwih dhuwur. Kaya sing ditulis ing dokumentasi: become set to ‘true’/’yes’ to activate privilege escalation.
sanajan ora sakabehe jelas sebabe).
Mungkin sampeyan bakal nampa kesalahan amarga kasunyatan sing ansible ora bisa nemtokake interpreter Python, banjur sampeyan bisa nemtokake kanthi manual:
ansible_python_interpreter: /usr/bin/python3
Sampeyan bisa mangerteni ngendi sampeyan duwe python karo printah whereis python
.
Nginstal paket sistem
Distribusi standar Ansible kalebu akeh modul kanggo nggarap macem-macem paket sistem, mula kita ora kudu nulis skrip bash kanthi alasan apa wae. Saiki kita butuh salah siji saka modul iki kanggo nganyari sistem lan nginstal paket sistem. Aku duwe Ubuntu Linux ing VPS, supaya nginstal paket sing digunakake apt-get
и
Ayo ditambahake playbook kita karo tugas pisanan:
---
- name: Simple playbook
hosts: all
remote_user: root
become: true
gather_facts: no
tasks:
- name: Update system
apt: update_cache=yes
- name: Install system dependencies
apt:
name: git,nginx,redis,postgresql,postgresql-contrib
state: present
Tugas persis tugas sing bakal ditindakake Ansible ing server remot. Kita menehi jeneng tugas supaya bisa nglacak eksekusi ing log. Lan kita njlèntrèhaké, nggunakake sintaks modul tartamtu, apa sing kudu dilakoni. Ing kasus iki apt: update_cache=yes
- ngandika nganyari paket sistem nggunakake modul apt. Prentah kapindho rada rumit. We pass dhaftar paket kanggo modul apt lan ngandika sing lagi state
kudu dadi present
, yaiku, kita ngomong nginstal paket kasebut. Kanthi cara sing padha, kita bisa ngandhani supaya mbusak, utawa nganyari kanthi ngganti state
. Wigati dimangerteni manawa rel bisa digunakake karo postgresql, kita butuh paket postgresql-contrib, sing saiki kita pasang. Maneh, sampeyan kudu ngerti lan nindakake iki; sing bisa ditindakake dhewe ora bakal nindakake iki.
Coba mbukak playbook maneh lan priksa manawa paket wis diinstal.
Nggawe pangguna anyar.
Kanggo nggarap pangguna, Ansible uga duwe modul - pangguna. Ayo nambah tugas liyane (Aku ndhelikake bagean playbook sing wis dingerteni ing mburi komentar supaya ora nyalin kabeh):
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: my_user
shell: /bin/bash
password: "{{ 123qweasd | password_hash('sha512') }}"
Kita nggawe pangguna anyar, nyetel schell lan sandhi. Banjur kita nemoni sawetara masalah. Apa yen jeneng panganggo kudu beda kanggo host sing beda? Lan nyimpen sandhi ing teks sing jelas ing playbook minangka ide sing ala banget. Kanggo miwiti, ayo sijine jeneng pangguna lan sandhi menyang variabel, lan ing pungkasan artikel aku bakal nuduhake carane ndhelik sandhi.
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
Variabel disetel ing playbooks nggunakake kurung kriting pindho.
Kita bakal nuduhake nilai variabel ing file inventaris:
123.123.123.123
[all:vars]
user=my_user
user_password=123qweasd
Wigati direktif [all:vars]
- ngandika sing pemblokiran sabanjuré teks punika variabel (var) lan padha ditrapake kanggo kabeh sarwa dumadi (kabeh).
Desaine uga menarik "{{ user_password | password_hash('sha512') }}"
. Bab iku ansible ora nginstal pangguna liwat user_add
kaya sampeyan bakal nindakake kanthi manual. Lan nyimpen kabeh data langsung, mulane kita uga kudu ngonversi sandhi kasebut dadi hash sadurunge, yaiku prentah iki.
Ayo nambah pangguna menyang grup sudo. Nanging, sadurunge iki, kita kudu nggawe manawa klompok kasebut ana amarga ora ana sing bakal nindakake iki kanggo kita:
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Ensure a 'sudo' group
group:
name: sudo
state: present
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
groups: "sudo"
Kabeh iku cukup prasaja, kita uga duwe modul grup kanggo nggawe grup, karo sintaks banget padha apt. Banjur cukup kanggo ndhaptar grup iki menyang pangguna (groups: "sudo"
).
Sampeyan uga migunani kanggo nambah kunci ssh menyang pangguna iki supaya kita bisa mlebu nggunakake tanpa sandhi:
---
- name: Simple playbook
# ...
tasks:
# ...
- name: Ensure a 'sudo' group
group:
name: sudo
state: present
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
groups: "sudo"
- name: Deploy SSH Key
authorized_key:
user: "{{ user }}"
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
Ing kasus iki, desain menarik "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
- nyalin isi file id_rsa.pub (jeneng sampeyan bisa uga beda-beda), yaiku bagean umum saka tombol ssh lan diunggah menyang dhaptar tombol sing sah kanggo pangguna ing server.
Kalungguhan
Kabeh telung tugas kanggo nggawe nggunakake bisa gampang diklasifikasikaké dadi siji klompok tugas, lan iku bakal dadi apike kanggo nyimpen klompok iki kapisah saka playbook utama supaya ora tuwuh gedhe banget. Kanggo maksud iki, Ansible wis
Miturut struktur file sing dituduhake ing wiwitan, peran kudu diselehake ing direktori peran sing kapisah, kanggo saben peran ana direktori kapisah kanthi jeneng sing padha, ing njero direktori tugas, file, template, dll.
Ayo nggawe struktur file: ./ansible/roles/user/tasks/main.yml
(utama minangka file utama sing bakal dimuat lan dieksekusi nalika peran disambungake menyang playbook; file peran liyane bisa disambungake menyang). Saiki sampeyan bisa nransfer kabeh tugas sing ana gandhengane karo pangguna menyang file iki:
# Create user and add him to groups
- name: Ensure a 'sudo' group
group:
name: sudo
state: present
- name: Add a new user
user:
name: "{{ user }}"
shell: /bin/bash
password: "{{ user_password | password_hash('sha512') }}"
groups: "sudo"
- name: Deploy SSH Key
authorized_key:
user: "{{ user }}"
key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
Ing playbook utama, sampeyan kudu nemtokake kanggo nggunakake peran pangguna:
---
- name: Simple playbook
hosts: all
remote_user: root
gather_facts: no
tasks:
- name: Update system
apt: update_cache=yes
- name: Install system dependencies
apt:
name: git,nginx,redis,postgresql,postgresql-contrib
state: present
roles:
- user
Uga, bisa uga ana gunane nganyari sistem sadurunge kabeh tugas liyane; kanggo nindakake iki, sampeyan bisa ngganti jeneng blok kasebut tasks
kang padha ditetepake ing pre_tasks
.
Nyetel nginx
Kita kudu wis nginstal Nginx; kita kudu ngatur lan mbukak. Ayo dadi langsung ing peran. Ayo nggawe struktur file:
- ansible
- roles
- nginx
- files
- tasks
- main.yml
- templates
Saiki kita butuh file lan template. Bentenipun antarane wong-wong mau sing ansible nyalin file langsung, minangka. Lan cithakan kudu duwe ekstensi j2 lan bisa nggunakake nilai variabel nggunakake kurung kriting ganda sing padha.
Ayo ngaktifake nginx main.yml
berkas. Kanggo iki, kita duwe modul systemd:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
Ing kene kita ora mung ujar manawa nginx kudu diwiwiti (yaiku, diluncurake), nanging kita langsung ujar manawa kudu diaktifake.
Saiki ayo nyalin file konfigurasi:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
- name: Copy the nginx.conf
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
backup: yes
- name: Copy template my_app.conf
template:
src: my_app_conf.j2
dest: /etc/nginx/sites-available/my_app.conf
owner: root
group: root
mode: '0644'
Kita nggawe file konfigurasi nginx utama (sampeyan bisa njupuk langsung saka server, utawa nulis dhewe). Lan uga file konfigurasi kanggo aplikasi kita ing direktori sites_available (iki ora perlu nanging migunani). Ing kasus sing sepisanan, kita nggunakake modul salinan kanggo nyalin file (file kasebut kudu ana ing /ansible/roles/nginx/files/nginx.conf
). Ing kaloro, kita nyalin cithakan, ngganti nilai variabel. Cithakan kudu ing /ansible/roles/nginx/templates/my_app.j2
). Lan bisa uga katon kaya iki:
upstream {{ app_name }} {
server unix:{{ app_path }}/shared/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name {{ server_name }} {{ inventory_hostname }};
root {{ app_path }}/current/public;
try_files $uri/index.html $uri.html $uri @{{ app_name }};
....
}
Pay manungsa waé menyang sisipan {{ app_name }}
, {{ app_path }}
, {{ server_name }}
, {{ inventory_hostname }}
- iki kabeh variabel sing nilai Ansible bakal diganti menyang cithakan sadurunge nyalin. Iki migunani yen sampeyan nggunakake playbook kanggo macem-macem klompok host. Contone, kita bisa nambah file inventaris:
[production]
123.123.123.123
[staging]
231.231.231.231
[all:vars]
user=my_user
user_password=123qweasd
[production:vars]
server_name=production
app_path=/home/www/my_app
app_name=my_app
[staging:vars]
server_name=staging
app_path=/home/www/my_stage
app_name=my_stage_app
Yen saiki kita mbukak playbook kita, bakal nindakake tugas sing ditemtokake kanggo loro host. Nanging ing wektu sing padha, kanggo host pementasan, variabel bakal beda karo produksi, lan ora mung ing peran lan playbook, nanging uga ing konfigurasi nginx. {{ inventory_hostname }}
ora perlu kasebut ing file persediaan - iki
Yen sampeyan pengin duwe file inventaris kanggo sawetara host, nanging mung mbukak kanggo siji klompok, iki bisa ditindakake kanthi printah ing ngisor iki:
ansible-playbook -i inventory ./playbook.yml -l "staging"
Pilihan liyane yaiku nduwe file inventaris sing kapisah kanggo macem-macem klompok. Utawa sampeyan bisa gabungke loro pendekatan yen sampeyan duwe akeh host beda.
Ayo bali menyang nyetel nginx. Sawise nyalin file konfigurasi, kita kudu nggawe symlink ing sitest_enabled kanggo my_app.conf saka sites_available. Lan miwiti maneh nginx.
... # old code in mail.yml
- name: Create symlink to sites-enabled
file:
src: /etc/nginx/sites-available/my_app.conf
dest: /etc/nginx/sites-enabled/my_app.conf
state: link
- name: restart nginx
service:
name: nginx
state: restarted
Kabeh iku prasaja kene - maneh modul ansible karo sintaks cukup standar. Nanging ana siji titik. Ora ana gunane miwiti maneh nginx saben wektu. Apa sampeyan ngelingi yen kita ora nulis printah kaya: "nindakake kaya iki", sintaks katon kaya "iki kudu duwe negara iki". Lan paling asring iki persis cara kerjane ansible. Yen grup wis ana, utawa paket sistem wis diinstal, banjur ansible bakal mriksa iki lan skip tugas. Uga, file ora bakal disalin yen padha rampung cocog karo sing wis ana ing server. Kita bisa njupuk kauntungan saka iki lan miwiti maneh nginx mung yen file konfigurasi wis diganti. Ana arahan registrasi kanggo iki:
# Copy nginx configs and start it
- name: enable service nginx and start
systemd:
name: nginx
state: started
enabled: yes
- name: Copy the nginx.conf
copy:
src: nginx.conf
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
backup: yes
register: restart_nginx
- name: Copy template my_app.conf
template:
src: my_app_conf.j2
dest: /etc/nginx/sites-available/my_app.conf
owner: root
group: root
mode: '0644'
register: restart_nginx
- name: Create symlink to sites-enabled
file:
src: /etc/nginx/sites-available/my_app.conf
dest: /etc/nginx/sites-enabled/my_app.conf
state: link
- name: restart nginx
service:
name: nginx
state: restarted
when: restart_nginx.changed
Yen salah siji file konfigurasi diganti, salinan bakal digawe lan variabel bakal didaftar restart_nginx
. Lan mung yen variabel iki wis didaftar, layanan bakal diwiwiti maneh.
Lan, mesthi, sampeyan kudu nambah peran nginx menyang playbook utama.
Nyetel postgresql
Kita kudu ngaktifake postgresql nggunakake systemd kanthi cara sing padha karo nginx, lan uga nggawe pangguna sing bakal digunakake kanggo ngakses database lan database kasebut dhewe.
Ayo nggawe peran /ansible/roles/postgresql/tasks/main.yml
:
# Create user in postgresql
- name: enable postgresql and start
systemd:
name: postgresql
state: started
enabled: yes
- name: Create database user
become_user: postgres
postgresql_user:
name: "{{ db_user }}"
password: "{{ db_password }}"
role_attr_flags: SUPERUSER
- name: Create database
become_user: postgres
postgresql_db:
name: "{{ db_name }}"
encoding: UTF-8
owner: "{{ db_user }}"
Aku ora bakal njlèntrèhaké carane nambah variabel kanggo inventaris, iki wis rampung kaping pirang-pirang, uga sintaks saka postgresql_db lan postgresql_user modul. Informasi liyane bisa ditemokake ing dokumentasi. Arahan sing paling menarik ing kene yaiku become_user: postgres
. Kasunyatane yaiku kanthi standar, mung pangguna postgres sing duwe akses menyang database postgresql lan mung lokal. Arahan iki ngidini kita nglakokake perintah atas jenenge pangguna iki (yen kita duwe akses, mesthi).
Uga, sampeyan bisa uga kudu nambah baris kanggo pg_hba.conf kanggo ngidini akses pangguna anyar menyang database. Iki bisa ditindakake kanthi cara sing padha nalika ngganti konfigurasi nginx.
Lan mesthi, sampeyan kudu nambah peran postgresql menyang playbook utama.
Nginstal ruby liwat rbenv
Ansible ora duwe modul kanggo nggarap rbenv, nanging diinstal kanthi kloning repositori git. Mulane, masalah iki dadi sing paling non-standar. Ayo nggawe peran kanggo dheweke /ansible/roles/ruby_rbenv/main.yml
lan ayo miwiti ngisi:
# Install rbenv and ruby
- name: Install rbenv
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/rbenv.git dest=~/.rbenv
Kita maneh nggunakake arahan become_user kanggo nggarap pangguna sing digawe kanggo tujuan kasebut. Wiwit rbenv diinstal ing direktori ngarep, lan ora global. Lan kita uga nggunakake modul git kanggo kloning repositori, nemtokake repo lan dest.
Sabanjure, kita kudu ndhaptar rbenv init ing bashrc lan nambah rbenv menyang PATH ana. Kanggo iki kita duwe modul lineinfile:
- name: Add rbenv to PATH
become_user: "{{ user }}"
lineinfile:
path: ~/.bashrc
state: present
line: 'export PATH="${HOME}/.rbenv/bin:${PATH}"'
- name: Add rbenv init to bashrc
become_user: "{{ user }}"
lineinfile:
path: ~/.bashrc
state: present
line: 'eval "$(rbenv init -)"'
Banjur sampeyan kudu nginstal ruby_build:
- name: Install ruby-build
become_user: "{{ user }}"
git: repo=https://github.com/rbenv/ruby-build.git dest=~/.rbenv/plugins/ruby-build
Lan pungkasane nginstal ruby. Iki ditindakake liwat rbenv, yaiku, mung nganggo perintah bash:
- name: Install ruby
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
rbenv install {{ ruby_version }}
args:
executable: /bin/bash
Kita ngomong prentah sing kudu ditindakake lan apa. Nanging, ing kene kita nemokake kasunyatan manawa ansible ora mbukak kode sing ana ing bashrc sadurunge nindakake perintah kasebut. Iki tegese rbenv kudu ditetepake langsung ing script padha.
Masalah sabanjure amarga kasunyatan manawa perintah cangkang ora duwe negara saka sudut pandang. Tegese, ora bakal ana mriksa otomatis apa versi ruby iki wis diinstal utawa ora. Kita bisa nindakake iki dhewe:
- name: Install ruby
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
if ! rbenv versions | grep -q {{ ruby_version }}
then rbenv install {{ ruby_version }} && rbenv global {{ ruby_version }}
fi
args:
executable: /bin/bash
Kabeh sing isih ana yaiku nginstal bundler:
- name: Install bundler
become_user: "{{ user }}"
shell: |
export PATH="${HOME}/.rbenv/bin:${PATH}"
eval "$(rbenv init -)"
gem install bundler
Lan maneh, nambah ruby_rbenv peran kita menyang playbook utama.
File sing dienggo bareng.
Umumé, persiyapan bisa rampung ing kene. Sabanjure, kabeh sing isih ana yaiku mbukak capistrano lan bakal nyalin kode kasebut dhewe, nggawe direktori sing dibutuhake lan miwiti aplikasi kasebut (yen kabeh wis dikonfigurasi kanthi bener). Nanging, capistrano asring mbutuhake file konfigurasi tambahan, kayata database.yml
utawa .env
Bisa disalin kaya file lan template kanggo nginx. Mung ana siji subtlety. Sadurunge nyalin file, sampeyan kudu nggawe struktur direktori, kaya iki:
# Copy shared files for deploy
- name: Ensure shared dir
become_user: "{{ user }}"
file:
path: "{{ app_path }}/shared/config"
state: directory
kita nemtokake mung siji direktori lan ansible bakal kanthi otomatis nggawe wong tuwa yen perlu.
Ansible Vault
Kita wis nemokake kasunyatan manawa variabel bisa ngemot data rahasia kayata sandhi pangguna. Yen sampeyan wis nggawe .env
file kanggo aplikasi, lan database.yml
banjur kudu ana data kritis sing luwih akeh. Iku bakal apik kanggo ndhelikake saka prying mata. Kanggo maksud iki digunakake
Ayo nggawe file kanggo variabel /ansible/vars/all.yml
(Ing kene sampeyan bisa nggawe file beda kanggo macem-macem klompok host, kaya ing file inventaris: production.yml, staging.yml, etc).
Kabeh variabel sing kudu dienkripsi kudu ditransfer menyang file iki nggunakake sintaks yml standar:
# System vars
user_password: 123qweasd
db_password: 123qweasd
# ENV vars
aws_access_key_id: xxxxx
aws_secret_access_key: xxxxxx
aws_bucket: bucket_name
rails_secret_key_base: very_secret_key_base
Sawise file iki bisa dienkripsi nganggo printah:
ansible-vault encrypt ./vars/all.yml
Alami, nalika enkripsi, sampeyan kudu nyetel sandhi kanggo dekripsi. Sampeyan bisa ndeleng apa sing bakal ana ing file kasebut sawise nelpon printah iki.
Kanthi bantuan saka ansible-vault decrypt
file bisa decrypted, dipunéwahi lan banjur ndhelik maneh.
Sampeyan ora perlu decrypt file kanggo bisa. Sampeyan nyimpen ndhelik lan mbukak playbook karo bantahan --ask-vault-pass
. Ansible bakal njaluk sandhi, njupuk variabel, lan nglakokake tugas. Kabeh data bakal tetep ndhelik.
Printah lengkap kanggo sawetara klompok host lan vault sing bisa katon kaya iki:
ansible-playbook -i inventory ./playbook.yml -l "staging" --ask-vault-pass
Nanging aku ora bakal menehi teks lengkap playbooks lan peran, nulis dhewe. Amarga ansible kaya ngono - yen sampeyan ora ngerti apa sing kudu ditindakake, mula ora bakal ditindakake kanggo sampeyan.
Source: www.habr.com