zoukankan      html  css  js  c++  java
  • Ansible安装部署和常用命令,及其主机清单inventory(二)

    1.ansible的安装方式

    1.1使用yum源安装

    yum install ansible -y 

    1.2使用rpm包安装

    https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    2.主机认证

    2.1主机分配

      采用2台主机做测试环境

    主控制端 192.168.152.129
    被控制端 192.168.152.130

    2.2单向主机认证

    ssh-keygen -t rsa -f ~/.ssh/id_rsa -N "" -q  
    ssh-copy-id  -i /root/.ssh/id_dsa.pub  root@192.168.152.130
    

    2.3使用expect  

     expect工具实现非交互式的ssh-copy-id,避免每次都询问登陆主机的用户和密码

     同时也可以使用,ansible自带的批量添加秘钥模块,批量的分发到控制端节点,authorized_key模块即可完成,详见介绍常用的ansible的模块。

    # 安装expect
    [root@server1 ~]# yum -y install expect
    
    # expect脚本
    [root@server1 ~]# cat auto_sshcopyid.expect 
    #!/usr/bin/expect
    
    set timeout 10
    set user_hostname [lindex $argv 0]
    set password [lindex $argv 1]
    
    spawn ssh-copy-id $user_hostname
    expect {
            "(yes/no)?"
            {
                    send "yes
    "
                    expect "*password: " { send "$password
    " }
            }
            "*password: " { send "$password
    " }
    }
    
    expect eof
    
    # 批量调用expect的shell脚本
    [root@server1 ~]# cat sshkey.sh 
    #!/bin/bash
    
    ip=`echo -n "$(seq -s "," 131 134),150" | xargs -d "," -i echo 192.168.152.{}`
    password="123456"
    #user_host=`awk '{print $3}' /root/.ssh/id_rsa.pub`
    
    for i in $ip;do
            /root/auto_sshcopyid.expect root@$i $password &>>/tmp/a.log
            ssh root@$i "echo $i sure "
    done
    
    # 执行shell脚本配置互信
    [root@server1 ~]# chmod +x /root/{sshkey.sh,auto_sshcopyid.expect}
    [root@server1 ~]# ./sshkey.sh
    

      

    3.主要配置文件

    /etc/ansible/ansible.cfg       #主配置文件,配置ansible工作特性
    /etc/ansible/hosts             #主机清单文件
    /etc/ansible/rules             #角色目录
    
    /etc/ansible/ansible.cfg 配置文件简单介绍:
    [defaults]
    # some basic default values...
    #inventory      = /etc/ansible/hosts      #host的主机清单
    #library        = /usr/share/my_modules/  #模块目录
    #module_utils   = /usr/share/my_module_utils/ #模块目录
    #remote_tmp     = ~/.ansible/tmp  # tmp远端临时存放的目录 ,命令执行完目录下生成的脚本删除
    #local_tmp      = ~/.ansible/tmp     #主控端执行命令的时候,把命令脚本存放,发送到被控制端的零时存放,执行完删除
    #forks          = 5  #指定进程为5
    #poll_interval  = 15  #拉取数据间隔时间
    #sudo_user      = root  #主控端执行命令的时候非root身份,需要切换以什么用户身份执行命令
    #ask_sudo_pass = True 
    #ask_pass      = True
    #transport      = smart
    #remote_port    = 22  #默认端口号
    #module_lang    = C
    #module_set_locale = False
    ####
    #host_key_checking = False   #检查对应服务器的host_key ,建议取消注释(不检查第一次连接主机的时候 输入yes)
    #log_path=/var/log/ansible.log #日志文件存放路径
    #roles_path    = /etc/ansible/roles:/usr/share/ansible/roles #roles相关
    程序文件: /usr/bin/ansible #主程序,临时命令执行工具 /usr/bin/ansible-doc #查看配置文档,模块功能查看工具   -a   #列出所有模块的文档   -l,--list   #列出可以用的模块   -s,--snippet   #显示指定模块的playbook片段(显示简单的使用方法) /usr/bin/ansible-galaxy #下载/上传优秀代码或Roles模块的官网平台 /usr/bin/ansible-playbook #定制自动化任务,编排剧本工具/usr/bin/ansible-pull 远程执行命令的工具: /usr/bin/ansible-vault #文件加密工具 /usr/bin/ansible-console #基于Console界面与用户交互的执行工具

    4.ansible的语法结构

    功能:通过ssh实现配置管理、应用部署、任务执行等功能

    语法:
        ansible <host-pattern> [options]
        ansible <host-pattern> [-m module_name] [-a args]
        ansible 主机清单 -m 模块 -a 模块参数(命令) [-o单行显示]
    常用选项:
        -m :模块
        -a :模块选项
        -o :结果单行显示
        -u :主机的用户名
        -k :密码询问方式
        -i :自定义主机清单文件
        –version                  显示版本ansible的版本号
        -v 详细过程                –vv -vvv更详细
        –list-hosts               显示主机列表,可简写--list
    -k, –ask-pass 没有做密码密钥认证的时候,需要加,提示连接密码,默认Key验证 -K, –ask-become-pass 远端执行命令的时候是以谁的用户身份执行,要输入谁的密码 -C, –check 检查,并不执行 -T, –timeout=TIMEOUT 执行命令的超时时间,默认10s -u, –user=REMOTE_USER 远端执行命令的时候是以谁的用户身份执行, -b, –become 代替旧版的sudo 切换 root时候或者其他用户的时候使用    -B, 异步运行,并在多少秒后,超时就停止运行 例如 -B 200 ;默认是同步,保持长连接,等待让所有任务完成返回结果。 -P, 异步运行间隔时间 默认15秒 -t, 执行及结果输出到目录,目录名为host的主机名作为目录名,也可做重定向使用       --syntax-check, 检查playbook的语法,不执行语句内容

      

    4.1特殊的表达式

    支持正则表达式:
    
     *  支持通配符
    示例:
    ansible “*” -m ping
    ansible 192.168.152.* -m ping
    ansible “*srvs” -m ping
    
    与:交集关系
    示例: ansible “web:&db” -m ping 或: 示例: ansible “websrvs:dbsrvs” -m ping ansible “192.168.152.130:192.168.152.131” -m ping 非: ansible ‘websrvs:!dbsrvs’ -m ping 在websrvs组,但不在dbsrvs组中的主机 正则表达式: ansible “~(web|db).*.liych.com” -m ping

    5.Inventory主机配置清单格式

      用于定义ansible要管理的主机列表,可以定义单个主机和主机组,通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关,主机配置文件在/etc/ansible/hosts就是默认的inventory。

      使用是需要定义主机清单,inventory常用的定义规则如下:

    cat -n /etc/ansible/hosts
    
    1)定义主机组方式
    [webservers]     #一个组名
    192.168.152.131  #组内主机
    192.168.152.132
    
    2)批量定义主机
    [webservers]
    192.168.152.[131:134]  #【可以指定范围】 一般为顺序可连代表着.131,132,133,134
    
    3)域名批量定制
    [websrvs]
    www[01:100].example.com  #同上
    [dbsrvs]
    db-[a:f].example.com  #同上
    
    4)内置参数:用户名和密码,ssh端口;命令行不用输入-u和-k选项 在主机清单内设置密码可见
    [webservers]
    192.168.152.[131:132] ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='22'
      ansible_ssh_user #当前主机的用户
      ansible_ssh_pass  #当前主机的密码
      
    5)vars变量 :定义主机的内置参数 
    webservers] 
    192.168.152.[131:132] 
    [webservers:vars] #可以设置一组,生效于多个主机 
    ansible_ssh_user='root'
    ansible_ssh_pass='123456'
    ansible_ssh_port='22'
    
    6)子组分类变量:children
    [nginx]
    192.168.152.131
    [apache]
    192.168.152.132
    [webservers:children]
    apache
    nginx
    [webservers:vars]
    ansible_ssh_user='root'
    ansible_ssh_pass='123456'
    ansible_ssh_port='22'
    
    #以上表示定义2个组,然后把2个小组加到一个大组内(webservers) ,同时为大组内的小组建立通用的通信账户信息。
    

      

    简单命令执行,验证是可以通信使用的。

    ping测试使用:

    创建目录文件:

    6.命令的执行过程:

    1. 首先读主配置文件并加载 默认/etc/ansible/ansible.cfg

    2.获取主机列表加载自己对应的模块文件,如command等

    3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件

    4.给该文件传输至远程服务器文件+x执行权限

    5.主控制端执行并返回结果,输出到屏幕

    6.删除临时远端的py临时文件,sleep 0退出

    6.1返回结果颜色说明:

    绿色:执行成功

    黄色:执行成功并且对目标主机做过修改,例如创建文件后,在同目录下创建目录的话,返回黄色,如上图。

    红色:执行失败

    紫色:提示警告

    下篇文章预告:介绍常用的ansible的模块。

  • 相关阅读:
    怎样监听HTTP请求的发出与完成
    在Ubuntu下安装source Insight
    Android 5.1 预制输入法
    RK3288编译 Android 5.1 固件
    Android编程之Listener侦听的N种写法及实现原理
    android thread Runnable
    Android Service完全解析(下)
    Android Service完全解析(上)
    android 串口 android-serialport-api
    Android Studio在Ubuntu下离线安装Gradle
  • 原文地址:https://www.cnblogs.com/liych/p/11524225.html
Copyright © 2011-2022 走看看