首页 > 其他分享 >ansible剧本

ansible剧本

时间:2024-04-26 22:45:45浏览次数:20  
标签:rsync 01 name no nginx ansible 剧本

ansible剧本

ansible中有两种模式,分别是ad-hoc模式和playbook模式

ad-hoc简而言之,就是"临时命令"
- 临时的看下远程机器的内存信息
- 临时的批量分发一个配置文件
特别小的需求,临时命令就解决

大需求,部署软件这样的复杂需求,就写剧本
https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
临时命令非常适合您很少重复的任务,例如,如果您想在圣诞节假期关闭实验室中的所有机器
Ansible ad hoc 命令使用/usr/bin/ansible命令行工具在一个或多个托管节点上自动执行单个任务,ad hoc 命令既快速又简单,但它们不可重复使用 

一.剧本是什么

既然要写剧本,就得按照剧本的格式去编写

【比如一个电影剧本】

ansible剧本_数据

电影名
演员
场景
时间
事件
台词
道具

ansible剧本,一系列的任务,按照我们期望的结果编排在一起
hosts: 定义主机角色
tasks: 具体执行的任务 
- 演员列表: 老王
    场景:
        - 场景1: 
          动作1: 

        - 场景2: 
          动作1:  

对比playbook的语法

- hosts: 需要执行的机器,nfs
  tasks:
    - 任务1:安装nfs
      动作: yum install nfs
    - 任务2:创建数据目录
        动作: mkdir -p xxxx   

在playbook中,列表是定义一个局部环境,名字可有可无,表示定义一个范围,范围内的属性都属于该列表

要注意的是每一个playbook都必须包含hosts、tasks选项,也就是你剧本,至少得有

  • hosts、某个人、某个机器
  • tasks、这人要做什么、这机器要做什么

二.修改ansible的输出结果为json

json 数据转换格式,专有的语法
可以在网络中传输
发给后端 python (python的数据类型,去解析json的数据格式,处理)
也可以发给前端 (js, js解析json的数据格式,然后处理)
运维怎么处理json,jq命令,(获取到json数据后,提取json的数据)

# 1.修改ansible的配置文件,让它输出的结果是一个json
   [root@ansible-1 opt]#vim /etc/ansible/ansible.cfg 

[defaults]
stdout_callback = json
bin_ansible_callbacks = True


74 stdout_callback = json
213 bin_ansible_callbacks = true

json的作用就是
定义了一堆 键值对的数据格式
根据key就可以拿到value
{ "key": "value"  } 读作字典形式

可以看到,此时ansible的命令输出结果,全部变为了json的格式
devops 运维开发
python

都是开发工程师做的
这些json数据,就可以发给后端,去处理,再最终发给前端    

三.yaml语法

ansible软件的playbook编写需要遵循YAML语法,因此我们得先学一下YAML语法结构

在线json转换yaml

https://oktools.net/json2yaml

安装nginx的示例对比

ad-hoc命令模式

[root@m01 ~]# ansible web -m yum -a "name=nginx state=absent"
[root@m01 ~]# ansible web -m shell -a "rpm -qa nginx warn=false"   



范例:
[root@ansible-1 ~]# ansible web -m yum -a "name=nginx state=absent"
{
    "custom_stats": {}, 
    "global_custom_stats": {}, 
    "plays": [
        {
            "play": {
                "duration": {
                    "end": "2024-04-23T07:47:40.138387Z", 
                    "start": "2024-04-23T07:47:25.119969Z"
                }, 
                "id": "000c2963-21e0-25a6-0ccc-00000000000b", 
                "name": "Ansible Ad-Hoc"
            }, 
            "tasks": [
                {
                    "hosts": {
                        "10.0.1.185": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "changes": {
                                "removed": [
                                    "nginx"
                                ]
                            }, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "absent", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "msg": "", 
                            "rc": 0, 
                            "results": [
                                "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package nginx.x86_64 1:1.20.1-10.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package        Arch            Version                    Repository      Size\n================================================================================\nRemoving:\n nginx          x86_64          1:1.20.1-10.el7            @epel          1.7 M\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 1.7 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : 1:nginx-1.20.1-10.el7.x86_64                                 1/1 \n  Verifying  : 1:nginx-1.20.1-10.el7.x86_64                                 1/1 \n\nRemoved:\n  nginx.x86_64 1:1.20.1-10.el7                                                  \n\nComplete!\n"
                            ]
                        }, 
                        "10.0.1.186": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": false, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "absent", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "msg": "", 
                            "rc": 0, 
                            "results": [
                                "nginx is not installed"
                            ]
                        }, 
                        "10.0.1.187": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": false, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "absent", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "msg": "", 
                            "rc": 0, 
                            "results": [
                                "nginx is not installed"
                            ]
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T07:47:40.138387Z", 
                            "start": "2024-04-23T07:47:25.178908Z"
                        }, 
                        "id": "000c2963-21e0-25a6-0ccc-00000000000d", 
                        "name": "yum"
                    }
                }
            ]
        }
    ], 
    "stats": {
        "10.0.1.185": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.186": {
            "changed": 0, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.187": {
            "changed": 0, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }
    }
}
[root@ansible-1 ~]# ansible web -m shell -a "rpm -qa nginx warn=false"
{
    "custom_stats": {}, 
    "global_custom_stats": {}, 
    "plays": [
        {
            "play": {
                "duration": {
                    "end": "2024-04-23T07:48:05.183783Z", 
                    "start": "2024-04-23T07:48:04.079601Z"
                }, 
                "id": "000c2963-21e0-a6d8-9999-00000000000b", 
                "name": "Ansible Ad-Hoc"
            }, 
            "tasks": [
                {
                    "hosts": {
                        "10.0.1.185": {
                            "_ansible_no_log": false, 
                            "action": "command", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "cmd": "rpm -qa nginx", 
                            "delta": "0:00:00.308892", 
                            "end": "2024-04-23 15:48:04.849073", 
                            "invocation": {
                                "module_args": {
                                    "_raw_params": "rpm -qa nginx", 
                                    "_uses_shell": true, 
                                    "argv": null, 
                                    "chdir": null, 
                                    "creates": null, 
                                    "executable": null, 
                                    "removes": null, 
                                    "stdin": null, 
                                    "stdin_add_newline": true, 
                                    "strip_empty_ends": true, 
                                    "warn": false
                                }
                            }, 
                            "rc": 0, 
                            "start": "2024-04-23 15:48:04.540181", 
                            "stderr": "", 
                            "stderr_lines": [], 
                            "stdout": "", 
                            "stdout_lines": []
                        }, 
                        "10.0.1.186": {
                            "_ansible_no_log": false, 
                            "action": "command", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "cmd": "rpm -qa nginx", 
                            "delta": "0:00:00.579037", 
                            "end": "2024-04-23 15:48:05.131347", 
                            "invocation": {
                                "module_args": {
                                    "_raw_params": "rpm -qa nginx", 
                                    "_uses_shell": true, 
                                    "argv": null, 
                                    "chdir": null, 
                                    "creates": null, 
                                    "executable": null, 
                                    "removes": null, 
                                    "stdin": null, 
                                    "stdin_add_newline": true, 
                                    "strip_empty_ends": true, 
                                    "warn": false
                                }
                            }, 
                            "rc": 0, 
                            "start": "2024-04-23 15:48:04.552310", 
                            "stderr": "", 
                            "stderr_lines": [], 
                            "stdout": "", 
                            "stdout_lines": []
                        }, 
                        "10.0.1.187": {
                            "_ansible_no_log": false, 
                            "action": "command", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "cmd": "rpm -qa nginx", 
                            "delta": "0:00:00.600383", 
                            "end": "2024-04-23 15:48:05.163444", 
                            "invocation": {
                                "module_args": {
                                    "_raw_params": "rpm -qa nginx", 
                                    "_uses_shell": true, 
                                    "argv": null, 
                                    "chdir": null, 
                                    "creates": null, 
                                    "executable": null, 
                                    "removes": null, 
                                    "stdin": null, 
                                    "stdin_add_newline": true, 
                                    "strip_empty_ends": true, 
                                    "warn": false
                                }
                            }, 
                            "rc": 0, 
                            "start": "2024-04-23 15:48:04.563061", 
                            "stderr": "", 
                            "stderr_lines": [], 
                            "stdout": "", 
                            "stdout_lines": []
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T07:48:05.183783Z", 
                            "start": "2024-04-23T07:48:04.097785Z"
                        }, 
                        "id": "000c2963-21e0-a6d8-9999-00000000000d", 
                        "name": "shell"
                    }
                }
            ]
        }
    ], 
    "stats": {
        "10.0.1.185": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.186": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.187": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }
    }
}
[root@ansible-1 ~]# 


转变为playbook写法...

ansible web -m yum -a "name=nginx state=installed"
ansible web -m systemd -a "name=nginx state=started"   




范例:
[root@ansible-1 ~]# ansible web -m yum -a "name=nginx state=installed"
{
    "custom_stats": {}, 
    "global_custom_stats": {}, 
    "plays": [
        {
            "play": {
                "duration": {
                    "end": "2024-04-23T07:49:51.061800Z", 
                    "start": "2024-04-23T07:49:19.221027Z"
                }, 
                "id": "000c2963-21e0-dfca-59c5-00000000000b", 
                "name": "Ansible Ad-Hoc"
            }, 
            "tasks": [
                {
                    "hosts": {
                        "10.0.1.185": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "changes": {
                                "installed": [
                                    "nginx"
                                ]
                            }, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "installed", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "msg": "", 
                            "rc": 0, 
                            "results": [
                                "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirrors.aliyun.com\n * extras: mirrors.aliyun.com\n * updates: mirrors.aliyun.com\nResolving Dependencies\n--> Running transaction check\n---> Package nginx.x86_64 1:1.20.1-10.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package        Arch            Version                     Repository     Size\n================================================================================\nInstalling:\n nginx          x86_64          1:1.20.1-10.el7             epel          588 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 588 k\nInstalled size: 1.7 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : 1:nginx-1.20.1-10.el7.x86_64                                 1/1 \n  Verifying  : 1:nginx-1.20.1-10.el7.x86_64                                 1/1 \n\nInstalled:\n  nginx.x86_64 1:1.20.1-10.el7                                                  \n\nComplete!\n"
                            ]
                        }, 
                        "10.0.1.186": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "changes": {
                                "installed": [
                                    "nginx"
                                ]
                            }, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "installed", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "msg": "", 
                            "rc": 0, 
                            "results": [
                                "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirrors.aliyun.com\n * extras: mirrors.aliyun.com\n * updates: mirrors.aliyun.com\nResolving Dependencies\n--> Running transaction check\n---> Package nginx.x86_64 1:1.20.1-10.el7 will be installed\n--> Processing Dependency: nginx-filesystem = 1:1.20.1-10.el7 for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_0)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_0)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_1)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: nginx-filesystem for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: redhat-indexhtml for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libcrypto.so.1.1()(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libprofiler.so.0()(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libssl.so.1.1()(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Running transaction check\n---> Package centos-indexhtml.noarch 0:7-9.el7.centos will be installed\n---> Package gperftools-libs.x86_64 0:2.6.1-1.el7 will be installed\n---> Package nginx-filesystem.noarch 1:1.20.1-10.el7 will be installed\n---> Package openssl11-libs.x86_64 1:1.1.1k-7.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package                 Arch          Version                Repository   Size\n================================================================================\nInstalling:\n nginx                   x86_64        1:1.20.1-10.el7        epel        588 k\nInstalling for dependencies:\n centos-indexhtml        noarch        7-9.el7.centos         base         92 k\n gperftools-libs         x86_64        2.6.1-1.el7            base        272 k\n nginx-filesystem        noarch        1:1.20.1-10.el7        epel         24 k\n openssl11-libs          x86_64        1:1.1.1k-7.el7         epel        1.5 M\n\nTransaction Summary\n================================================================================\nInstall  1 Package (+4 Dependent packages)\n\nTotal download size: 2.4 M\nInstalled size: 6.7 M\nDownloading packages:\n--------------------------------------------------------------------------------\nTotal                                              846 kB/s | 2.4 MB  00:02     \nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : 1:openssl11-libs-1.1.1k-7.el7.x86_64                         1/5 \n  Installing : 1:nginx-filesystem-1.20.1-10.el7.noarch                      2/5 \n  Installing : centos-indexhtml-7-9.el7.centos.noarch                       3/5 \n  Installing : gperftools-libs-2.6.1-1.el7.x86_64                           4/5 \n  Installing : 1:nginx-1.20.1-10.el7.x86_64                                 5/5 \n  Verifying  : gperftools-libs-2.6.1-1.el7.x86_64                           1/5 \n  Verifying  : centos-indexhtml-7-9.el7.centos.noarch                       2/5 \n  Verifying  : 1:nginx-filesystem-1.20.1-10.el7.noarch                      3/5 \n  Verifying  : 1:nginx-1.20.1-10.el7.x86_64                                 4/5 \n  Verifying  : 1:openssl11-libs-1.1.1k-7.el7.x86_64                         5/5 \n\nInstalled:\n  nginx.x86_64 1:1.20.1-10.el7                                                  \n\nDependency Installed:\n  centos-indexhtml.noarch 0:7-9.el7.centos gperftools-libs.x86_64 0:2.6.1-1.el7\n  nginx-filesystem.noarch 1:1.20.1-10.el7  openssl11-libs.x86_64 1:1.1.1k-7.el7\n\nComplete!\n"
                            ]
                        }, 
                        "10.0.1.187": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "changes": {
                                "installed": [
                                    "nginx"
                                ]
                            }, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "installed", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "msg": "", 
                            "rc": 0, 
                            "results": [
                                "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirrors.aliyun.com\n * extras: mirrors.aliyun.com\n * updates: mirrors.aliyun.com\nResolving Dependencies\n--> Running transaction check\n---> Package nginx.x86_64 1:1.20.1-10.el7 will be installed\n--> Processing Dependency: nginx-filesystem = 1:1.20.1-10.el7 for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libcrypto.so.1.1(OPENSSL_1_1_0)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_0)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libssl.so.1.1(OPENSSL_1_1_1)(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: nginx-filesystem for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: redhat-indexhtml for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libcrypto.so.1.1()(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libprofiler.so.0()(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Processing Dependency: libssl.so.1.1()(64bit) for package: 1:nginx-1.20.1-10.el7.x86_64\n--> Running transaction check\n---> Package centos-indexhtml.noarch 0:7-9.el7.centos will be installed\n---> Package gperftools-libs.x86_64 0:2.6.1-1.el7 will be installed\n---> Package nginx-filesystem.noarch 1:1.20.1-10.el7 will be installed\n---> Package openssl11-libs.x86_64 1:1.1.1k-7.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package                 Arch          Version                Repository   Size\n================================================================================\nInstalling:\n nginx                   x86_64        1:1.20.1-10.el7        epel        588 k\nInstalling for dependencies:\n centos-indexhtml        noarch        7-9.el7.centos         base         92 k\n gperftools-libs         x86_64        2.6.1-1.el7            base        272 k\n nginx-filesystem        noarch        1:1.20.1-10.el7        epel         24 k\n openssl11-libs          x86_64        1:1.1.1k-7.el7         epel        1.5 M\n\nTransaction Summary\n================================================================================\nInstall  1 Package (+4 Dependent packages)\n\nTotal download size: 2.4 M\nInstalled size: 6.7 M\nDownloading packages:\n--------------------------------------------------------------------------------\nTotal                                              856 kB/s | 2.4 MB  00:02     \nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : 1:openssl11-libs-1.1.1k-7.el7.x86_64                         1/5 \n  Installing : 1:nginx-filesystem-1.20.1-10.el7.noarch                      2/5 \n  Installing : centos-indexhtml-7-9.el7.centos.noarch                       3/5 \n  Installing : gperftools-libs-2.6.1-1.el7.x86_64                           4/5 \n  Installing : 1:nginx-1.20.1-10.el7.x86_64                                 5/5 \n  Verifying  : gperftools-libs-2.6.1-1.el7.x86_64                           1/5 \n  Verifying  : centos-indexhtml-7-9.el7.centos.noarch                       2/5 \n  Verifying  : 1:nginx-filesystem-1.20.1-10.el7.noarch                      3/5 \n  Verifying  : 1:nginx-1.20.1-10.el7.x86_64                                 4/5 \n  Verifying  : 1:openssl11-libs-1.1.1k-7.el7.x86_64                         5/5 \n\nInstalled:\n  nginx.x86_64 1:1.20.1-10.el7                                                  \n\nDependency Installed:\n  centos-indexhtml.noarch 0:7-9.el7.centos gperftools-libs.x86_64 0:2.6.1-1.el7\n  nginx-filesystem.noarch 1:1.20.1-10.el7  openssl11-libs.x86_64 1:1.1.1k-7.el7\n\nComplete!\n"
                            ]
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T07:49:51.061800Z", 
                            "start": "2024-04-23T07:49:19.237931Z"
                        }, 
                        "id": "000c2963-21e0-dfca-59c5-00000000000d", 
                        "name": "yum"
                    }
                }
            ]
        }
    ], 
    "stats": {
        "10.0.1.185": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.186": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.187": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }
    }
}
[root@ansible-1 ~]# ansible web -m systemd -a "name=nginx state=started"
{
    "custom_stats": {}, 
    "global_custom_stats": {}, 
    "plays": [
        {
            "play": {
                "duration": {
                    "end": "2024-04-23T07:50:16.359625Z", 
                    "start": "2024-04-23T07:50:15.665700Z"
                }, 
                "id": "000c2963-21e0-fffa-3c71-00000000000b", 
                "name": "Ansible Ad-Hoc"
            }, 
            "tasks": [
                {
                    "hosts": {
                        "10.0.1.185": {
                            "_ansible_no_log": false, 
                            "action": "systemd", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "invocation": {
                                "module_args": {
                                    "daemon_reexec": false, 
                                    "daemon_reload": false, 
                                    "enabled": null, 
                                    "force": null, 
                                    "masked": null, 
                                    "name": "nginx", 
                                    "no_block": false, 
                                    "scope": null, 
                                    "state": "started", 
                                    "user": null
                                }
                            }, 
                            "name": "nginx", 
                            "state": "started", 
                            "status": {
                                "ActiveEnterTimestampMonotonic": "0", 
                                "ActiveExitTimestampMonotonic": "0", 
                                "ActiveState": "inactive", 
                                "After": "basic.target system.slice -.mount network-online.target remote-fs.target tmp.mount systemd-journald.socket nss-lookup.target", 
                                "AllowIsolate": "no", 
                                "AmbientCapabilities": "0", 
                                "AssertResult": "no", 
                                "AssertTimestampMonotonic": "0", 
                                "Before": "shutdown.target", 
                                "BlockIOAccounting": "no", 
                                "BlockIOWeight": "18446744073709551615", 
                                "CPUAccounting": "no", 
                                "CPUQuotaPerSecUSec": "infinity", 
                                "CPUSchedulingPolicy": "0", 
                                "CPUSchedulingPriority": "0", 
                                "CPUSchedulingResetOnFork": "no", 
                                "CPUShares": "18446744073709551615", 
                                "CanIsolate": "no", 
                                "CanReload": "yes", 
                                "CanStart": "yes", 
                                "CanStop": "yes", 
                                "CapabilityBoundingSet": "18446744073709551615", 
                                "CollectMode": "inactive", 
                                "ConditionResult": "no", 
                                "ConditionTimestampMonotonic": "0", 
                                "Conflicts": "shutdown.target", 
                                "ControlPID": "0", 
                                "DefaultDependencies": "yes", 
                                "Delegate": "no", 
                                "Description": "The nginx HTTP and reverse proxy server", 
                                "DevicePolicy": "auto", 
                                "ExecMainCode": "0", 
                                "ExecMainExitTimestampMonotonic": "0", 
                                "ExecMainPID": "0", 
                                "ExecMainStartTimestampMonotonic": "0", 
                                "ExecMainStatus": "0", 
                                "ExecReload": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -s reload ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "ExecStart": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "ExecStartPre": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -t ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "FailureAction": "none", 
                                "FileDescriptorStoreMax": "0", 
                                "FragmentPath": "/usr/lib/systemd/system/nginx.service", 
                                "GuessMainPID": "yes", 
                                "IOScheduling": "0", 
                                "Id": "nginx.service", 
                                "IgnoreOnIsolate": "no", 
                                "IgnoreOnSnapshot": "no", 
                                "IgnoreSIGPIPE": "yes", 
                                "InactiveEnterTimestampMonotonic": "0", 
                                "InactiveExitTimestampMonotonic": "0", 
                                "JobTimeoutAction": "none", 
                                "JobTimeoutUSec": "0", 
                                "KillMode": "process", 
                                "KillSignal": "3", 
                                "LimitAS": "18446744073709551615", 
                                "LimitCORE": "18446744073709551615", 
                                "LimitCPU": "18446744073709551615", 
                                "LimitDATA": "18446744073709551615", 
                                "LimitFSIZE": "18446744073709551615", 
                                "LimitLOCKS": "18446744073709551615", 
                                "LimitMEMLOCK": "65536", 
                                "LimitMSGQUEUE": "819200", 
                                "LimitNICE": "0", 
                                "LimitNOFILE": "4096", 
                                "LimitNPROC": "3799", 
                                "LimitRSS": "18446744073709551615", 
                                "LimitRTPRIO": "0", 
                                "LimitRTTIME": "18446744073709551615", 
                                "LimitSIGPENDING": "3799", 
                                "LimitSTACK": "18446744073709551615", 
                                "LoadState": "loaded", 
                                "MainPID": "0", 
                                "MemoryAccounting": "no", 
                                "MemoryCurrent": "18446744073709551615", 
                                "MemoryLimit": "18446744073709551615", 
                                "MountFlags": "0", 
                                "Names": "nginx.service", 
                                "NeedDaemonReload": "no", 
                                "Nice": "0", 
                                "NoNewPrivileges": "no", 
                                "NonBlocking": "no", 
                                "NotifyAccess": "none", 
                                "OOMScoreAdjust": "0", 
                                "OnFailureJobMode": "replace", 
                                "PIDFile": "/run/nginx.pid", 
                                "PermissionsStartOnly": "no", 
                                "PrivateDevices": "no", 
                                "PrivateNetwork": "no", 
                                "PrivateTmp": "yes", 
                                "ProtectHome": "no", 
                                "ProtectSystem": "no", 
                                "RefuseManualStart": "no", 
                                "RefuseManualStop": "no", 
                                "RemainAfterExit": "no", 
                                "Requires": "system.slice -.mount basic.target", 
                                "RequiresMountsFor": "/var/tmp", 
                                "Restart": "no", 
                                "RestartUSec": "100ms", 
                                "Result": "success", 
                                "RootDirectoryStartOnly": "no", 
                                "RuntimeDirectoryMode": "0755", 
                                "SameProcessGroup": "no", 
                                "SecureBits": "0", 
                                "SendSIGHUP": "no", 
                                "SendSIGKILL": "yes", 
                                "Slice": "system.slice", 
                                "StandardError": "inherit", 
                                "StandardInput": "null", 
                                "StandardOutput": "journal", 
                                "StartLimitAction": "none", 
                                "StartLimitBurst": "5", 
                                "StartLimitInterval": "10000000", 
                                "StartupBlockIOWeight": "18446744073709551615", 
                                "StartupCPUShares": "18446744073709551615", 
                                "StatusErrno": "0", 
                                "StopWhenUnneeded": "no", 
                                "SubState": "dead", 
                                "SyslogLevelPrefix": "yes", 
                                "SyslogPriority": "30", 
                                "SystemCallErrorNumber": "0", 
                                "TTYReset": "no", 
                                "TTYVHangup": "no", 
                                "TTYVTDisallocate": "no", 
                                "TasksAccounting": "no", 
                                "TasksCurrent": "18446744073709551615", 
                                "TasksMax": "18446744073709551615", 
                                "TimeoutStartUSec": "1min 30s", 
                                "TimeoutStopUSec": "5s", 
                                "TimerSlackNSec": "50000", 
                                "Transient": "no", 
                                "Type": "forking", 
                                "UMask": "0022", 
                                "UnitFilePreset": "disabled", 
                                "UnitFileState": "disabled", 
                                "Wants": "network-online.target", 
                                "WatchdogTimestampMonotonic": "0", 
                                "WatchdogUSec": "0"
                            }
                        }, 
                        "10.0.1.186": {
                            "_ansible_no_log": false, 
                            "action": "systemd", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "invocation": {
                                "module_args": {
                                    "daemon_reexec": false, 
                                    "daemon_reload": false, 
                                    "enabled": null, 
                                    "force": null, 
                                    "masked": null, 
                                    "name": "nginx", 
                                    "no_block": false, 
                                    "scope": null, 
                                    "state": "started", 
                                    "user": null
                                }
                            }, 
                            "name": "nginx", 
                            "state": "started", 
                            "status": {
                                "ActiveEnterTimestampMonotonic": "0", 
                                "ActiveExitTimestampMonotonic": "0", 
                                "ActiveState": "inactive", 
                                "After": "system.slice network-online.target -.mount remote-fs.target tmp.mount basic.target nss-lookup.target systemd-journald.socket", 
                                "AllowIsolate": "no", 
                                "AmbientCapabilities": "0", 
                                "AssertResult": "no", 
                                "AssertTimestampMonotonic": "0", 
                                "Before": "shutdown.target", 
                                "BlockIOAccounting": "no", 
                                "BlockIOWeight": "18446744073709551615", 
                                "CPUAccounting": "no", 
                                "CPUQuotaPerSecUSec": "infinity", 
                                "CPUSchedulingPolicy": "0", 
                                "CPUSchedulingPriority": "0", 
                                "CPUSchedulingResetOnFork": "no", 
                                "CPUShares": "18446744073709551615", 
                                "CanIsolate": "no", 
                                "CanReload": "yes", 
                                "CanStart": "yes", 
                                "CanStop": "yes", 
                                "CapabilityBoundingSet": "18446744073709551615", 
                                "CollectMode": "inactive", 
                                "ConditionResult": "no", 
                                "ConditionTimestampMonotonic": "0", 
                                "Conflicts": "shutdown.target", 
                                "ControlPID": "0", 
                                "DefaultDependencies": "yes", 
                                "Delegate": "no", 
                                "Description": "The nginx HTTP and reverse proxy server", 
                                "DevicePolicy": "auto", 
                                "ExecMainCode": "0", 
                                "ExecMainExitTimestampMonotonic": "0", 
                                "ExecMainPID": "0", 
                                "ExecMainStartTimestampMonotonic": "0", 
                                "ExecMainStatus": "0", 
                                "ExecReload": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -s reload ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "ExecStart": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "ExecStartPre": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -t ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "FailureAction": "none", 
                                "FileDescriptorStoreMax": "0", 
                                "FragmentPath": "/usr/lib/systemd/system/nginx.service", 
                                "GuessMainPID": "yes", 
                                "IOScheduling": "0", 
                                "Id": "nginx.service", 
                                "IgnoreOnIsolate": "no", 
                                "IgnoreOnSnapshot": "no", 
                                "IgnoreSIGPIPE": "yes", 
                                "InactiveEnterTimestampMonotonic": "0", 
                                "InactiveExitTimestampMonotonic": "0", 
                                "JobTimeoutAction": "none", 
                                "JobTimeoutUSec": "0", 
                                "KillMode": "process", 
                                "KillSignal": "3", 
                                "LimitAS": "18446744073709551615", 
                                "LimitCORE": "18446744073709551615", 
                                "LimitCPU": "18446744073709551615", 
                                "LimitDATA": "18446744073709551615", 
                                "LimitFSIZE": "18446744073709551615", 
                                "LimitLOCKS": "18446744073709551615", 
                                "LimitMEMLOCK": "65536", 
                                "LimitMSGQUEUE": "819200", 
                                "LimitNICE": "0", 
                                "LimitNOFILE": "4096", 
                                "LimitNPROC": "3799", 
                                "LimitRSS": "18446744073709551615", 
                                "LimitRTPRIO": "0", 
                                "LimitRTTIME": "18446744073709551615", 
                                "LimitSIGPENDING": "3799", 
                                "LimitSTACK": "18446744073709551615", 
                                "LoadState": "loaded", 
                                "MainPID": "0", 
                                "MemoryAccounting": "no", 
                                "MemoryCurrent": "18446744073709551615", 
                                "MemoryLimit": "18446744073709551615", 
                                "MountFlags": "0", 
                                "Names": "nginx.service", 
                                "NeedDaemonReload": "no", 
                                "Nice": "0", 
                                "NoNewPrivileges": "no", 
                                "NonBlocking": "no", 
                                "NotifyAccess": "none", 
                                "OOMScoreAdjust": "0", 
                                "OnFailureJobMode": "replace", 
                                "PIDFile": "/run/nginx.pid", 
                                "PermissionsStartOnly": "no", 
                                "PrivateDevices": "no", 
                                "PrivateNetwork": "no", 
                                "PrivateTmp": "yes", 
                                "ProtectHome": "no", 
                                "ProtectSystem": "no", 
                                "RefuseManualStart": "no", 
                                "RefuseManualStop": "no", 
                                "RemainAfterExit": "no", 
                                "Requires": "-.mount system.slice basic.target", 
                                "RequiresMountsFor": "/var/tmp", 
                                "Restart": "no", 
                                "RestartUSec": "100ms", 
                                "Result": "success", 
                                "RootDirectoryStartOnly": "no", 
                                "RuntimeDirectoryMode": "0755", 
                                "SameProcessGroup": "no", 
                                "SecureBits": "0", 
                                "SendSIGHUP": "no", 
                                "SendSIGKILL": "yes", 
                                "Slice": "system.slice", 
                                "StandardError": "inherit", 
                                "StandardInput": "null", 
                                "StandardOutput": "journal", 
                                "StartLimitAction": "none", 
                                "StartLimitBurst": "5", 
                                "StartLimitInterval": "10000000", 
                                "StartupBlockIOWeight": "18446744073709551615", 
                                "StartupCPUShares": "18446744073709551615", 
                                "StatusErrno": "0", 
                                "StopWhenUnneeded": "no", 
                                "SubState": "dead", 
                                "SyslogLevelPrefix": "yes", 
                                "SyslogPriority": "30", 
                                "SystemCallErrorNumber": "0", 
                                "TTYReset": "no", 
                                "TTYVHangup": "no", 
                                "TTYVTDisallocate": "no", 
                                "TasksAccounting": "no", 
                                "TasksCurrent": "18446744073709551615", 
                                "TasksMax": "18446744073709551615", 
                                "TimeoutStartUSec": "1min 30s", 
                                "TimeoutStopUSec": "5s", 
                                "TimerSlackNSec": "50000", 
                                "Transient": "no", 
                                "Type": "forking", 
                                "UMask": "0022", 
                                "UnitFilePreset": "disabled", 
                                "UnitFileState": "disabled", 
                                "Wants": "network-online.target", 
                                "WatchdogTimestampMonotonic": "0", 
                                "WatchdogUSec": "0"
                            }
                        }, 
                        "10.0.1.187": {
                            "_ansible_no_log": false, 
                            "action": "systemd", 
                            "ansible_facts": {
                                "discovered_interpreter_python": "/usr/bin/python"
                            }, 
                            "changed": true, 
                            "invocation": {
                                "module_args": {
                                    "daemon_reexec": false, 
                                    "daemon_reload": false, 
                                    "enabled": null, 
                                    "force": null, 
                                    "masked": null, 
                                    "name": "nginx", 
                                    "no_block": false, 
                                    "scope": null, 
                                    "state": "started", 
                                    "user": null
                                }
                            }, 
                            "name": "nginx", 
                            "state": "started", 
                            "status": {
                                "ActiveEnterTimestampMonotonic": "0", 
                                "ActiveExitTimestampMonotonic": "0", 
                                "ActiveState": "inactive", 
                                "After": "systemd-journald.socket -.mount network-online.target system.slice tmp.mount nss-lookup.target remote-fs.target basic.target", 
                                "AllowIsolate": "no", 
                                "AmbientCapabilities": "0", 
                                "AssertResult": "no", 
                                "AssertTimestampMonotonic": "0", 
                                "Before": "shutdown.target", 
                                "BlockIOAccounting": "no", 
                                "BlockIOWeight": "18446744073709551615", 
                                "CPUAccounting": "no", 
                                "CPUQuotaPerSecUSec": "infinity", 
                                "CPUSchedulingPolicy": "0", 
                                "CPUSchedulingPriority": "0", 
                                "CPUSchedulingResetOnFork": "no", 
                                "CPUShares": "18446744073709551615", 
                                "CanIsolate": "no", 
                                "CanReload": "yes", 
                                "CanStart": "yes", 
                                "CanStop": "yes", 
                                "CapabilityBoundingSet": "18446744073709551615", 
                                "CollectMode": "inactive", 
                                "ConditionResult": "no", 
                                "ConditionTimestampMonotonic": "0", 
                                "Conflicts": "shutdown.target", 
                                "ControlPID": "0", 
                                "DefaultDependencies": "yes", 
                                "Delegate": "no", 
                                "Description": "The nginx HTTP and reverse proxy server", 
                                "DevicePolicy": "auto", 
                                "ExecMainCode": "0", 
                                "ExecMainExitTimestampMonotonic": "0", 
                                "ExecMainPID": "0", 
                                "ExecMainStartTimestampMonotonic": "0", 
                                "ExecMainStatus": "0", 
                                "ExecReload": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -s reload ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "ExecStart": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "ExecStartPre": "{ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -t ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", 
                                "FailureAction": "none", 
                                "FileDescriptorStoreMax": "0", 
                                "FragmentPath": "/usr/lib/systemd/system/nginx.service", 
                                "GuessMainPID": "yes", 
                                "IOScheduling": "0", 
                                "Id": "nginx.service", 
                                "IgnoreOnIsolate": "no", 
                                "IgnoreOnSnapshot": "no", 
                                "IgnoreSIGPIPE": "yes", 
                                "InactiveEnterTimestampMonotonic": "0", 
                                "InactiveExitTimestampMonotonic": "0", 
                                "JobTimeoutAction": "none", 
                                "JobTimeoutUSec": "0", 
                                "KillMode": "process", 
                                "KillSignal": "3", 
                                "LimitAS": "18446744073709551615", 
                                "LimitCORE": "18446744073709551615", 
                                "LimitCPU": "18446744073709551615", 
                                "LimitDATA": "18446744073709551615", 
                                "LimitFSIZE": "18446744073709551615", 
                                "LimitLOCKS": "18446744073709551615", 
                                "LimitMEMLOCK": "65536", 
                                "LimitMSGQUEUE": "819200", 
                                "LimitNICE": "0", 
                                "LimitNOFILE": "4096", 
                                "LimitNPROC": "3799", 
                                "LimitRSS": "18446744073709551615", 
                                "LimitRTPRIO": "0", 
                                "LimitRTTIME": "18446744073709551615", 
                                "LimitSIGPENDING": "3799", 
                                "LimitSTACK": "18446744073709551615", 
                                "LoadState": "loaded", 
                                "MainPID": "0", 
                                "MemoryAccounting": "no", 
                                "MemoryCurrent": "18446744073709551615", 
                                "MemoryLimit": "18446744073709551615", 
                                "MountFlags": "0", 
                                "Names": "nginx.service", 
                                "NeedDaemonReload": "no", 
                                "Nice": "0", 
                                "NoNewPrivileges": "no", 
                                "NonBlocking": "no", 
                                "NotifyAccess": "none", 
                                "OOMScoreAdjust": "0", 
                                "OnFailureJobMode": "replace", 
                                "PIDFile": "/run/nginx.pid", 
                                "PermissionsStartOnly": "no", 
                                "PrivateDevices": "no", 
                                "PrivateNetwork": "no", 
                                "PrivateTmp": "yes", 
                                "ProtectHome": "no", 
                                "ProtectSystem": "no", 
                                "RefuseManualStart": "no", 
                                "RefuseManualStop": "no", 
                                "RemainAfterExit": "no", 
                                "Requires": "basic.target system.slice -.mount", 
                                "RequiresMountsFor": "/var/tmp", 
                                "Restart": "no", 
                                "RestartUSec": "100ms", 
                                "Result": "success", 
                                "RootDirectoryStartOnly": "no", 
                                "RuntimeDirectoryMode": "0755", 
                                "SameProcessGroup": "no", 
                                "SecureBits": "0", 
                                "SendSIGHUP": "no", 
                                "SendSIGKILL": "yes", 
                                "Slice": "system.slice", 
                                "StandardError": "inherit", 
                                "StandardInput": "null", 
                                "StandardOutput": "journal", 
                                "StartLimitAction": "none", 
                                "StartLimitBurst": "5", 
                                "StartLimitInterval": "10000000", 
                                "StartupBlockIOWeight": "18446744073709551615", 
                                "StartupCPUShares": "18446744073709551615", 
                                "StatusErrno": "0", 
                                "StopWhenUnneeded": "no", 
                                "SubState": "dead", 
                                "SyslogLevelPrefix": "yes", 
                                "SyslogPriority": "30", 
                                "SystemCallErrorNumber": "0", 
                                "TTYReset": "no", 
                                "TTYVHangup": "no", 
                                "TTYVTDisallocate": "no", 
                                "TasksAccounting": "no", 
                                "TasksCurrent": "18446744073709551615", 
                                "TasksMax": "18446744073709551615", 
                                "TimeoutStartUSec": "1min 30s", 
                                "TimeoutStopUSec": "5s", 
                                "TimerSlackNSec": "50000", 
                                "Transient": "no", 
                                "Type": "forking", 
                                "UMask": "0022", 
                                "UnitFilePreset": "disabled", 
                                "UnitFileState": "disabled", 
                                "Wants": "network-online.target", 
                                "WatchdogTimestampMonotonic": "0", 
                                "WatchdogUSec": "0"
                            }
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T07:50:16.359625Z", 
                            "start": "2024-04-23T07:50:15.682383Z"
                        }, 
                        "id": "000c2963-21e0-fffa-3c71-00000000000d", 
                        "name": "systemd"
                    }
                }
            ]
        }
    ], 
    "stats": {
        "10.0.1.185": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.186": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }, 
        "10.0.1.187": {
            "changed": 1, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 1, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }
    }
}


playbook模式

  • 语法的对齐,不得多一个少一个空格
  • 输入法保证英文
[root@m01 scripts]# cat nginx.yaml -n
     1    # install nginx yaml ,by yiyuan
     2    - hosts: all
     3      tasks:
     4          - name: Install nginx Package
     5            yum: name=nginx state=present
     6          - name: Copy Nginx.conf
     7            copy: src=./nginx.conf dest=/etc/nginx/nginx.conf mode=0644 
     
     
     
     
     
     范例:
     

解释如上的playbook代码,按行解释

1.表示注释信息,可以用#,也可以用 ---  三个短横线
2.定义playbook管理的目标主机,all表示所有的主机,也可以写 主机组名
3.定义playbok所有的任务集合信息,比如该文件,定义了2个任务  ,安装nginx,拷贝nginx配置文件
4.定义了任务的名词,自定义的帮助信息
5.定义任务的具体操作,比如这里用yum模块实现nginx的安装
6.注释信息
7.第六、第七两行作用是使用copy模块,把本地当前的nginx.conf配置文件,分发给其他所有客户端机器,且授权  

yaml风格1 ,字典参数格

1.先写好yaml

[root@ansible-1 opt]# cat install_nginx.yml 
---
- name: 这是一个安装nginx的剧本
  hosts: nfs
  tasks:   # 缩进调整,使其成为'- hosts:'下的子项
  - name: 01 安装nginx
    yum:
      name: nginx
      state: present  # 更改"installed"为"present",这是yum模块的标准用法

  - name: 02 启动nginx
    ansible.builtin.systemd:   # 全限定模块名更安全,避免因core library问题导致的错误
      name: nginx
      state: started



2.可以去验证yaml语法是否正确

方法1,用ansible-playbook命令
ansible-playbook  -C  install_nginx.yml   






范例:
[root@ansible-1 opt]# ansible-playbook -C install_nginx.yml 
{
    "custom_stats": {}, 
    "global_custom_stats": {}, 
    "plays": [
        {
            "play": {
                "duration": {
                    "end": "2024-04-23T08:01:53.859229Z", 
                    "start": "2024-04-23T08:01:42.339043Z"
                }, 
                "id": "000c2963-21e0-f9bb-c85b-00000000000a", 
                "name": "\u8fd9\u662f\u4e00\u4e2a\u5b89\u88c5nginx\u7684\u5267\u672c"
            }, 
            "tasks": [
                {
                    "hosts": {
                        "10.0.1.188": {
                            "_ansible_no_log": false, 
                            "_ansible_verbose_override": true, 
                            "action": "gather_facts", 
                            "ansible_facts": {
                                "ansible_all_ipv4_addresses": [
                                    "10.0.1.188"
                                ], 
                                "ansible_all_ipv6_addresses": [
                                    "fe80::67e4:cfd9:948:8ab8"
                                ], 
                                "ansible_apparmor": {
                                    "status": "disabled"
                                }, 
                                "ansible_architecture": "x86_64", 
                                "ansible_bios_date": "11/12/2020", 
                                "ansible_bios_version": "6.00", 
                                "ansible_cmdline": {
                                    "BOOT_IMAGE": "/vmlinuz-3.10.0-1160.114.2.el7.x86_64", 
                                    "LANG": "en_US.UTF-8", 
                                    "crashkernel": "auto", 
                                    "net.ifnames": "0", 
                                    "quiet": true, 
                                    "rhgb": true, 
                                    "ro": true, 
                                    "root": "UUID=12981d89-222f-4ee2-b1c7-5dc7560cd13c"
                                }, 
                                "ansible_date_time": {
                                    "date": "2024-04-23", 
                                    "day": "23", 
                                    "epoch": "1713859313", 
                                    "hour": "16", 
                                    "iso8601": "2024-04-23T08:01:53Z", 
                                    "iso8601_basic": "20240423T160153010832", 
                                    "iso8601_basic_short": "20240423T160153", 
                                    "iso8601_micro": "2024-04-23T08:01:53.010832Z", 
                                    "minute": "01", 
                                    "month": "04", 
                                    "second": "53", 
                                    "time": "16:01:53", 
                                    "tz": "CST", 
                                    "tz_offset": "+0800", 
                                    "weekday": "Tuesday", 
                                    "weekday_number": "2", 
                                    "weeknumber": "17", 
                                    "year": "2024"
                                }, 
                                "ansible_default_ipv4": {
                                    "address": "10.0.1.188", 
                                    "alias": "eth0", 
                                    "broadcast": "10.0.1.255", 
                                    "gateway": "10.0.1.2", 
                                    "interface": "eth0", 
                                    "macaddress": "00:0c:29:6f:65:4e", 
                                    "mtu": 1500, 
                                    "netmask": "255.255.255.0", 
                                    "network": "10.0.1.0", 
                                    "type": "ether"
                                }, 
                                "ansible_default_ipv6": {}, 
                                "ansible_device_links": {
                                    "ids": {
                                        "sr0": [
                                            "ata-VMware_Virtual_IDE_CDROM_Drive_10000000000000000001"
                                        ]
                                    }, 
                                    "labels": {}, 
                                    "masters": {}, 
                                    "uuids": {
                                        "sda1": [
                                            "04cb4c4e-727f-43e6-bd0a-0063bf3268a4"
                                        ], 
                                        "sda2": [
                                            "12981d89-222f-4ee2-b1c7-5dc7560cd13c"
                                        ], 
                                        "sda3": [
                                            "df895761-902b-4692-81f7-d76e08aa18c3"
                                        ], 
                                        "sda5": [
                                            "e2b4e0b4-f016-4cd0-a697-5b0eadbe11fd"
                                        ]
                                    }
                                }, 
                                "ansible_devices": {
                                    "sda": {
                                        "holders": [], 
                                        "host": "SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)", 
                                        "links": {
                                            "ids": [], 
                                            "labels": [], 
                                            "masters": [], 
                                            "uuids": []
                                        }, 
                                        "model": "VMware Virtual S", 
                                        "partitions": {
                                            "sda1": {
                                                "holders": [], 
                                                "links": {
                                                    "ids": [], 
                                                    "labels": [], 
                                                    "masters": [], 
                                                    "uuids": [
                                                        "04cb4c4e-727f-43e6-bd0a-0063bf3268a4"
                                                    ]
                                                }, 
                                                "sectors": "2097152", 
                                                "sectorsize": 512, 
                                                "size": "1.00 GB", 
                                                "start": "2048", 
                                                "uuid": "04cb4c4e-727f-43e6-bd0a-0063bf3268a4"
                                            }, 
                                            "sda2": {
                                                "holders": [], 
                                                "links": {
                                                    "ids": [], 
                                                    "labels": [], 
                                                    "masters": [], 
                                                    "uuids": [
                                                        "12981d89-222f-4ee2-b1c7-5dc7560cd13c"
                                                    ]
                                                }, 
                                                "sectors": "195311616", 
                                                "sectorsize": 512, 
                                                "size": "93.13 GB", 
                                                "start": "2099200", 
                                                "uuid": "12981d89-222f-4ee2-b1c7-5dc7560cd13c"
                                            }, 
                                            "sda3": {
                                                "holders": [], 
                                                "links": {
                                                    "ids": [], 
                                                    "labels": [], 
                                                    "masters": [], 
                                                    "uuids": [
                                                        "df895761-902b-4692-81f7-d76e08aa18c3"
                                                    ]
                                                }, 
                                                "sectors": "97654784", 
                                                "sectorsize": 512, 
                                                "size": "46.57 GB", 
                                                "start": "197410816", 
                                                "uuid": "df895761-902b-4692-81f7-d76e08aa18c3"
                                            }, 
                                            "sda4": {
                                                "holders": [], 
                                                "links": {
                                                    "ids": [], 
                                                    "labels": [], 
                                                    "masters": [], 
                                                    "uuids": []
                                                }, 
                                                "sectors": "2", 
                                                "sectorsize": 512, 
                                                "size": "1.00 KB", 
                                                "start": "295065600", 
                                                "uuid": null
                                            }, 
                                            "sda5": {
                                                "holders": [], 
                                                "links": {
                                                    "ids": [], 
                                                    "labels": [], 
                                                    "masters": [], 
                                                    "uuids": [
                                                        "e2b4e0b4-f016-4cd0-a697-5b0eadbe11fd"
                                                    ]
                                                }, 
                                                "sectors": "8388608", 
                                                "sectorsize": 512, 
                                                "size": "4.00 GB", 
                                                "start": "295067648", 
                                                "uuid": "e2b4e0b4-f016-4cd0-a697-5b0eadbe11fd"
                                            }
                                        }, 
                                        "removable": "0", 
                                        "rotational": "1", 
                                        "sas_address": null, 
                                        "sas_device_handle": null, 
                                        "scheduler_mode": "deadline", 
                                        "sectors": "419430400", 
                                        "sectorsize": "512", 
                                        "size": "200.00 GB", 
                                        "support_discard": "0", 
                                        "vendor": "VMware,", 
                                        "virtual": 1
                                    }, 
                                    "sr0": {
                                        "holders": [], 
                                        "host": "IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)", 
                                        "links": {
                                            "ids": [
                                                "ata-VMware_Virtual_IDE_CDROM_Drive_10000000000000000001"
                                            ], 
                                            "labels": [], 
                                            "masters": [], 
                                            "uuids": []
                                        }, 
                                        "model": "VMware IDE CDR10", 
                                        "partitions": {}, 
                                        "removable": "1", 
                                        "rotational": "1", 
                                        "sas_address": null, 
                                        "sas_device_handle": null, 
                                        "scheduler_mode": "deadline", 
                                        "sectors": "2097151", 
                                        "sectorsize": "512", 
                                        "size": "1024.00 MB", 
                                        "support_discard": "0", 
                                        "vendor": "NECVMWar", 
                                        "virtual": 1
                                    }
                                }, 
                                "ansible_distribution": "CentOS", 
                                "ansible_distribution_file_parsed": true, 
                                "ansible_distribution_file_path": "/etc/redhat-release", 
                                "ansible_distribution_file_variety": "RedHat", 
                                "ansible_distribution_major_version": "7", 
                                "ansible_distribution_release": "Core", 
                                "ansible_distribution_version": "7.9", 
                                "ansible_dns": {
                                    "nameservers": [
                                        "114.114.114.114"
                                    ], 
                                    "search": [
                                        "localdomain"
                                    ]
                                }, 
                                "ansible_domain": "", 
                                "ansible_effective_group_id": 0, 
                                "ansible_effective_user_id": 0, 
                                "ansible_env": {
                                    "HOME": "/root", 
                                    "LANG": "en_US.UTF-8", 
                                    "LESSOPEN": "||/usr/bin/lesspipe.sh %s", 
                                    "LOGNAME": "root", 
                                    "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:", 
                                    "MAIL": "/var/mail/root", 
                                    "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin", 
                                    "PWD": "/root", 
                                    "SHELL": "/bin/bash", 
                                    "SHLVL": "2", 
                                    "SSH_CLIENT": "10.0.1.184 37704 22", 
                                    "SSH_CONNECTION": "10.0.1.184 37704 10.0.1.188 22", 
                                    "SSH_TTY": "/dev/pts/1", 
                                    "TERM": "xterm", 
                                    "USER": "root", 
                                    "_": "/usr/bin/python"
                                }, 
                                "ansible_eth0": {
                                    "active": true, 
                                    "device": "eth0", 
                                    "features": {
                                        "busy_poll": "off [fixed]", 
                                        "fcoe_mtu": "off [fixed]", 
                                        "generic_receive_offload": "on", 
                                        "generic_segmentation_offload": "on", 
                                        "highdma": "off [fixed]", 
                                        "hw_tc_offload": "off [fixed]", 
                                        "l2_fwd_offload": "off [fixed]", 
                                        "large_receive_offload": "off [fixed]", 
                                        "loopback": "off [fixed]", 
                                        "netns_local": "off [fixed]", 
                                        "ntuple_filters": "off [fixed]", 
                                        "receive_hashing": "off [fixed]", 
                                        "rx_all": "off", 
                                        "rx_checksumming": "off", 
                                        "rx_fcs": "off", 
                                        "rx_gro_hw": "off [fixed]", 
                                        "rx_udp_tunnel_port_offload": "off [fixed]", 
                                        "rx_vlan_filter": "on [fixed]", 
                                        "rx_vlan_offload": "on", 
                                        "rx_vlan_stag_filter": "off [fixed]", 
                                        "rx_vlan_stag_hw_parse": "off [fixed]", 
                                        "scatter_gather": "on", 
                                        "tcp_segmentation_offload": "on", 
                                        "tx_checksum_fcoe_crc": "off [fixed]", 
                                        "tx_checksum_ip_generic": "on", 
                                        "tx_checksum_ipv4": "off [fixed]", 
                                        "tx_checksum_ipv6": "off [fixed]", 
                                        "tx_checksum_sctp": "off [fixed]", 
                                        "tx_checksumming": "on", 
                                        "tx_fcoe_segmentation": "off [fixed]", 
                                        "tx_gre_csum_segmentation": "off [fixed]", 
                                        "tx_gre_segmentation": "off [fixed]", 
                                        "tx_gso_partial": "off [fixed]", 
                                        "tx_gso_robust": "off [fixed]", 
                                        "tx_ipip_segmentation": "off [fixed]", 
                                        "tx_lockless": "off [fixed]", 
                                        "tx_nocache_copy": "off", 
                                        "tx_scatter_gather": "on", 
                                        "tx_scatter_gather_fraglist": "off [fixed]", 
                                        "tx_sctp_segmentation": "off [fixed]", 
                                        "tx_sit_segmentation": "off [fixed]", 
                                        "tx_tcp6_segmentation": "off [fixed]", 
                                        "tx_tcp_ecn_segmentation": "off [fixed]", 
                                        "tx_tcp_mangleid_segmentation": "off", 
                                        "tx_tcp_segmentation": "on", 
                                        "tx_udp_tnl_csum_segmentation": "off [fixed]", 
                                        "tx_udp_tnl_segmentation": "off [fixed]", 
                                        "tx_vlan_offload": "on [fixed]", 
                                        "tx_vlan_stag_hw_insert": "off [fixed]", 
                                        "udp_fragmentation_offload": "off [fixed]", 
                                        "vlan_challenged": "off [fixed]"
                                    }, 
                                    "hw_timestamp_filters": [], 
                                    "ipv4": {
                                        "address": "10.0.1.188", 
                                        "broadcast": "10.0.1.255", 
                                        "netmask": "255.255.255.0", 
                                        "network": "10.0.1.0"
                                    }, 
                                    "ipv6": [
                                        {
                                            "address": "fe80::67e4:cfd9:948:8ab8", 
                                            "prefix": "64", 
                                            "scope": "link"
                                        }
                                    ], 
                                    "macaddress": "00:0c:29:6f:65:4e", 
                                    "module": "e1000", 
                                    "mtu": 1500, 
                                    "pciid": "0000:02:01.0", 
                                    "promisc": false, 
                                    "speed": 1000, 
                                    "timestamping": [
                                        "tx_software", 
                                        "rx_software", 
                                        "software"
                                    ], 
                                    "type": "ether"
                                }, 
                                "ansible_fibre_channel_wwn": [], 
                                "ansible_fips": false, 
                                "ansible_form_factor": "Other", 
                                "ansible_fqdn": "nfs", 
                                "ansible_hostname": "nfs", 
                                "ansible_hostnqn": "", 
                                "ansible_interfaces": [
                                    "lo", 
                                    "eth0"
                                ], 
                                "ansible_is_chroot": false, 
                                "ansible_iscsi_iqn": "", 
                                "ansible_kernel": "3.10.0-1160.114.2.el7.x86_64", 
                                "ansible_kernel_version": "#1 SMP Wed Mar 20 15:54:52 UTC 2024", 
                                "ansible_lo": {
                                    "active": true, 
                                    "device": "lo", 
                                    "features": {
                                        "busy_poll": "off [fixed]", 
                                        "fcoe_mtu": "off [fixed]", 
                                        "generic_receive_offload": "on", 
                                        "generic_segmentation_offload": "on", 
                                        "highdma": "on [fixed]", 
                                        "hw_tc_offload": "off [fixed]", 
                                        "l2_fwd_offload": "off [fixed]", 
                                        "large_receive_offload": "off [fixed]", 
                                        "loopback": "on [fixed]", 
                                        "netns_local": "on [fixed]", 
                                        "ntuple_filters": "off [fixed]", 
                                        "receive_hashing": "off [fixed]", 
                                        "rx_all": "off [fixed]", 
                                        "rx_checksumming": "on [fixed]", 
                                        "rx_fcs": "off [fixed]", 
                                        "rx_gro_hw": "off [fixed]", 
                                        "rx_udp_tunnel_port_offload": "off [fixed]", 
                                        "rx_vlan_filter": "off [fixed]", 
                                        "rx_vlan_offload": "off [fixed]", 
                                        "rx_vlan_stag_filter": "off [fixed]", 
                                        "rx_vlan_stag_hw_parse": "off [fixed]", 
                                        "scatter_gather": "on", 
                                        "tcp_segmentation_offload": "on", 
                                        "tx_checksum_fcoe_crc": "off [fixed]", 
                                        "tx_checksum_ip_generic": "on [fixed]", 
                                        "tx_checksum_ipv4": "off [fixed]", 
                                        "tx_checksum_ipv6": "off [fixed]", 
                                        "tx_checksum_sctp": "on [fixed]", 
                                        "tx_checksumming": "on", 
                                        "tx_fcoe_segmentation": "off [fixed]", 
                                        "tx_gre_csum_segmentation": "off [fixed]", 
                                        "tx_gre_segmentation": "off [fixed]", 
                                        "tx_gso_partial": "off [fixed]", 
                                        "tx_gso_robust": "off [fixed]", 
                                        "tx_ipip_segmentation": "off [fixed]", 
                                        "tx_lockless": "on [fixed]", 
                                        "tx_nocache_copy": "off [fixed]", 
                                        "tx_scatter_gather": "on [fixed]", 
                                        "tx_scatter_gather_fraglist": "on [fixed]", 
                                        "tx_sctp_segmentation": "on", 
                                        "tx_sit_segmentation": "off [fixed]", 
                                        "tx_tcp6_segmentation": "on", 
                                        "tx_tcp_ecn_segmentation": "on", 
                                        "tx_tcp_mangleid_segmentation": "on", 
                                        "tx_tcp_segmentation": "on", 
                                        "tx_udp_tnl_csum_segmentation": "off [fixed]", 
                                        "tx_udp_tnl_segmentation": "off [fixed]", 
                                        "tx_vlan_offload": "off [fixed]", 
                                        "tx_vlan_stag_hw_insert": "off [fixed]", 
                                        "udp_fragmentation_offload": "on", 
                                        "vlan_challenged": "on [fixed]"
                                    }, 
                                    "hw_timestamp_filters": [], 
                                    "ipv4": {
                                        "address": "127.0.0.1", 
                                        "broadcast": "", 
                                        "netmask": "255.0.0.0", 
                                        "network": "127.0.0.0"
                                    }, 
                                    "ipv6": [
                                        {
                                            "address": "::1", 
                                            "prefix": "128", 
                                            "scope": "host"
                                        }
                                    ], 
                                    "mtu": 65536, 
                                    "promisc": false, 
                                    "timestamping": [
                                        "rx_software", 
                                        "software"
                                    ], 
                                    "type": "loopback"
                                }, 
                                "ansible_local": {}, 
                                "ansible_lsb": {}, 
                                "ansible_machine": "x86_64", 
                                "ansible_machine_id": "6e61592b2a7b48cd9b99b877f1f666ec", 
                                "ansible_memfree_mb": 607, 
                                "ansible_memory_mb": {
                                    "nocache": {
                                        "free": 824, 
                                        "used": 148
                                    }, 
                                    "real": {
                                        "free": 607, 
                                        "total": 972, 
                                        "used": 365
                                    }, 
                                    "swap": {
                                        "cached": 0, 
                                        "free": 4095, 
                                        "total": 4095, 
                                        "used": 0
                                    }
                                }, 
                                "ansible_memtotal_mb": 972, 
                                "ansible_mounts": [
                                    {
                                        "block_available": 220486, 
                                        "block_size": 4096, 
                                        "block_total": 259584, 
                                        "block_used": 39098, 
                                        "device": "/dev/sda1", 
                                        "fstype": "xfs", 
                                        "inode_available": 1048238, 
                                        "inode_total": 1048576, 
                                        "inode_used": 338, 
                                        "mount": "/boot", 
                                        "options": "rw,relatime,attr2,inode64,noquota", 
                                        "size_available": 903110656, 
                                        "size_total": 1063256064, 
                                        "uuid": "04cb4c4e-727f-43e6-bd0a-0063bf3268a4"
                                    }, 
                                    {
                                        "block_available": 0, 
                                        "block_size": 4096, 
                                        "block_total": 0, 
                                        "block_used": 0, 
                                        "device": "/etc/auto.misc", 
                                        "fstype": "autofs", 
                                        "inode_available": 0, 
                                        "inode_total": 0, 
                                        "inode_used": 0, 
                                        "mount": "/misc", 
                                        "options": "rw,relatime,fd=5,pgrp=841,timeout=300,minproto=5,maxproto=5,indirect,pipe_ino=19726", 
                                        "size_available": 0, 
                                        "size_total": 0, 
                                        "uuid": "N/A"
                                    }, 
                                    {
                                        "block_available": 12192644, 
                                        "block_size": 4096, 
                                        "block_total": 12200888, 
                                        "block_used": 8244, 
                                        "device": "/dev/sda3", 
                                        "fstype": "xfs", 
                                        "inode_available": 48827389, 
                                        "inode_total": 48827392, 
                                        "inode_used": 3, 
                                        "mount": "/data", 
                                        "options": "rw,relatime,attr2,inode64,noquota", 
                                        "size_available": 49941069824, 
                                        "size_total": 49974837248, 
                                        "uuid": "df895761-902b-4692-81f7-d76e08aa18c3"
                                    }, 
                                    {
                                        "block_available": 23855375, 
                                        "block_size": 4096, 
                                        "block_total": 24402032, 
                                        "block_used": 546657, 
                                        "device": "/dev/sda2", 
                                        "fstype": "xfs", 
                                        "inode_available": 97617318, 
                                        "inode_total": 97655808, 
                                        "inode_used": 38490, 
                                        "mount": "/", 
                                        "options": "rw,relatime,attr2,inode64,noquota", 
                                        "size_available": 97711616000, 
                                        "size_total": 99950723072, 
                                        "uuid": "12981d89-222f-4ee2-b1c7-5dc7560cd13c"
                                    }
                                ], 
                                "ansible_nodename": "nfs", 
                                "ansible_os_family": "RedHat", 
                                "ansible_pkg_mgr": "yum", 
                                "ansible_proc_cmdline": {
                                    "BOOT_IMAGE": "/vmlinuz-3.10.0-1160.114.2.el7.x86_64", 
                                    "LANG": "en_US.UTF-8", 
                                    "crashkernel": "auto", 
                                    "net.ifnames": "0", 
                                    "quiet": true, 
                                    "rhgb": true, 
                                    "ro": true, 
                                    "root": "UUID=12981d89-222f-4ee2-b1c7-5dc7560cd13c"
                                }, 
                                "ansible_processor": [
                                    "0", 
                                    "GenuineIntel", 
                                    "12th Gen Intel(R) Core(TM) i5-12400F"
                                ], 
                                "ansible_processor_cores": 1, 
                                "ansible_processor_count": 1, 
                                "ansible_processor_threads_per_core": 1, 
                                "ansible_processor_vcpus": 1, 
                                "ansible_product_name": "VMware Virtual Platform", 
                                "ansible_product_serial": "VMware-56 4d a0 0c 8b 68 9a 49-39 ac 71 1b 22 6f 65 4e", 
                                "ansible_product_uuid": "0CA04D56-688B-499A-39AC-711B226F654E", 
                                "ansible_product_version": "None", 
                                "ansible_python": {
                                    "executable": "/usr/bin/python", 
                                    "has_sslcontext": true, 
                                    "type": "CPython", 
                                    "version": {
                                        "major": 2, 
                                        "micro": 5, 
                                        "minor": 7, 
                                        "releaselevel": "final", 
                                        "serial": 0
                                    }, 
                                    "version_info": [
                                        2, 
                                        7, 
                                        5, 
                                        "final", 
                                        0
                                    ]
                                }, 
                                "ansible_python_version": "2.7.5", 
                                "ansible_real_group_id": 0, 
                                "ansible_real_user_id": 0, 
                                "ansible_selinux": {
                                    "status": "disabled"
                                }, 
                                "ansible_selinux_python_present": true, 
                                "ansible_service_mgr": "systemd", 
                                "ansible_ssh_host_key_ecdsa_public": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOhUx+a8YJO1GpebRccWjLX4t2I0jNeGySRtN8BHCf6ccxQ2O870W7+k7XcmcNq6qaudzSKUlbeps59gkdv37JE=", 
                                "ansible_ssh_host_key_ed25519_public": "AAAAC3NzaC1lZDI1NTE5AAAAIIUUXpv59fwJcIET9g//QvsPdVf3qDiaW4dSkwR/PYBY", 
                                "ansible_ssh_host_key_rsa_public": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCpy87znpCKGF7XeVy6QpEpOdT0NeAsi6lMMt2oJ0SGWDB/bpPhkaUVpoF8k0iSpK/mVV9Geutmr2uB4DLWGQqNbBDpfZ76MxVOSn+Tuz/nVdDomwnoMy0DTbow026FZbX9TVUGL+Ng+m2Q7xoU25bsnj5zG0k15kx+3lqkpLpbifQXle59CHttrNmQpENcbfrxrXa7AjTM/8MHjsNDw9yeWmeQhglCKxStHU4+E2Ahdz4hwyEnupW5Bp+HMOrGnljjQXLy79ak+uXqnnFCfYJ635xIrvzonWD1bijkNYlDVRf8cIQB6Dk7sWaTVa9Kf2bWR5/DoF3tCta7MeQJlHIv", 
                                "ansible_swapfree_mb": 4095, 
                                "ansible_swaptotal_mb": 4095, 
                                "ansible_system": "Linux", 
                                "ansible_system_capabilities": [
                                    "cap_chown", 
                                    "cap_dac_override", 
                                    "cap_dac_read_search", 
                                    "cap_fowner", 
                                    "cap_fsetid", 
                                    "cap_kill", 
                                    "cap_setgid", 
                                    "cap_setuid", 
                                    "cap_setpcap", 
                                    "cap_linux_immutable", 
                                    "cap_net_bind_service", 
                                    "cap_net_broadcast", 
                                    "cap_net_admin", 
                                    "cap_net_raw", 
                                    "cap_ipc_lock", 
                                    "cap_ipc_owner", 
                                    "cap_sys_module", 
                                    "cap_sys_rawio", 
                                    "cap_sys_chroot", 
                                    "cap_sys_ptrace", 
                                    "cap_sys_pacct", 
                                    "cap_sys_admin", 
                                    "cap_sys_boot", 
                                    "cap_sys_nice", 
                                    "cap_sys_resource", 
                                    "cap_sys_time", 
                                    "cap_sys_tty_config", 
                                    "cap_mknod", 
                                    "cap_lease", 
                                    "cap_audit_write", 
                                    "cap_audit_control", 
                                    "cap_setfcap", 
                                    "cap_mac_override", 
                                    "cap_mac_admin", 
                                    "cap_syslog", 
                                    "35", 
                                    "36+ep"
                                ], 
                                "ansible_system_capabilities_enforced": "True", 
                                "ansible_system_vendor": "VMware, Inc.", 
                                "ansible_uptime_seconds": 18953, 
                                "ansible_user_dir": "/root", 
                                "ansible_user_gecos": "root", 
                                "ansible_user_gid": 0, 
                                "ansible_user_id": "root", 
                                "ansible_user_shell": "/bin/bash", 
                                "ansible_user_uid": 0, 
                                "ansible_userspace_architecture": "x86_64", 
                                "ansible_userspace_bits": "64", 
                                "ansible_virtualization_role": "guest", 
                                "ansible_virtualization_type": "VMware", 
                                "discovered_interpreter_python": "/usr/bin/python", 
                                "gather_subset": [
                                    "all"
                                ], 
                                "module_setup": true
                            }, 
                            "changed": false, 
                            "deprecations": [], 
                            "warnings": []
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T08:01:53.055454Z", 
                            "start": "2024-04-23T08:01:42.343687Z"
                        }, 
                        "id": "000c2963-21e0-f9bb-c85b-000000000011", 
                        "name": "Gathering Facts"
                    }
                }, 
                {
                    "hosts": {
                        "10.0.1.188": {
                            "_ansible_no_log": false, 
                            "action": "yum", 
                            "changed": true, 
                            "changes": {
                                "installed": [
                                    "nginx"
                                ]
                            }, 
                            "invocation": {
                                "module_args": {
                                    "allow_downgrade": false, 
                                    "autoremove": false, 
                                    "bugfix": false, 
                                    "conf_file": null, 
                                    "disable_excludes": null, 
                                    "disable_gpg_check": false, 
                                    "disable_plugin": [], 
                                    "disablerepo": [], 
                                    "download_dir": null, 
                                    "download_only": false, 
                                    "enable_plugin": [], 
                                    "enablerepo": [], 
                                    "exclude": [], 
                                    "install_repoquery": true, 
                                    "install_weak_deps": true, 
                                    "installroot": "/", 
                                    "list": null, 
                                    "lock_timeout": 30, 
                                    "name": [
                                        "nginx"
                                    ], 
                                    "releasever": null, 
                                    "security": false, 
                                    "skip_broken": false, 
                                    "state": "present", 
                                    "update_cache": false, 
                                    "update_only": false, 
                                    "use_backend": "auto", 
                                    "validate_certs": true
                                }
                            }, 
                            "results": []
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T08:01:53.521724Z", 
                            "start": "2024-04-23T08:01:53.060396Z"
                        }, 
                        "id": "000c2963-21e0-f9bb-c85b-00000000000c", 
                        "name": "01 \u5b89\u88c5nginx"
                    }
                }, 
                {
                    "hosts": {
                        "10.0.1.188": {
                            "_ansible_no_log": false, 
                            "action": "ansible.builtin.systemd", 
                            "changed": true, 
                            "invocation": {
                                "module_args": {
                                    "daemon_reexec": false, 
                                    "daemon_reload": false, 
                                    "enabled": null, 
                                    "force": null, 
                                    "masked": null, 
                                    "name": "nginx", 
                                    "no_block": false, 
                                    "scope": null, 
                                    "state": "started", 
                                    "user": null
                                }
                            }, 
                            "msg": "Service nginx not found on host, assuming it will exist on full run"
                        }
                    }, 
                    "task": {
                        "duration": {
                            "end": "2024-04-23T08:01:53.859229Z", 
                            "start": "2024-04-23T08:01:53.526320Z"
                        }, 
                        "id": "000c2963-21e0-f9bb-c85b-00000000000d", 
                        "name": "02 \u542f\u52a8nginx"
                    }
                }
            ]
        }
    ], 
    "stats": {
        "10.0.1.188": {
            "changed": 2, 
            "failures": 0, 
            "ignored": 0, 
            "ok": 3, 
            "rescued": 0, 
            "skipped": 0, 
            "unreachable": 0
        }
    }
}




yaml中定义hosts的信息语法

# 方式一:定义所管理的主机IP地址
- hosts: 192.168.178.111
  tasks: 
    动作...

# 方式二:定义所管理主机的名字
- hosts: backup01
  tasks:
    动作...

# 方式三:定义管理主机
- hosts: 192.168.178.111, rsync01
  tasks:
    动作...

# 方式四:管理所有主机
- hosts: all
  tasks:
    动作...    
    
    
    
    

关于剧本的tasks任务部分

  • tasks任务部分,就是决定用什么模块,做什么事,以及模块对应的参数的风格

字典风格的模块参数

   [root@ansible-1 opt]#cat install_nginx.yml 
---
- name: 这是一个安装nginx的剧本
  hosts: 192.168.106.7,192.168.106.8,nfs
  tasks: 
  - name: 01 安装nginx
    yum: 
      name: nginx
      state: installed
  - name: 02 启动nginx
    systemd:
      name: nginx
      state: started 
      
      
      

变量风格的模块参数

   [root@ansible-1 opt]#cat vars_install_nginx.yml 
---
- name: 这是一个安装nginx的剧本
  hosts: 192.168.106.7,192.168.106.8,nfs
  tasks: 
  - name: 01 安装nginx
    yum: name=nginx state=installed 
  - name: 02 启动nginx
    systemd: name=nginx state=started
  - name: 03 设置nginx开机自启
    systemd: name=nginx enabled=yes 
    
    
    
    

四.yaml支持的数据类型

yaml这个语法中,只有三个数据类型

  • 字典类型,特点就是 key : value形式
  • 列表形式,特点是 通过 短横线定义
  • 纯变量形式
数据类型
YAML 支持以下几种数据类型:
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
纯量(scalars):单个的、不可再分的值
我们都以python的数据类型来称呼yaml中支持的数据类型   

yaml中字典

key : value类型
字典键值对使用冒号结构表示 key: value,冒号后面要加一个空格
支持字典嵌套   

yaml中列表

python
[ 1,2,3,"汉字","你好"  ,["我是嵌套的列表,第一个元素"]  ]
shell中也支持列表,(数组)   3.
以 - 短横线开头,表示构成一个列表
在python中列表形式为 [1,2,3,'a','b','老王']
shell也支持列表(数组),表示形式为,功能比较单一
[root@ansible-1 opt]##students=("老王" "张三" "老王")
[root@ansible-1 opt]##set|grep students
students=([0]="老王" [1]="张三" [2]="老王")
[root@ansible-1 opt]##echo ${students[0]}
老王
[root@ansible-1 opt]##echo ${students[1]}
张三
[root@ansible-1 opt]##echo ${students[2]}
老王

yaml中纯变量

表示单纯的变量,支持数据类型有

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

写一个安装nfs的playbook,遵循yaml语法

1.安装nfs服务
2.创建nfs配置文件
3.启动nfs服务  



范例:

编写如下的yaml语法

记住,yaml就三个属性

列表  -
字典  "name":  "我是值"

字典
"students": "我是学生"

"students": 
  - 老王
    老六
    老赵

纯变量 

现在有一个json的数据格式如下

如下示例,分别用到了 字典,列表,纯变量

[
    {
        "老师":"老王",
        "男同学": [老六,老赵,四原],
        "女同学": [五原]
    }
]  

转变为yaml格式

- "老师": 老王
  "男同学": 
    - 老六
      老赵
      四原
  "女同学": 
    - 五原  

yaml支持的数据类型

字典
    "key": "value"    ,转化为json类型去看,{ "key":value }
    
纯变量的形式
  
列表的形式

   一个短横线  -   ,转变为json类型看效果 就是  [   ]  

关于yaml的短横线定义列表)

短横线用于定义列表
多个短横线,同一个缩进下的元素,表示一个列表中的多个元素
- xxx
- ooo
- ddd
- ccc

"xxx", "ooo","ddd","ccc"
识别为,同一个列表下的多个元素

一个短横线,同一个缩进下的元素,表示是一个整体,大字符串

- xxx
  ooo
  ddd
  ccc
  
其实处理的数据是 "xxx ooo ddd ccc" 

拿yaml转json测试,查看效果

[ https:// rsync.bejson.com/json/json2yaml/](https:// rsync.bejson.com/json/json2yaml/)

具体的yaml
将如下的ad-hoc转为yaml格式

#1.先写ad-hoc命令模式
#2.对比理解转为yaml

ansible  web  -m  file -a "path=/etc/foo.conf    owner=foo    group=foo    mode=0644"  

# 写name字段,是表示定义剧本的注释,这一次任务的名称
# 写成字典风格的 模块参数
# 同一个缩进下,表示是一个整体,是一个大字符串

- name: 修改文件的属性
  file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644 

五.json

语法

JSON 语法是 JavaScript 对象表示语法的子集。
数据在名称/值对中
数据由逗号分隔
大括号 {} 保存字典
中括号 [] 保存列表,列表可以包含多个对象   

JSON 值可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在中括号中)
  • 对象(在大括号中)
  • null

json的语法实例

{
    "students":null,
    "age":18,
    "male":true,
    "手机号":[
        152100000000,
        16800000000
    ],
    "你快乐吗":"我很快乐"
}  

学习如何提取json的数据

根据key,提取value

前端通过js代码提取
后端 通过python代码提取

运维通过jq命令提取   

jq命令

1.安装jq命令
yum install jq -y

2.简单json数据提取
[root@ansible-1 opt]# echo '{"name":"德玛西亚","price":6888}'|jq
[root@ansible-1 opt]# echo '{"name":"德玛西亚","price":6888}'|jq '.name'
"德玛西亚"
[root@ansible-1 opt]# echo '{"name":"德玛西亚","price":6888}'|jq '.price'
6888
[root@ansible-1 opt]# echo '{"name":"德玛西亚","price":6888}'|jq '.price,.name'
6888
"德玛西亚"


提取名字的值,价格
必须使用jq命令的过滤器,如下的语法
语法是通过 . 提取,比如 jq '.name,.price'
[root@ansible-1 opt]##echo '{"name":"德玛西亚","price":6888}'|jq '.name'
"德玛西亚"
[root@ansible-1 opt]##echo '{"name":"德玛西亚","price":6888}'|jq '.price'
6888
[root@ansible-1 opt]##echo '{"name":"德玛西亚","price":6888}'|jq '.name,.price'
"德玛西亚"
6888

3.数据再多一点
[root@ansible-1 opt]# echo '{"name":"德玛西亚","price":6888,"hero_loge":"https:// rsync.tukuppt.com/muban/zanyjwnk.html"}'|jq '.name,.price,.hero_loge'
"德玛西亚"
6888
"https:// rsync.tukuppt.com/muban/zanyjwnk.html"


4.串行执行,提取复杂的json数据,数据可能会有列表嵌套    

串行执行(jq提供的管道符)

也就是字典套字典;

列表套字典;一层层嵌套,一层层拆,提取数据;

 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq
{
  "students": [
    {
      "name": "老王",
      "age": 18
    },
    {
      "name": "老六",
      "female": true
    },
    {
      "name": "老赵",
      "address": "china"
    }
  ]
}

一层层拆,先拆外面的字典
 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students'
[
  {
    "name": "老王",
    "age": 18
  },
  {
    "name": "老六",
    "female": true
  },
  {
    "name": "老赵",
    "address": "china"
  }
]

拆列表(默认提取所有列表数据)
 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students | .[]'
{
  "name": "老王",
  "age": 18
}
{
  "name": "老六",
  "female": true
}
{
  "name": "老赵",
  "address": "china"
}

提取字典数据(根据上一层提取列表数据的数量找)
 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students |.[] |.name'
"老王"
"老六"
"老赵"    



指定列表序号

列表序号默认从0开始,依次增长

 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students | .[0]'
{
  "name": "老王",
  "age": 18
}
 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students | .[1]'
{
  "name": "老六",
  "female": true
}
 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students | .[2]'
{
  "name": "老赵",
  "address": "china"
}

提取出china的值
 [root@ansible-1 opt]#echo '{"students":[{"name":"老王","age":18},{"name":"老六","female":true},{"name":"老赵","address":"china"}]}'|jq '.students | .[2] | .address'
"china"    



提取天气json数据

[ http:// rsync.tianqiapi.com/api?version=v9&appid=23035354&appsecret=8YvlPNrz](http:// rsync.tianqiapi.com/api?version=v9&appid=23035354&appsecret=8YvlPNrz)

提取

1.上海
 [root@ansible-1 opt]#cat tianqi.json | jq '.city'
"上海"

2.China
 [root@ansible-1 opt]#cat tianqi.json | jq '.countryEn'
"China"

3. 11号的天气数据
 [root@ansible-1 opt]#cat tianqi.json |jq '.data| .[3]'


4. 11号的天气数据,紫外线情况
 [root@ansible-1 opt]#cat tianqi.json |jq '.data| .[3] | .index'

5. 8号的空气指数(air_tips)
 [root@ansible-1 opt]#cat tianqi.json |jq '.data | .[0]|.air_tips'  

六.json转yaml

[ 在线JSON转yaml,yaml转JSON-BeJSON.com](https:// rsync.bejson.com/json/json2yaml/)

yaml是一个数据交互格式的类型,用在很多软件中
比如 ansible-playbook 使用了yaml语法
saltstack   也是使用yaml写脚本
docker file
k8s资源文件
以及如今云原生的各种软件也都支持yaml语法   
json这个数据交互格式,语法是如下,是用于在网络中进行数据传输的
{ "key": "value" , "key2":"value2"  }

json传递给后端后,后端需要解析为当前编程语言的数据类型,才可以继续使用,解析
python举例

json数据 ,如{ "key": "value" , "key2":"value2"  }

发给python后,要进行解析 ↓

python中的字典类型,{ "key": "value" , "key2":"value2"  } 
{key:value}字典
[学生,老师]列表
20 数字 整形类型
"广州"  字符串类型   3.4.
[
{
    "2226": {
      "老师": "老王",
      "学生们": [
        {
          "老六": [
            {
              "年龄": 20,
              "地址": "上海"
            }
          ],
          "老赵": [
            {
              "年龄": 22,
              "地址": "北京"
            }
          ],
          "四原": [
            {
              "年龄": 24,
              "地址": "深圳"
            }
          ]
        }
      ]
    }
  }
]    28.29.
- "2226":
    "老师": "老王"
    "学生们":
      -  "老六":
            - "年龄": 20
              "地址": "上海"
         "老赵": 
           - "年龄": 22
             "地址": "北京"
         "四原": 
           - "年龄": 24
             "地址": "深圳" 12.

七.jq命令处理json

1.提取出老王
 [root@ansible-1 opt]#cat test1.json |jq '.[] |."2226" |."老师"'
"老王"
 [root@ansible-1 opt]#cat test1.json |jq '.[0] |."2226" |."老师"'
"老王"

2.提取出学生列表
 [root@ansible-1 opt]#cat test1.json |jq '.[0] |."2226" |."学生们"'

2.1 提取出这个列表中的值
 [root@ansible-1 opt]#cat test1.json |jq '.[0] |."2226" |."学生们" |.[]'

3.提取出四原的资料
 [root@ansible-1 opt]#cat test1.json |jq '.[0] |."2226" |."学生们" |.[0] |."四原" |.[] |."地址",."年龄"'
"深圳"
24

4.提取出老赵的资料
 [root@ansible-1 opt]#cat test1.json |jq '.[0] |."2226" |."学生们" |.[0] |."老赵" |.[] |."地址",."年龄"'
"北京"
22

5.提取出老六的地址
 [root@ansible-1 opt]#cat test1.json |jq '.[] |."2226" |."学生们" |.[] |."老六" |.[] |."地址",."年龄"'
"上海"
20

6.提取出四原的年龄
 [root@ansible-1 opt]#cat test1.json |jq '.[] |."2226" |."学生们" |.[] |."四原" |.[] |."年龄"'
 
 
 

八.一键部署rsync\nfs\nginx

一键部署,能够通过脚本化,整合所有的部署操作,以及一些优化操作;
部署每一个服务,一个服务,一个剧本;
一个install.yml 脚本,所有的服务全给装好了  150行
(nfs,rsync,nginx)
ansible-playbook install.yml
一大堆日志,你连调试都很难调试
日志就是ansible记录下,远程操作了服务器,返回的修改状态,修改结果

1.你的剧本执行的是正确的
2.远程服务器返回的执行结果也是正确的,状态是没问题的

所以,建议一个服务一个剧本
install_nfs.yml
install_nginx.yaml
... 

1.先想好ad-hoc命令模式该怎么写
- 因为简单,便于快速的思考出用什么内置模块去解决运维部署的需求
- 以及ad-hoc命令模式写好了
- 主机组
- 模块名
- 模块参数名
全都出来了

如部署nfs,  nginx,rsync,lsync等任意服务,都可以参考如下的步骤套路

1.安装软件
2.修改配置文件
3.创建配置文件所需数据
4.启动服务
5.后续动作...

针对每一个需求,思考对应要用什么ansible内置模块,即可把问题解决

2.转变为playbook,只是写yaml,以及遵循yaml的规范即可    

ansible剧本_json_02

ansible剧本_nginx_03

先写好ad-hoc模式(服务端)

然后再转换为playbook即可,这样有个参考,简单点。

# 1.安装rsync
ansible backup -m yum -a 'name=rsync state=installed'

# 2.发送配置文件模板、以及密码文件
ansible backup -m copy -a 'src=/script/rsyncd.conf dest=/etc/rsyncd.conf'
ansible backup -m copy -a 'src=/script/rsync.passwd dest=/etc/rsync.passwd mode=600'

# 3.创建用户、组信息
ansible backup -m group -a 'name=rsync gid=1000' 
ansible backup -m user -a 'name=rsync uid=1000 group=rsync create_home=no shell=/sbin/nologin'

# 4.备份目录创建与授权
ansible backup -m file -a 'path=/backup owner=rsync group=rsync mode=755 state=directory '
ansible backup -m file -a 'path=/data owner=rsync group=rsync  mode=755 state=directory'

# 5.启动服务,设置开机自启
ansible backup -m systemd -a 'name=rsyncd state=started enabled=yes'  




改造为playbook剧本

可以参考官网写法

https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#playbook-execution

其实写法很简单,批量改造就完事了,等于号赋值操作,改写为冒号形式。

建议别用中文

- hosts: backup
  tasks:
  - name: 01安装rsync
    yum: 
      name: rsync
      state: installed
  - name: 02 发送配置文件模板
    copy:
      src: /script/rsyncd.conf
      dest: /etc/rsyncd.conf
  - name: 02 发送密码文件
    copy:
      src: /script/rsync.passwd
      dest: /etc/rsync.passwd
      mode: '600'

  - name: 03 创建rsync用户组
    group:
      name: rsync
      gid: 1000
  - name: 04 创建rsync用户
    user:
      name: rsync
      uid: 1000
      group: rsync
      create_home: no
      shell: /sbin/nologin
  - name: 05 备份目录创建与授权/data
    file:
      path: /data
      state: directory
      owner: rsync
      group: rsync
      mode: '755'
  - name: 06 备份目录创建与授权/backup
    file:
      path: /backup
      state: directory
      owner: rsync
      group: rsync
      mode: '755'
  - name: 07 启动服务
    systemd:
      name: rsyncd
      state: started
      enabled: yes     
      
      
 
 
 
 自己写的,二个版本
 
 第一版:
 [root@ansible-1 opt]# cat rsync.yml 
---
- hosts : backup
  tasks: 
  - name: 安装 rsync
    yum:
      name: rsync
      state: installed

  - name: 发送配置文件模版
    copy: 
      src: /script/rsyncd.conf
      dest: /etc/rsyncd.conf

  - name: 发送密码文件
    copy: 
      src: /script/rsync.passwd
      dest: /etc/rsync.passwd
      mode: '600'
 
  - name: 创建 rsync用户组
    group:
      name:  rsync
      gid: 1000

  - name: 创建 rsync用户
    user: 
      name:  rsync
      uid: 1000
      group:  rsync
      create_home: no
      shell: /sbin/nologin

  - name: 备份目录创建与授权/data
    file:
       path: /backup
       state: directory
       owner:  rsync
       group:  rsync
       mode: '755'

  - name: 启动服务
    systemd:
        name: rsyncd
        state: started
        enabled: yes


 
 
 
 第二版:
 [root@ansible-1 opt]# cat rsyn.yml 
---
- hosts: backup
  tasks:
  - name: 安装 rsync
    yum:
      name: rsync
      state: installed

  - name: 发送配置文件模版
    copy: 
      src: /script/rsyncd.conf
      dest: /etc/rsyncd.conf

  - name: 发送密码文件
    copy: 
      src: /script/rsync.passwd
      dest: /etc/rsync.passwd
      mode: '0600'  # 修正权限模式,原为'600',YAML中建议前导零表示八进制数

  - name: 创建 rsync用户组
    group:
      name:  rsync
      gid: 1000

  - name: 创建 rsync用户
    user: 
      name:  rsync
      uid: 1000
      group:  rsync
      create_home: no
      shell: /sbin/nologin

  - name: 备份目录创建与授权/data  # 注意,原任务描述中的路径与实际设置的路径不符,已修正为'/backup'
    file:
      path: /backup
      state: directory
      owner:  rsync
      group:  rsync
      mode: '755'

  - name: 启动并启用 rsync 服务
    systemd:
      name: rsyncd
      state: started
      enabled: yes



      

创建rsync配置文件,密码文件

注意是master-61机器

[root@master-61 /my-playbook]#cat /script/rsyncd.conf 
uid =  rsync 
gid =  rsync 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
[data]
comment = yuchaoit.cn rsync!
path = /data    

密码文件

[root@master-61 /my-playbook]#cat /script/rsync.passwd 
rsync_backup:laotian666   



再次测试执行

[root@master-61 /my-playbook]#ansible-playbook -C install_rsync.yaml 

结果

PLAY RECAP ************************************************************************************************************************
172.16.1.41                : ok=9    changed=7    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   



实质性执行playbook

ansible-playbook install_rsync.yaml



检查rsyncd部署情况(必须验证你的部署情况)

[root@master-61 /my-playbook]#ansible backup -a "ls -l /etc/rsync.passwd"
172.16.1.41 | CHANGED | rc=0 >>
-rw------- 1 root root 23 Apr 26 17:05 /etc/rsync.passwd


[root@master-61 /my-playbook]#ansible backup -a "cat /etc/rsync.passwd"
172.16.1.41 | CHANGED | rc=0 >>
rsync_backup:laotian666

[root@master-61 /my-playbook]#ansible backup -a "systemctl status rsyncd"  




测试rsync是否可用

[root@master-61 /my-playbook]#export RSYNC_PASSWORD=laotian666

[root@master-61 /my-playbook]#rsync -avzp /tmp/chaoge.log rsync_backup@rsync-41::data

[root@master-61 /my-playbook]#ansible backup -a "ls /data"
172.16.1.41 | CHANGED | rc=0 >>
chaoge.log  

梳理剧本的操作全过程

复制

1.写好ad-hoc命令模式,便于转变剧本

2. 写ansible-playbook剧本,遵循正确的yaml,以及剧本规范

3.创建剧本中使用到的对应的数据文件
  - name: 02 发送配置文件模板
    copy:
      src: /script/rsyncd.conf
      dest: /etc/rsyncd.conf

mkdir  /script/
touch /script/rsyncd.conf
vim /script/rsyncd.conf

4.才是测试剧本运行
ansible-playbook   -C  install_rsync.yml 

5.正确安装剧本
ansible-playbook  install_rsync.yml 

6.验证rsync是否可用
master61数据同步

7.确认
install_rsync.yml 的确一键部署,安装好了rsync服务端

8.其他服务,按照这个思路来操作就,重复操作即可    

实战--使用剧本部署rsync

0.部署安装ansible

#安装ansible
yum install epel-release ansible libselinux-python -y
yum install ansible -y 
ansible --version


#编写清单文件
vim /etc/ansible/hosts 

[web]
10.0.1.185
10.0.1.186
10.0.1.187

[nfs]
10.0.1.188

[backup]
10.0.1.189


#配置免密秘钥

第一种方式:
ssh-keygen
ssh-copy-id [email protected]:
ssh 10.0.185 ip a


第二种方式:
#关闭不检查key
vim /etc/ansible/ansible.cfg
 71 host_key_checking = False

[root@ansible-1 ~]# tailf  /etc/ansible/hosts 
10.0.1.185  ansible_port=22 ansible_user=root ansible_password='553214'
10.0.1.186  ansible_port=22 ansible_user=root ansible_password='553214'
10.0.1.187  ansible_port=22 ansible_user=root ansible_password='553214'

[nfs]
10.0.1.188  ansible_port=22 ansible_user=root ansible_password='553214'

[backup]
10.0.1.189  ansible_port=22 ansible_user=root ansible_password='553214'



#创建剧本目录
mkdir -p /etc/ansible/playbook

#创建服务配置文件目录
mkdir -p /etc/ansible/conf



#测试:
ansible all -m shell -a "hostname"



#关闭warning提示sftp
vi /etc/ansible/ansible.cfg

[ssh_connection]
407 scp_if_ssh=True
重新执行ansible,报错不存在了






1.环境:


主机名	             wanIP	         lanIP	                     服务	         角色
ansible-master	   10.0.1.2        10.0.1.184                  Ansible	        控制端
web01	           10.0.1.2        10.0.1.185                   rsync客户端	  被控端
web02              10.0.1.2        10.0.1.186                   rsync客户端	  被控端                                
web03 	           10.0.1.2        10.0.1.187                    rsync客户端	  被控端
nfs	               10.0.1.2        10.0.1.188                    rsync客户端	  被控端
backup	           10.0.1.2        10.0.1.189                    rsync服务端	  服务端








2 流程分析


1.安装ansible
2.优化ansible
3.推送公钥
4.开启防火墙
5.开启80 443 873 nfs等端口和服务白名单
6.关闭selinux
7.创建同一的用户

1.web backup nfs 安装rsync
2.拷贝rsync配置文件
3.创建服务端backup的备份目录
4.copy密码文件
5.把客户端密码加入环境全局变量文件
6.启动rsync,并加入开机自启动




3.配置主机清单
mkdir /root/ansible/rsync -p && \
vim /root/ansible/rsync/hosts
[web]
10.0.1.185  ansible_port=22 ansible_user=root ansible_password='553214'
10.0.1.186  ansible_port=22 ansible_user=root ansible_password='553214'
10.0.1.187  ansible_port=22 ansible_user=root ansible_password='553214'

[nfs]
10.0.1.188  ansible_port=22 ansible_user=root ansible_password='553214'

[backup]
10.0.1.189  ansible_port=22 ansible_user=root ansible_password='553214'





4.写入rsync配置文件
mkdir -p /etc/ansible/conf

vim /etc/ansible/conf/rsyncd.conf

uid =  rsync	
gid =  rsync			
port = 873			
fake super = yes	 
use chroot = no		 	
max connections = 200	
timeout = 600			
ignore errors			
read only = false		
list = false	

auth users = backup			 
secrets file = /etc/rsync.passwd	  
log file = /var/log/rsyncd.log		  						 
[backup]								
comment = welcome to oldboyedu backup!	   
path = /backup




5.创建rsync剧本(yaml)
mkdir -p /etc/ansible/playbook

vim /etc/ansible/playbook/rsync/rsync.yml

##第一版(只有rsync服务端有免密密码)

---
- hosts: all
  become: yes  # 确保使用 root 权限执行任务
  tasks:
    - name: Install Rsync Server
      yum:
        name: rsync
        state: present

    - name: selicent pass for web and nfs servers
      copy:
        content: "export RSYNC_PASSWORD=123"
        dest: /etc/profile.d/rsync.pass
        owner: root
        group: root
        mode: 0600
      when: ansible_hostname is match "(web|nfs)*"

    - name: Source rsync.pass for environment setup
      shell: "source /etc/profile.d/rsync.pass"
      when: ansible_hostname is match "(web|nfs)*"

    - name: Configure Rsync Conf for backup servers
      copy:
        src: /etc/ansible/conf/rsyncd.conf
        dest: /etc/rsyncd.conf
        owner: root
        group: root
        mode: 0644
      when: ansible_hostname is match "backup*"

    - name: Create rsync group if not exists (for backup servers)
      group:
        name: rsync
        state: present
      when: ansible_hostname is match "backup*"

    - name: Create rsync user (for backup servers)
      user:
        name: rsync
        group: rsync
        state: present
        system: yes
      when: ansible_hostname is match "backup*"

    - name: Create Backup Dir (for backup servers)
      file:
        path: /backup
        state: directory
        owner: rsync
        group: rsync
        mode: 0755
      when: ansible_hostname is match "backup*"

    - name: Create PASS File (for backup servers)
      copy:
        content: backup:123
        dest: /etc/rsync.passwd
        owner: root
        group: root
        mode: 0600
      when: ansible_hostname is match "backup*"

- hosts: all
  tasks:
    - name: Start Rsync Server
      service:
        name: rsyncd
        state: started
        enabled: true
        



##yaml配置注解
---
- hosts: all
  become: yes  # 确保使用 root 权限执行任务
  tasks:
    - name: 安装 Rsync 服务
      yum:
        name: rsync
        state: present

    - name: 为 Web 和 NFS 服务器设置 rsync 密码环境变量
      copy:
        content: "export RSYNC_PASSWORD=123"
        dest: /etc/profile.d/rsync.pass
        owner: root
        group: root
        mode: 0600
      when: ansible_hostname is match "(web|nfs)*"

    - name: 应用 rsync 密码环境变量
      shell: "source /etc/profile.d/rsync.pass"
      when: ansible_hostname is match "(web|nfs)*"

    - name: 为备份服务器配置 Rsync 配置文件
      copy:
        src: /etc/ansible/conf/rsyncd.conf
        dest: /etc/rsyncd.conf
        owner: root
        group: root
        mode: 0644
      when: ansible_hostname is match "backup*"

    - name: 如果不存在,则创建 rsync 组(仅针对备份服务器)
      group:
        name: rsync
        state: present
      when: ansible_hostname is match "backup*"

    - name: 创建 rsync 用户(属于 rsync 组,仅针对备份服务器)
      user:
        name: rsync
        group: rsync
        state: present
        system: yes
      when: ansible_hostname is match "backup*"

    - name: 创建备份目录(仅针对备份服务器)
      file:
        path: /backup
        state: directory
        owner: rsync
        group: rsync
        mode: 0755
      when: ansible_hostname is match "backup*"

    - name: 创建密码文件(仅针对备份服务器)
      copy:
        content: backup:123
        dest: /etc/rsync.passwd
        owner: root
        group: root
        mode: 0600
      when: ansible_hostname is match "backup*"

- hosts: all
  tasks:
    - name: 启动 Rsync 服务并设置开机启动
      service:
        name: rsyncd
        state: started
        enabled: true
        
        




6.执行剧本
1.执行base.yml
[root@m01 ~]# ansible-playbook ansible/base.yml 

2.执行rsync.yml
[root@m01 ~]# ansible-playbook ansible/rsync/rsync.yml -i /root/ansible/rsync/hosts






7.测试(在任何一台客户端上)
[root@nfs ~]# rsync -avz /etc/hosts [email protected]::backup
Password: 
sending incremental file list

sent 48 bytes  received 20 bytes  27.20 bytes/sec
total size is 352  speedup is 5.18
[root@nfs ~]# rsync -avz --password-file=/etc/rsync.passwd /etc/hosts [email protected]::backup
sending incremental file list

sent 48 bytes  received 20 bytes  136.00 bytes/sec
total size is 352  speedup is 5.18



#tips:免密文件在客户端上,只需要创建一个与服务端一样的密码就可以了,不要有账户,不然验证失败

ansible剧本目录:
 mkdir -p /etc/ansible/my-playbook






标签:rsync,01,name,no,nginx,ansible,剧本
From: https://www.cnblogs.com/nwq1101/p/18161006

相关文章

  • ansible剧本进阶
    ansible剧本进阶一.剧本的高级特性剧本高级特性是完全遵循python的循环结构来的编程语言特有的逻辑控制语句变量循环等等你的剧本,可以考虑用高级特性,也可以不用高级特性是为了简化剧本比如,创建10个系统的用户不用循环手写ansiblebakcup-muser-a"name=cc01"an......
  • 使用ansible-playbook自动化安装Oracle DG数据库19c
    【用剧本安装OracleDG数据库】源库是RAC,安装的话可以参考之前内容,目标库DG是单机文件系统说明:源库是RAC架构,DG是单机文件系统架构,管理使用dgbroker管理(这里使用命令行操作),安装单机数据库然后使用createDuplicateDB方式创建DG库,由于剧本脚本较多,可以留言发送脚本所有剧本目录信......
  • ansible相比shell脚本自动化有什么优势
    Ansible自动化与Shell脚本自动化相比,具有以下几个显著的优势:轻量级与无需代理:Ansible的一个关键优势在于其轻量级和无需在被控制服务器上安装任何代理或客户端的特点。这极大地简化了部署和维护的流程,降低了复杂性和出错的可能性。而Shell脚本通常需要在每台服务器上单独执行,这......
  • ansible 安装以及简单使用
    自动化运维工具-ansible1.ansible的安装我选择的是rpm包安装下载地址:链接:https://pan.baidu.com/s/1dqm_QDGjd9oSNS5qEZzD5Q?pwd=34s5提取码:34s5 下载之后直接rpm-ivh sshpass-1.06-2.el7.x86_64.rpmrpm-ivh ansible-2.9.5-1.el7.ans.noarch.rpm2.ansible配置修改......
  • ansible 删除密码过期账户
    hosts[centos-root]192.168.174.129ansible_ssh_port=22192.168.174.130ansible_ssh_port=22192.168.174.131ansible_ssh_port=22AnsibleVault文件创建AnsibleVault文件#ansible-vaultcreatepasswords.ymlNewVaultpassword:#12345......
  • 在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
    在Linux中,使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)是一个强大的组合,可以大大提高开发和部署的效率。下面将详细阐述如何配置和使用这两个工具来实现这一目标。1.Jenkins配置安装Jenkins你可以从Jenkins官网下载最新的安装包,或者使用包管理器(如a......
  • 【小提示】消除Ansible执行rpm命令时显示的警告
    你好。我是AmazonWebServices团队的Sureing。最近,我们的麒麟系统存在openssl漏洞,我把它修好了。于是我使用命令对使用rpm包更新后的openssl进行版本检查当我运行shell模块使用rpm命令时,我收到以下警告:忽略它不会立即导致问题,但它很恶心,因此本文的目的是解决它。[root@host-Am......
  • 【小提示】指定Python版本以消除运行Ansible时显示的警告
    我正在编写Ansible手册来设置Mac。当我运行它时,我收到警告,所以我会调查它并分享我解决的问题。你好。我是AmazonWebServices团队的Sureing。最近,我的Mac键盘无法正常工作,我把它修好了。在此期间,将提供替换设备,但设置为默认设置。您可以手动更改设置,但让我们使用Ansible......
  • Ansible:更快点,执行过程分析、异步、效率优化【转】
    Ansible你快点:Ansible执行过程分析、异步、效率优化Ansible虽然方便,但有个"为人诟病"的问题:任务执行速度太慢了,在有大量任务、大量循环任务时,其速度之慢真的是会让人等到崩溃的。Ansible官方给了一些优化选项供用户选择,还可以去网上寻找优化Ansible相关的插件。但在调优Ansible......
  • Linux架构30 Ansible jinja2模板, jinja2模板配置负载均衡, keepalived
    Ansiblejinja2模板一、Ansiblejinja2模板概述#什么是jinja2模板jinja2是Python的全功能模板引擎#Jinja2与Ansible啥关系Ansible通常会使用jinja2模板来修改被管理主机的配置文件等...在saltstack中同样会使用jinja2如果在100台主机上安装服务,每台服务的监听端口都不一样......