Variabel digunakan secara ekstensif di Ansible. Tetapi salah satu hal yang membuat frustrasi tentang Ansible adalah ia menawarkan terlalu banyak kebebasan. Ini memiliki kelebihan dan kekurangan. Kerugiannya adalah kompleksitas dengan tanggung jawab yang tinggi, dan keuntungannya adalah fleksibilitas. Mari kita rekap dan atur apa yang kita ketahui tentang variabel Ansible.
Variabel dapat dibagi menjadi dua kategori:
( "Filesystem").
( "Code").
, , .
Filesystem- Code-. ? .
1.
(Inventory
, group_vars
, host_vars
, role/defaults/main.yml
role/vars/main.yml
). "" . — , . "" , , . , , vars
, block
. :
- name: Variables scope
hosts: localhost
connection: local
vars:
MY_VAR: "I am global var"
tasks:
- block:
- name: Print variable inside the block.
debug:
var: MY_VAR
vars:
MY_VAR: "I am local var"
- name: Print variable outside the block.
debug:
var: MY_VAR
PLAY [Variables scope]
TASK [Gathering Facts]
ok: [localhost]
TASK [Print variable inside the block.]
ok: [localhost] => {
"MY_VAR": "I am local var"
}
TASK [Print variable outside the block.]
ok: [localhost] => {
"MY_VAR": "I am global var"
}
, . . defaults/main.yml
. , . , , .
2. README
, , , README. ansible-galaxy init , README. , , README , . . , git, wiki-. , , wiki-. .
3.
"" ( ) . . , . , , port? , , . : — consul. — url, — consul_url.
4.
Ansible . , . : , .
:
# No name/description
- copy: dest=/tmp/text.txt, content="bla-bla"
- name: Print variable global var.
debug:
var: MY_VAR
TASK [copy]
changed: [localhost]
TASK [Print variable global var.] *
ok: [localhost] => {
"MY_VAR": "I am global var"
}
5. DRY (Don't Repeat Yourself)
Ansible . , Ansible , DRY (Don't Repeat Yourself). . , .
:
: (include/import)tasks
, (include/import)role
. ? , uri API-. , POST-. 10 uri , - . .
: send_post.yml
- name: .::::::::::::. [ Sent POST request ] .::::::::::::.
uri:
url: "{{ URL }}"
method: POST
status_code: 200
body: "{{ BODY_VAR | to_nice_json }}"
body_format: json
validate_certs: yes
client_cert: tls.crt
client_key: tls.key
register: return_values
when: BODY_VAR is defined
.
- name: Bla-bla
include_tasks: send_post.yml
vars:
URL: "{{ main_url }}/{{ item }}"
BODY_VAR: "{{ item }}"
URL BODY_VAR — .
6. (block)
, . block try / catch .
- block: ... rescue: ...
block/rescue
— ignore_errors
. , . , , - , . , .
- block: - name: ..... - name: ..... - name: ..... always: file: path: /tmp/xxxx state: absent
7. command shell
command
shell
, . , . :
when
creates
( , ).
removes
( , ).
changedwhen
.
, command
shell
.
8.
. , . . , README. . . , always
, never
— .
skip_ansible_lint
— ansible-lint
.
9.
. become
no
, . become
. :
--- - hosts: wordpress become: no ... role: - role: wordpress tasks/main.yml --- - name: Install mysql-server pkg apt: name: mysql-server state: present become: yes
10. YAML-
YAML . :
YAML
- name: Install apache httpd apt: name: apache2 state: present
- name: Install apache httpd apt: pkg=apache2 state=pesent
11. gitignore
.gitignore
, git-. .gitignore
:
*.retry */__pycache__ *.pyc *.log ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr
12. Ansible
13.
, .
14. Ansible-
Ansible. , molecule. . , .
15.
requirements.yaml:
---
- src: git@gitlab.company.com:mygroup/ansible.git
scm: git
version: "0.1"
...
:
src
scm
version
name
- : «Prometheus: ». Prometheus , , .