一、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
3.自定义事实:使用两种方式: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" } }