• ansible


    准备工作:

      首先要在ansible所在主机,与被管控机器做好互信。 

    A/B服务器设置:
    vim /etc/ssh/sshd_config
    
    PermitRootLogin yes
    RSAAuthentication yes
    PubkeyAuthentication yes
    
    1 ssh-keygen -t rsa
    2 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.1

    1、安装部署

    // 添加repo
    [root@m01 ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    
    // yum安装ansilbe
    [root@m01 ~]# yum install ansible -y
    [root@m01 ~]# rpm -qa ansible
    
    // 检查ansible版本
    [root@m01 ~]# ansible --version
    ansible 2.9.2
      config file = /etc/ansible/ansible.cfg
      configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python2.7/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]

    2、添加主机清单

    [root@m01 ~]# vim /etc/ansible/hosts
    [sa]
    10.4.7.7
    10.4.7.8
    

    3、测试ansible

    [root@m01 ~]# ansible sa -m ping
    10.4.7.8 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    10.4.7.7 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    # 查看sa模块的主机的负载
    [root@m01 ~]# ansible sa -m shell -a 'uptime' -o

    //命令说明

    4. ansible常用命令

    /usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
    /usr/bin/ansible-doc   Ansible 模块功能查看工具
    /usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
    /usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
    /usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
    /usr/bin/ansible-vault  Ansible 文件加密工具
    /usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具
    
    其中,我们比较常用的是/usr/bin/ansible和/usr/bin/ansible-playbook
    

    5. 详解各个命令

    command 模块:
    这个模块可以直接在远程主机上执行命令,并将结果返回本主机。
    [root@server ~]# ansible web -m command -a 'ss -ntl'
    
    命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)。注意,该命令不支持| 管道命令。
      下面来看一看该模块下常用的几个命令:
    
    chdir       # 在执行命令之前,先切换到该目录
    executable # 切换shell来执行命令,需要使用命令的绝对路径
    free_form   # 要执行的Linux指令,一般使用Ansible的-a参数代替。
    creates  # 一个文件名,当这个文件存在,则该命令不执行,可以
    用来做判断
    removes # 一个文件名,这个文件不存在,则该命令不执行
    
    下面我们来看看这些命令的执行效果:
    root@server ~]# ansible web -m command -a 'chdir=/data/ ls'	#先切换到/data/ 目录,再执行“ls”命令
    192.168.37.122 | SUCCESS | rc=0 >>
    aaa.jpg
    fastdfs
    mogdata
    tmp
    web
    wKgleloeYoCAMLtZAAAWEekAtkc497.jpg
    
    [root@server ~]# ansible web -m command -a 'creates=/data/aaa.jpg ls'		#如果/data/aaa.jpg存在,则不执行“ls”命令
    192.168.37.122 | SUCCESS | rc=0 >>
    skipped, since /data/aaa.jpg exists
    
    192.168.37.133 | SUCCESS | rc=0 >>
    skipped, since /data/aaa.jpg exists
    
    [root@server ~]# ansible web -m command -a 'removes=/data/aaa.jpg cat /data/a'		#如果/data/aaa.jpg存在,则执行“cat /data/a”命令
    192.168.37.122 | SUCCESS | rc=0 >>
    hello
    
    shell 模块:
    shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。
    [root@server ~]# ansible web -m shell -a 'cat /etc/passwd |grep "keer"'
    192.168.37.122 | SUCCESS | rc=0 >>
    keer:x:10001:1000:keer:/home/keer:/bin/sh
    只要是我们的shell命令,都可以通过这个模块在远程主机上运行,这里就不一一举例了。
    
    copy 模块:
    这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。
    其相关选项如下:
    
    src    #被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"
    content   #用于替换"src",可以直接指定文件的值
    dest    #必选项,将源文件复制到的远程主机的绝对路径
    backup   #当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
    directory_mode    #递归设定目录的权限,默认为系统默认权限
    force    #当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
    others    #所有的 file 模块中的选项可以在这里使用
    
    用法举例如下:
    ① 复制文件:
    [root@server ~]# ansible web -m copy -a 'src=~/hello dest=/data/hello' 
    192.168.37.122 | SUCCESS => {
        "changed": true, 
        "checksum": "22596363b3de40b06f981fb85d82312e8c0ed511", 
        "dest": "/data/hello", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "6f5902ac237024bdd0c176cb93063dc4", 
        "mode": "0644", 
        "owner": "root", 
        "size": 12, 
        "src": "/root/.ansible/tmp/ansible-tmp-1512437093.55-228281064292921/source", 
        "state": "file", 
        "uid": 0
    }
    
    ② 给定内容生成文件,并制定权限
    
    [root@server ~]# ansible web -m copy -a 'content="I am keer
    " dest=/data/name mode=666'
    192.168.37.122 | SUCCESS => {
        "changed": true, 
        "checksum": "0421570938940ea784f9d8598dab87f07685b968", 
        "dest": "/data/name", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "497fa8386590a5fc89090725b07f175c", 
        "mode": "0666", 
        "owner": "root", 
        "size": 10, 
        "src": "/root/.ansible/tmp/ansible-tmp-1512437327.37-199512601767687/source", 
        "state": "file", 
        "uid": 0
    }
    
    我们现在可以去查看一下我们生成的文件及其权限:
    [root@server ~]# ansible web -m shell -a 'ls -l /data/'
    192.168.37.122 | SUCCESS | rc=0 >>
    total 28
    -rw-rw-rw-   1 root root   12 Dec  6 09:45 name
    
    192.168.37.133 | SUCCESS | rc=0 >>
    total 40
    -rw-rw-rw- 1 root     root       12 Dec  5 09:45 name
    
    可以看出我们的name文件已经生成,并且权限为666。
    ③ 关于覆盖:
    我们把文件的内容修改一下,然后选择覆盖备份:
    [root@server ~]# ansible web -m copy -a 'content="I am keerya
    " backup=yes dest=/data/name mode=666'
    192.168.37.122 | SUCCESS => {
        "backup_file": "/data/name.4394.2017-12-06@09:46:25~", 
        "changed": true, 
        "checksum": "064a68908ab9971ee85dbc08ea038387598e3778", 
        "dest": "/data/name", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "8ca7c11385856155af52e560f608891c", 
        "mode": "0666", 
        "owner": "root", 
        "size": 12, 
        "src": "/root/.ansible/tmp/ansible-tmp-1512438383.78-228128616784888/source", 
        "state": "file", 
        "uid": 0
    }
     现在我们可以去查看一下:
    [root@server ~]# ansible web -m shell -a 'ls -l /data/'
    192.168.37.122 | SUCCESS | rc=0 >>
    total 28
    -rw-rw-rw-   1 root root   12 Dec  6 09:46 name
    -rw-rw-rw-   1 root root   10 Dec  6 09:45 name.4394.2017-12-06@09:46:25~
    
    192.168.37.133 | SUCCESS | rc=0 >>
    total 40
    -rw-rw-rw- 1 root     root       12 Dec  5 09:46 name
    -rw-rw-rw- 1 root     root       10 Dec  5 09:45 name.5962.2017-12-05@09:46:24~
      可以看出,我们的源文件已经被备份,我们还可以查看一下name文件的内容:
    
    [root@server ~]# ansible web -m shell -a 'cat /data/name'
    192.168.37.122 | SUCCESS | rc=0 >>
    I am keerya
    
    192.168.37.133 | SUCCESS | rc=0 >>
    I am keerya
    
     证明,这正是我们新导入的文件的内容。
    

      

      

      

    
    

     

     

    **************************************************************************************
    当你的才华还撑不起你的野心的时候,你就应该静下心来学习;当你的能力还驾驭不了你的目标时,就应该沉下心来,历练;梦想,不是浮躁,而是沉淀和积累,只有拼出来的美丽,没有等出来的辉煌,机会永远是留给最渴望的那个人,学会与内心深处的你对话,问问自己,想 要怎样的人生,静心学习,耐心沉淀,送给自己,共勉。
    **************************************************************************************
  • 相关阅读:
    操作系统概述
    18 文本处理
    17 正则表达式(重点)
    16 归档和备份
    15 查找文件
    博客园图片折叠
    EF6学习笔记十五:调试EF框架源码
    EF6学习笔记十四:上下文管理
    Sqlserver和LocalDB创建数据库时默认字符集不一样
    EF6学习笔记十三:基础知识完结,零碎问题补缺
  • 原文地址:https://www.cnblogs.com/macoffee/p/14151521.html
Copyright © 2020-2023  润新知