目录
1.编写Playbook:具备两个play, 每个Play具备两个任务
2.在play中定义变量: play_var = play_var -> 使用debug模块输出
3.在文件中定义变量: file_var = file_var -> 使用debug模块输出
inventory_host_var = inventory_host_var -> 使用debug模块输出
inventory_group_var = inventory_group_var -> 使用debug模块输出
5.在host_vars和group_vars中定义文件:在文件中定义变量使用debug模块输出(要求定义单个变量,数组变量,和字典变量)
1.使用debug模块输出:收集事实的hostname, default_address, fqdn, kernel
5.自定义事实:使用两种方式:INI和json方式(注意格式)
一、ansible playbook
1.编写Playbook:具备两个play, 每个Play具备两个任务
[root@good ~]# vim first_playbook.yml
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [start httpd server] ******************************************************
changed: [rhce]
TASK [stop firewalld server] ***************************************************
ok: [rhce]
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [file] ********************************************************************
ok: [rhce]
TASK [user] ********************************************************************
changed: [rhce]
PLAY RECAP *********************************************************************
rhce : ok=6 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.在play中定义变量: play_var = play_var -> 使用debug模块输出
[root@good ~]# vim first_playbook.yml
[root@good ~]# ansible-playbook first_playbook.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [user] ********************************************************************
changed: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3.在文件中定义变量: file_var = file_var -> 使用debug模块输出
[root@good ~]# vim var.yml
[root@good ~]# ansible-playbook var.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [user] ********************************************************************
changed: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4.在清单文件中定义主机变量和主机组变量:
inventory_host_var = inventory_host_var -> 使用debug模块输出
[root@good ~]# vim .ansible/inventory
[root@good ~]# vim hostname.yml
[root@good ~]# ansible-playbook hostname.yml -C
PLAY [inventory_host_var] ******************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
inventory_group_var = inventory_group_var -> 使用debug模块输出
[root@good ~]# ansible-playbook hostname.yml -C
PLAY [inventory_group_var] ******************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "Hello world!"
}
PLAY RECAP *********************************************************************
rhce : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
5.在host_vars和group_vars中定义文件:在文件中定义变量使用debug模块输出(要求定义单个变量,数组变量,和字典变量)
例如,假设下列代码片段:
user1_first_name: Bob
user1_last_name: Jones
user1_home_dir: /users/bjones
user2_first_name: Anne
user2_last_name: Cook
user2_home_dir: /users/acook
这将可以改写成名为users的数组:
users:
bjones:
first_name: Bob
last_name: jones
home_dir: /users/bjones
acook:
first_name: Anne
last_name: Cook
home_dir: /users/acook
然后可以使用以下变量来访问用户数据:
# Returns 'Bob'
users.bjones.first_name
# Returns '/users/acook'
users.acook.home_dir
二、vault加密
1.创建加密文件(注意提供密码的方式:键盘输入,文件读取)
#ansible-vault create secret.yml
2.加密已有文件
#ansible-vault encrypt secret.yml secret1.yml
3.解密文件
ansible-vault decrypt secret1.yml --output=secret.decrypt.yml
4.使用--vault-id选项来对已有文件进行加密
ansible-vault encrypt --vault-id secret2.yml secret3.yml
三、事实:facts
1.使用debug模块输出:收集事实的hostname, default_address, fqdn, kernel
hostname
[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "hostname rhce"
}
PLAY RECAP *********************************************************************
rhce : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
kernel
[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "kernel 4.18.0-147.el8.x86_64"
}
PLAY RECAP *********************************************************************
rhce : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
fqdn
[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"msg": "fqdn rhce"
}
PLAY RECAP *********************************************************************
rhce : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
default_address
[root@good ~]# ansible-playbook fact.yml -C
PLAY [rhce] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [rhce]
TASK [debug] *******************************************************************
ok: [rhce] => {
"default_address": "VARIABLE IS NOT DEFINED!"
}
PLAY RECAP *********************************************************************
rhce : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.关闭事实:两种方式:
针对单个play的关闭
针对所有play的关闭
要为play禁用事实收集功能,可将gather_facts关键字设置为no
[root@good ~]# ansible-playbook fact.yml -C
PLAY [gather_facts] ************************************************************
TASK [debug] *******************************************************************
ok: [rhce] => {
"ansible_facts": {}
}
PLAY RECAP *********************************************************************
rhce : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
5.自定义事实:使用两种方式:INI和json方式(注意格式)
如果自定义事实文件保存在/etc/ansible/facts.d目录中,ansible可以找到该事实
文件的扩展名必须为.fact ,采用INI或JSON格式的纯文本文件
以下是采用INI格式编写的静态自定义事实文件。INI格式的自定义事实文件包含由一个部分定义的顶层值,后跟用于待定义的事实的键值对:
[packages]
web_package = httpd
db_package = mariadb-server
[users]
user1 = joe
user2 = jane
同样的事实可能以JSON格式提供。以下JSON事实等同于以上示例中INI格式指定的事实。JSON数据可以存储在静态文本文件中,或者通过可执行脚本输出到标准输出:
{
"packages": {
"web_package": "httpd",
"db_package": "mariadb-server"
},
"users": {
"user1": "joe",
"user2": "jane"
}
}