zoukankan      html  css  js  c++  java
  • Ansible命令/模块

    Ansible命令执行过程

    ansible命令执行过程:

    • 1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
    • 2. 加载自己对应的模块文件,如command
    • 3. 通过ansible将模块或命令生成对应的临时py文件,并将该 文件传输至远程 服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
    • 4. 给文件+x执行
    • 5. 执行并返回结果
    • 6. 删除临时py文件,sleep 0退出

    执行状态:

    • 绿色:执行成功并且不需要做改变的操作
    • 黄色:执行成功并且对目标主机做变更
    • 红色:执行失败

    Ansible常用模块

      Command:在远程主机执行命令,默认模块,可忽略-m选项

        ansible srvs -m command -a ‘service vsftpd start’

        ansible srvs -m command -a ‘echo magedu |passwd --stdin wang’ 不成功

        此命令不支持 $VARNAME < > | ; & 等,用shell模块

    ansible dbsever -m command -a 'chdir /etc creates/data/file1.txt cat /centos-release '
    #查看 dbserver下的主机的 系统版本,前进入/etc目录,如果file1.txt,文件不存在 将会执行

      Shell:和command相似,用shell执行命令

        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到远程,执行,再把需要的结果拉回执                   行命令的机器

        备注:可以进配置文件[/etc/ansible/ansible.cfg]文件中修改module_name=shell 来修改默认模块

      Script:运行脚本

        -a "/PATH/TO/SCRIPT_FILE“

        ansible dbserver -m script -a f1.sh

      Copy:从服务器复制文件到客户端,

        ansible srv -m copy -a “src=/root/f1.sh dest=/tmp/f2.sh owner=wang mode=600 backup=yes” 如目标存                   在,默认覆盖,此处指定先备份

        ansible srv -m copy -a “content=‘test content ’ dest=/tmp/f1.txt” 利用内容,直接生成目标文件 

      Fetch:从客户端取文件至服务器端,copy相反,目录可先tar

        ansible srv -m fetch -a ‘src=/root/a.sh dest=/data/scripts’

      File:设置文件属性

        ansible srv -m file -a "path=/root/a.sh owner=wang mode=755“

        ansible web -m file -a ‘src=/app/testfile dest=/app/testfile-link state=link’

      unarchive:解压缩包

        1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes

        2、将远程主机上的某个压缩包解压至指定路径下,设置copy=no

        常见参数:

          copy:默认为Yes,拷贝的文件是从ansible主机复制到远程服务器,如果设置为no,会砸死远程服务器上寻找src源文件

          remote_src:和copy功能一样互斥,yes表示在远程主机,不在ansible主机,no表示在ansible主机

          src:源路径,可以是ansilble主机上的路径,也可以是远程主机上的路径如果是远程主机上的路径copy=no

    ansible src -m unarchive -a 'src=/data/test.tar.gz dest=/var/test/'
    ansible src -m unarchive -a 'src=/data/test.tar.gz dest=/var/test/' copy=no mode=0777'

      Archive:打包压缩

          

    ansible dbserver -m archive -a 'path=/var/log/ dest=/data/log.tag.bz2 format=bz2'

      Hostname::管理主机名

        ansible node1 -m hostname -a “name=websrv”

      Cron:计划任务

        支持时间:minute,hour,day,month,weekday /分时日月周

        ansible srv -m cron -a “minute=*/5 job=‘/usr/sbin/ntpdate 172.16.0.1 &>/dev/null’ name=Synctime” 创建                  任务 

        ansible srv -m cron -a ‘state=absent name=Synctime’ 删除任务

    创建任务
    ansible dbserver -m cron -a 'hour=2 minute=30 weekday=1-5 name="bakup mysql" job=/root/mysql_backup.sh'
    #每周的星期1至星期五的2点30份在dbserver主机组,执行mysql_bachk.sh脚本
    ansible dbserver  -m cron -a "minute=*/5" job='/usr/sbin/ntpdate 17.20.0.1 &>/dev/null name=Synctime"
    
    禁用任务
    ansible dbserver  -m cron -a "minute=*/5" job='/usr/sbin/ntpdate 17.20.0.1 &>/dev/null name=Synctime disabled=yes"
    启用任务
    ansible dbserver  -m cron -a "minute=*/5" job='/usr/sbin/ntpdate 17.20.0.1 &>/dev/null name=Synctime disabled=no"
    
    ####################
    crontab -l 查看计划任务

      Yum:管理包

        ansible srv -m yum -a ‘name=httpd state=latest’ 安装

        ansible srv -m yum -a ‘name=httpd state=absent’ 删除

      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

      User:管理用户

        ansible srv -m user -a 'name=user1 comment=“test user” uid=2048 home=/app/user1 group=root‘

        ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1

        ansible srv -m user -a ‘name=user1 state=absent remove=yes‘ 删除用户 及家目录等数据

      Group:管理组

        ansible srv -m group -a "name=testgroup system=yes“

        ansible srv -m group -a "name=testgroup state=absent"

      Lineinfile:相当于sed,可以修改文件内容

        ansible在使用sed进行替换时,经常会遇到转义的问题,而且ansible在遇到特殊符号进行替换时经常出现问题,所以ansible提供了2个模块,lineinfle和replace模块,方便替换。

        

    ansible all -m lineinfile -a "path=/etc/selinux/config" regexp=' ^SELINUX=' line='SELINUX=enforcing' "
    #找出以SELINUX=开头的行,替换成'SELINUX=enforcing
    ansible all -m lineinfile -a 'dest=/etc/fstab.txt state=absent regexp="^#"'
    删除带#的行

      Replace:主要是基于正则进行匹配和替换

        

    ansible dbserver -m replace -a 'path=/etc/foo.txt regexp="^(UUID.*)" replace="#1"'
     
    
    #以UUID开头的行加 了注释

      Setup:收集远程主机的信息,例如:IP地址,硬件信息,等

      

    ansible dbserver -m setup 

    ansible系列命令   

       ansible-galaxy :连接 https://galaxy.ansible.com 下载相应的roles

       列出所有安装的galaxy:ansible-galaxy list

       安装galaxy:ansible-galaxy install geerlingguy.redis

       删除galaxy:nasible-galaxy remove geerlingguy.redis

    示例:向被控端发送 Hello world

    #hello world yml file
    - hosts: dbserver
      remote_user: root
      tasks:
        - name: hello world
          command: /usr/bin/wall hello world
    
    
    #缩进很重要
    ansible-playbook hello.yml

    Ansible-vault:管理加密解密yml文件,解密后才可执行

    ansible-vault encrypt hello.yml 加密
    ansible-vault decrypt hello.yml 解密
    ansible-vault view hello.yml 查看
    ansible-vault edit hello.yml 编辑加密文件
    ansible-vault rekey hello.yml 修改口令
    ansible-vault create new.yml 创建新文件
    人生苦短,我用Python
  • 相关阅读:
    西瓜书第三章-线性回归模型
    西瓜书第三章-线性模型【Logistic回归】(对数几率回归)
    Matlab绘图(二)低频率命令总结
    LaTex 资源总结
    plsql developer安装和使用遇到的问题解决
    【maven依赖包版本号是unknown导致无法下载】问题解决
    解决TortoiseGit报错:git did not exit cleanly (exit code 128)
    os模块的常用方法使用
    pycharm总是没有输出结果只是Process finished with exit code 0
    Jmeter发送post请求,报错:Content type 'text/plain;charset=UTF-8' not supported
  • 原文地址:https://www.cnblogs.com/sunjinchao/p/14425590.html
Copyright © 2011-2022 走看看