zoukankan      html  css  js  c++  java
  • Ansible快速实战指南----多机自动化执行命令、部署神器

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    1、需求:

    需要在多台主机上,发送文件、执行命令,进行快速部署

     

    2、ansible 远程复制文件

    例子:在当前节点(20.88.14.7) 上向其他指定的节点发送文件

    (1)创建host---基于密码连接其他节点

    vim  host

    [ip_list]
    20.88.14.8 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="root"
    20.88.14.9 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="root"   

     

     (2)创建测试文件

    vim test_ansible.sh

     

    (3)远程复制文件到各个节点

    ansible ip_list -i ./host -m copy -a "src=./test_ansible.sh dest=/root/"

    解释:

    -i :指定hosts文件路径, 默认default=/etc/ansible/hosts
    
    -m :要执行的模块,默认为command(这里使用的是copy模块,更多模块见 后文,43)ansible常用模块)
    
    -a:指定模块的参数 (可增加权限参数:owner=root mode=777
    如:

        将本地的/etc/fatab文件复制到目标主机的/tmp/fatab.ansbile,属主为root权限为640

       ansible test_name -m copy -a 'src=/etc/fstab dest=/tmp/tatab.ansible owner=root mode=640'
    
    

     

    copy模块:

    [root@node1 ~]# ansible-doc -s copy
    - name: 将文件复制到被管理主机
    action: copy
    backup          # 创建一个备份文件包括时间戳信息,如果以某种方式重创错了,还可以拿回原始文件
    content         # 取代src=,表示直接用此处指定的信息生成为目标文件内容;
    dest=           # 远程节点存放文件的路径,必须是绝对路径
    directory_mode  # 递归复制设置目录权限,默认为系统默认权限
    force           # 如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果设置为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
    group           # 复制到远程主机后,指定文件或目录的属
    mode            # 复制到远程主机后,指定文件或目录权限,类似与 'chmod' 指明如 0644
    owner           # 复制到远程主机后,指定文件或目录属主
    src             # 要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。
               在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

    (4)执行结果:

    当前节点执行成功的结果:

     

     其他节点:

     

     

     3、ansible  远程执行命令,修改 test_ansible.sh 的名字为 test_ansible_new.sh

    (1)创建host---基于密码连接其他节点

      同前

    (2)远程执行命令,改名

    ansible ip_list -i ./host -m command -a "mv /root/test_ansible.sh /root/test_ansible_new.sh"

    解释:

    command模块(命令模块,默认模块,用于在远程主机执行命令,缺点:运行的命令中无法使用变量,管道。如果需要使用管道、变量,请使用raw模块,或者shell模块)
    [root@node1 ~]# ansible-doc -s command
    
    chdir           # 在执行命令之前,先切换到该目录
    creates         # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
    executable      # 切换shell来执行命令,需要使用命令的绝对路径
    free_form=      #要执行的Linux指令,一般使用Ansible的-a参数代替。
    removes         #一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
     

    (3)执行结果

    本节点(20.88.14.7):

    其他节点:

     

    4、参考:

    (1)ansible的安装和连接

    https://www.cnblogs.com/yanjieli/p/10969089.html

    (2)ansible常用参数

    https://www.cnblogs.com/tyk3201/p/12383081.html

     (3)ansible常用模块

    https://www.cnblogs.com/ccorz/p/ansible-chang-yong-mo-kuai.html

      

    Only action can relieve the uneasiness.
  • 相关阅读:
    一篇好文,以在迷茫时阅读
    [转]EeeBox 安裝 Debian 後驅動 Wireless 筆記
    SVN内外网版本库同步手册
    Android小试牛刀之1——对话框应用和SharedPeferences存储
    关于Lucene.net 2.9.2.2 中删除索引的若干问题
    提高SQL SERVER并发能力
    Entity Framework 4 Poco开发之旅 part 2
    在linux下安装dropbox
    Windows平台高性能站点手册
    利用java反射原理写了一个简单赋值和取值通用类【改】
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/15306219.html
Copyright © 2011-2022 走看看