【RHCE】ansible的简单配置

发布于:2022-11-15 ⋅ 阅读:(551) ⋅ 点赞:(0)

目录

使用静态清单文件指定受管主机

定义主机清单

定义方式

 使用静态主机清单指定受管主机(默认)

 验证清单

第一种方式

第二种方式(图表形式显示)

选择主机和组:

1>匹配所有主机

2>匹配指定的主机或者主机组

3>通配符匹配

4>通配符组合匹配

5>正则表达式匹配

管理ansible的配置文件

配置ansible

根据优先级选择执行ansible配置文件

管理配置文件中的设置

ad-hoc与模块帮助查询

ansible的基本用法

总结

Linux返回结果的颜色:


使用静态清单文件指定受管主机

        构建ansible主机清单

定义主机清单

        清单中定义ansible将要管理的一批主机,这些主机也可以分配到组中,以进行集中管理。组中也可以包含子组,一台主机也可以是多个组中的成员。清单还可以设置应用到它所定义的主机和组的变量。

定义方式

        可以通过两种方式定义主机清单。静态主机清单可以通过文本文件定义。动态主机清单可以根据需要使用外部信息提供程序通过脚本或其他程序生成。

 使用静态主机清单指定受管主机(默认)

        静态主机清单文件是指定的ansible目标受管主机的文本文件。文件编辑格式有多种格式INI和YAML格式。INI格式较为常见建议使用INI格式编辑。

 【vim /root/ansible/inventory👆】

定义注意事项:默认安装ansible匹配的主机清单文件是/etc/ansible/hosts

(1) 在主机清单文件中每一行一个主机ip(主机名) servera.example.com serverb.example.com

(2) 主机组中定义受管主机,用[ ]扩起受管主机组的名称,然后每一行添加一个受管主机名称(ip) [usa] serverb.example.com serverc.example.com [canada] w1.example.com w2.example.com

(3) 定义嵌套组(多个主机组所构成新的主机组)嵌套主机组名称定义前面写组名后面:children来实现 [america:children] usa canada

(4) 通过范围简化主机规格 格式[START:END] eg:192.168.[4:7].[10:20] / [a:c].example.com

 验证清单

第一种方式

        #ansible 主机组or主机名 --list-hosts

======================注意===============================

        all 主机组含有清单中明确列出的每一个主机

        ungrouped 主机组含有清单中明确列出、但不属于任何其他组的每一个主机

=============================================================

第二种方式(图表形式显示)

        查看主机组

        Ansible-inventory  --graph 

选择主机和组:

1>匹配所有主机

        all 或者*

2>匹配指定的主机或者主机组

        (1)匹配单个组

        (2)匹配单个主机

        (3)匹配多个主机

        (4)匹配多个组

         (5)匹配不属于任何组的主机

3>通配符匹配

        *

        ansible server* --list-hosts

4>通配符组合匹配

        [root@servera ~]# ansible 'web:ftp' --list-hosts

         hosts (2):

         servera.openlab.com

         serverb.openlab.com

        [root@servera ~]# ansible 'web:mail' --list-hosts

         hosts (2):

         servera.openlab.com

         serverb.openlab.com

        [root@servera ~]# ansible 'web:&mail' --list-hosts

         hosts (1):

         servera.openlab.com

        [root@servera ~]# ansible 'web:!mail' --list-hosts

        [WARNING]: No hosts matched, nothing to do

         hosts (0):

        [root@servera ~]# ansible 'mail:!web' --list-hosts

         hosts (1):

         serverb.openlab.com

5>正则表达式匹配

         ansible "~(web|db).*.example.com" -m ping

        注:

         .任意单个字符

        "~"开始表示正则匹配

        * 匹配前面的子表达式零次或多次

        \转义

总结

        主机清单格式(交、并、补)

        \>all 所有主机

        \>通配符

         ansible "*" -m ping

         ansible 192.168.60.* -m ping

         ansible "web*" -m ping

        \>或  :   (并)属于A或属于B的元素的集合A并B AUB  ,也表示或者的意思

         ansible "websrv:appsrv" -m ping

        \>与  :& (交集)属于A且属于B

         ansible 'websrv:&appsrv' -m ping

        \>非  :!  (补集)属于全集U不属于集合A

         ansible 'websrv:!dbsrv' -m ping  (在websrv主但不在dbsrv组)

        综合逻辑

         ansible 'websrv:dbsrv:&appsrv:!ftsrv' -m ping

        正则表达式

         ansible "~(web|db).*\.example\.com" -m ping

注:

         .任意单个字符 

         "~"开始表示正则匹配

         * 匹配前面的子表达式零次或多次

         \转义

管理ansible的配置文件

配置ansible

         通过修改ansible配置文件中的设置来定义ansible安装行为。通过控制节点上多个可能位置之一选择相应位置的配置文件。

根据优先级选择执行ansible配置文件

         执行ansible命令根据所在目录匹配相关ansible配置文件,实践中一般使用ansible命令的目录中创建ansible.cfg文件,此目录中也将包含任何你的ansible项目使用的文件,有清单或者主机清单。

        ANSIBLE_CONFIG(ansible环境变量中指向的配置文件)---->./ansible.cfg ---->~/.ansible.cfg ----> /etc/ansible/ansible.conf

        #ansible --version         查看当前使用的是哪个ansible.cfg配置文件

管理配置文件中的设置

       

        主配置文件 /etc/ansible/ansible.cfg

        ansible中配置文件是有优先级的:

        如果你在某个目录中执行ansible的命令,需要加载配置文件ansible.cfg

        寻找ansible.cfg的顺序

        首先去查看环境变量:ANSIBLE_CONFIG如果有这个环境变量那么就去加载这个环境变量对应ansible.cfg配置

        之后:如果没有这个环境变量,会在当前目录下查找ansible.cfg如果有的话就去加载

        再后:如果当前目录下也没有,去加载用户家目录~/.ansible.cfg 如果有去加载

        最后,如果没有,去加载默认的ansible配置文件:/etc/ansible/ansible.cfg

【ping一下看看】

案例一:ansible使用ssh连接受管主机,一般不建议用管理用户,要求通过普通用户student进行链接

        [defaults]

        inventory = /etc/ansible/hosts

        remote_user =  student

        ask_pass  = True

案例二: 关闭主机秘钥验证

        在管控主机中通过指定用户发起操作指令,在受管主机中通过ssh远程连接方式以student用户身份执行,并验证密码;如果ask_pass为false 则可以通过-k  或者--ask-pass来提示接收密码进行验证。

        host_key_checking = False   关闭主机秘钥验证:

        或者直接在控制主机的操作系统中设置环境变量, 如下所示:

        $export ANSIBLE_HOST_KEY_CHECKING=False

案例三:主机免密登陆,关闭秘钥

        如果不需要密码验证(忽略密码验证)则需要配置秘钥验证

        ssh-keygen  -t rsa -f ~/.ssh/id_rsa -P '' -q

        for  host   in server{a,b};do ssh-copy-id -i  $host ;done

案例四:远程用户sudo提权

        如果在受管主机中需要通过管理员身份运行命令则配置sudo

        vim /etc/sudoers

        student    ALL=(ALL)   NOPASSWD: ALL

        注:在受管主机中进行配置,建议管理sudo用户提权密码验证,如果没有关闭则ask_sudo_pass = True 来开启执行命令sudo提权密码验证;但是ask_sudo_pass = False那么可以空过-K    --ask-become-pass来开启执行命令sudo提权密码验证

案例五:特权升级。

        在受管主机中通过sudo提权可在ansible配置中进行优化,开启远程用户在受管主机中执行特权升级。控制主机执行特权命令不需要指定sudo命令

        [student@localhost ~]$  ansible web -a 'sudo useradd haha'

        [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather

        than running sudo

        servera | CHANGED | rc=0 >>

        serverb | CHANGED | rc=0 >>

        Vim /etc/ansible/ansible.cfg

        [privilege_escalation]

        become=True

        become_method=sudo

        become_user=root

        become_ask_pass=False

        [student@localhost ~]$ ansible web -a 'useradd xixi'

        servera | CHANGED | rc=0 >>

        serverb | CHANGED | rc=0 >>

 ad-hoc与模块帮助查询

ansible的基本用法

        ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面需要跟主机和选项部分,默认不指定模块时,使用的是command模块。

        ansible运行临时命令语法

        #ansible host-pattern -m module [-a 'module arguments'] [-i inventory]

ansible-doc 查找关于本地系统上安装的模块信息==显示模块帮助(ansible里man命令)

-l,--lsit 查看控制节点上可用的模块列表以及其功能的概要;列出可用模块

-s,--snippet 列岀某个模块支持的动作 显示模块的playbook

ansible-doc [module name] 查看指定模块的概要、选项、详细信息、以及基本用法

模块文档文档网站:http://docs.ansible.com

        注意:帮助显示中模块维护标记

         由于有些模块可能处于不同的开发阶段查看模块开发状态,是在ansible-doc输出末尾的METEDATA部分中指明 

        stableinterface: 模块的关键字稳定,将尽力确保不删除关键字或更改其含义 

        preview:模块处于阶段预览,可能不稳定 

        deprecated: 模块弃用 

        removed:模块已从发行版中移除 

总结

1.ansible****运行临时命令**

          语法:ansible 主机或组 -m 模块名 -a '模块参数' -i 清单文件 

2.如何获取有哪些模块

          ansible-doc -l 

3.模块帮助

        3.1参数帮助

                ansible-doc -s   modname    

                ansible-doc -s   user 

        3.2模块帮助示例:

                ansible-doc user 

Linux返回结果的颜色:

        绿色:执行成功并且不需要做出任何改变  # 绿色: 使用ping模块返回的结果就是绿色: 代表执行成功,且并没有做出任何改变

        黄色:执行成功并且对目标主机做出变更  # 黄色:使用shell模块执行useradd时候:在被管理主机node1上创建了一个用户,所以做出了更改,因此它显示成黄色

        红色:执行失败 # 执行失败: 第一个连接不上,第二个执行过程中遇到问题

        蓝色:显示详细过程

        紫色:显示警告 # warning警告

本文含有隐藏内容,请 开通VIP 后查看