zoukankan      html  css  js  c++  java
  • Ansible入门系列--模块

    一、Ansible常用模块

    1、Command

    在远程主机执行命令,默认模块,可忽略-m选项。
    
    
    [root@ansible ~]# ansible-doc -s command
    - name: Execute commands on targets
      command:
          argv:                  # Passes the command as a list rather than a string. Use `argv' to avoid quoting values that would otherwise be interpreted incorrectly (for example "user name"). Only the string or the list form can be
                                   provided, not both.  One or the other must be provided.
          chdir:                 # Change into this directory before running the command.
          cmd:                   # The command to run.
          creates:               # A filename or (since 2.0) glob pattern. If it already exists, this step *won't* be run.
          free_form:             # The command module takes a free form command to run. There is no actual parameter named 'free form'.
          removes:               # A filename or (since 2.0) glob pattern. If it already exists, this step *will* be run.
          stdin:                 # Set the stdin of the command directly to the specified value.
          stdin_add_newline:     # If set to `yes', append a newline to stdin data.
          strip_empty_ends:      # Strip empty lines from the end of stdout/stderr in result.
          warn:                  # Enable or disable task warnings.
    [root@ansible ~]# 
    

      

    此命令不支持 $VARNAME < > | ; & 等,shell模块实现
    chdir:   进入到被管理主机目录
    creates: 如果有一个目录是存在的,步骤将不会运行Command命令
    ansible all -a "chdir=/var/log ls -al"

    例如,执行以下命令,使用command命令不正确:

    ansible all -m command -a "netstat -ntpl|grep ssh"
    

      改成shell模块则正常。

    2、Shell

    在远程主机上执行命令,和command类似,但是比command应用广泛。

     ansible all -m shell  -a 'getenforce'  查看SELINUX状态
     ansible all -m shell  -a "sed -i 's/SELINUX=.*/SELINUX=disabled' /etc/selinux/config"
     ansible srv -m shell -a 'echo magedu |passwd –stdin wang'
    

      

    调用bash执行命令 类似 cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt     
        这些复杂命令,即使使用shell也可能会失败,
        解决办法:写到脚本时,copy到远程执行,再把需要的结果拉回执行命令的机器
    
        修改配置文件,使shell作为默认模块    
            vim /etc/ansible/ansible.cfg
            module_name = shell
    

      

    3、Script

    Script:在远程主机上运行ansible服务器上的脚本
    ansible websrvs -m script -a /data/test.sh
    

      

    4、Copy

    从主控端复制文件到远程主机
    src : 源文件  指定拷贝文件的本地路径  (如果有/ 则拷贝目录内容,比拷贝目录本身)
          dest: 指定目标路径
          mode: 设置权限
          backup: 备份源文件
          content: 代替src  指定本机文件内容,生成目标主机文件
          
          > ansible websrvs -m copy -a "src=/root/test1.sh dest=/tmp/test2.showner=wang mode=600 backup=yes"
            如果目标存在,默认覆盖,此处指定先备份
          > ansible websrvs -m copy -a "content='test content
    xxx' dest=/tmp/test.txt"
            指定内容,直接生成目标文件
    

      

    5、Fetch

    从远程主机提取文件至主控端,copy相反,目前不支持目录,可以先打包,再提取文件
    > ansible websrvs -m fetch -a 'src=/root/test.sh dest=/data/scripts'
         会生成每个被管理主机不同编号的目录,不会发生文件名冲突
         
         > ansible all -m shell -a 'tar jxvf test.tar.gz /root/test.sh'
         > ansible all -m fetch -a 'src=/root/test.tar.gz dest=/data/'
    

      

    6、File

    设置文件属性
    path: 要管理的文件路径 (强制添加)
        recurse: 递归,文件夹要用递归
        src:  创建硬链接,软链接时,指定源目标,配合'state=link' 'state=hard' 设置软链接,硬链接
        state: 状态
              absent 缺席,删除
              
        > ansible websrvs -m file -a 'path=/app/test.txt state=touch'       创建文件
        > ansible websrvs -m file -a "path=/data/testdir state=directory"   创建目录    
        > ansible websrvs -m file -a "path=/root/test.sh owner=wang mode=755"  设置权限755
        > ansible websrvs -m file -a 'src=/data/testfile dest=/data/testfile-link state=link' 创建软链接
    

      

    7、unarchive

    解包解压缩
    有两种用法:
        1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes.
        2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
    
        常见参数:
            copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,
                  如果设置为copy=no,会在远程主机上寻找src源文件
            src: 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,
                  如果是远程主机上的路径,则需要设置copy=no
            dest:远程主机上的目标路径
            mode:设置解压缩后的文件权限
        
        示例:
            ansible websrvs -m unarchive -a 'src=foo.tgz dest=/var/lib/foo'  
              #默认copy为yes ,将本机目录文件解压到目标主机对应目录下
            ansible websrvs -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777'
              # 解压被管理主机的foo.zip到data目录下, 并设置权限777
            ansible websrvs -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no'
    

      

    8、archive

    打包压缩

    ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777'
        将远程主机目录打包 
            path:   指定路径
            dest:   指定目标文件
            format: 指定打包格式
            owner:  指定所属者
            mode:   设置权限
    

      

    9、Hostname

    管理主机名

    ansible appsrvs -m hostname -a "name=app.adong.com"  更改一组的主机名
    ansible 192.168.38.103 -m hostname -a "name=app2.adong.com" 更改单个主机名
    

      

    10、Cron

    计划任务

    支持时间:minute,hour,day,month,weekday
     ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime" 
        创建任务
        > ansible websrvs -m cron -a 'state=absent name=Synctime' 
        禁用任务
        > ansible websrvs -m cron -a 'minute=*/10 job='/usr/sbin/ntpdate 172.30.0.100" name=synctime disabled=true'
        删除任务
        >ansible websrvs -m cron -a 'minute=*/10 job='/usr/sbin/ntpdate 172.30.0.100" name=synctime state=absent'
    job和name必须有。disabled=true或disabled=yes 
    

      

      

    11、Yum

    包管理

    ansible websrvs -m yum -a 'list=httpd'  查看程序列表
    ansible websrvs -m yum -a 'name=httpd state=present' 安装
    ansible websrvs -m yum -a 'name=httpd state=absent'  删除
        可以同时安装多个程序包
    

      

    12、Service

    管理服务

        ansible srv -m service -a 'name=httpd state=stopped'  停止服务
        ansible srv -m service -a 'name=httpd state=started enabled=yes' 启动服务,并设为开机自启
        ansible srv -m service -a 'name=httpd state=reloaded'  重新加载
        ansible srv -m service -a 'name=httpd state=restarted' 重启服务
    

      

    13、User

    管理用户

        home   指定家目录路径
        system 指定系统账号
        group  指定组
        remove 清除账户
        shell  指定shell类型
        
        ansible websrvs -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
        ansible websrvs -m user -a 'name=sysuser1 system=yes home=/app/sysuser1'
        ansible websrvs -m user -a 'name=user1 state=absent remove=yes'  清空用户所有数据
        ansible websrvs -m user -a 'name=app uid=88 system=yes home=/app groups=root shell=/sbin/nologin password="$1$zfVojmPy$ZILcvxnXljvTI2PhP2Iqv1"'  创建用户
        ansible websrvs -m user -a 'name=app state=absent'  不会删除家目录,remove=true删除家目录
        
        安装mkpasswd 
        yum insatll expect 
        mkpasswd 生成口令
        openssl passwd -1  生成加密口令
    

      

    14、Group

    管理组

            ansible srv -m group -a "name=testgroup system=yes"   创建组
            ansible srv -m group -a "name=testgroup state=absent" 删除组
    

      

      

  • 相关阅读:
    与生命晒跑
    关于你有一条未读短信的静态单页
    【微收藏】来自Twitter的自动文字补齐jQuery插件
    chrome 插件个人使用推介
    vscode中检测代码中的空白行并去除的方法
    FTP文件乱码导致的无法删除
    git操作遇到的几个问题
    一个srand、rand结果相同的问题
    【verilog】单周期MIPS CPU设计
    【verilog】多周期MIPS CPU设计
  • 原文地址:https://www.cnblogs.com/skyflask/p/15451444.html
Copyright © 2011-2022 走看看