• ansible常用模块



    ansible-doc -s 模块名 (用来查看用法说明)


    1.ansible自动化管理工具
    [root@node1 ~]# yum info ansible 查看yun源里ansible的版本号
    [root@node1 yum.repos.d]# yum -y install epel-release
    [root@node1 yum.repos.d]# yum -y install ansible

    ansible是属于一次性任务,不是持续性的
    安装之后不需要启动服务

    2./etc/ansible/ansible.cfg (主配置文件)
    #inventory = /etc/ansible/hosts #主机列表配置文件
    #library = /usr/share/my_modules/ #库文件存放目录
    #remote_tmp = ~/.ansible/tmp #临时py命令文件存放在远程主机目录
    #local_tmp = ~/.ansible/tmp #本机临时命令执行目录
    #forks = 5 #默认并发数
    #sudo_user = root #默认sudo用户
    #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
    #ask_pass = True
    #remote_port = 22
    #host_key_checking = False #检查对应服务器的host_key,建议取消注释
    #log_path = /var/log/ansible.log #日志文件,建议使用
    #module_name = command #默认模块,可以修改为shell模块


    3.被管理机的地址 /etc/ansible/hosts (主机清单文件)
    如果被管理的主机过多可以选择分类,一般用[]来注释标签
    如果目标主机用了非默认的ssh端口,还可以在主机名称之后使用冒号加端口号来标明
    如果主机名称遵循相似的命名模式,还可以使用列表的方式标识各主机
    范例:
    ntp.magedu.com
    [webservers]
    www1.magedu.com:2222
    www2.magedu.com

    [dbservers]
    db1.magedu.com
    db2.magedu.com

    [websrvs]
    www[1:100].example.com

    [dbsrvs]
    db-[a:f].example.com

    [appsrvs]
    10.0.0.1[1:100]


    4.常用命令
    /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.通过ssh协议,实现远程主机的配置管理,应用部署,任务执行
    如果被管路主机的虚拟机比较多,可以用脚本实现
    利用sshpass批量实现基于key验证

    ssh-keygen -f /root/.ssh/id_rsa -P ''
    NET=192.168.20
    export SSHPASS=123456
    for IP in {22,23};do
    sshpass -e ssh-copy-id $NET.$IP
    done

    6.ansible常用模块
    command模块
    功能:在远程主机上执行命令,默认模块,可忽略-m选项
    注意:此命令不支持 $VARNAME <> | ; &等,用shell模块实现
    例子:
    [root@node1 ~]# ansible websrvs -m command -a 'chdir=/etc cat centos-release' 或 [root@node1 ~]# ansible websrvs -m command -a 'cat /etc/centos-release'
    注意:chdir的意思是直接cd到/etc下

    7.shell模块
    功能:和command相似。用shell执行命令
    例子:[root@node1 ~]# ansible websrvs -m shell -a 'echo $HOSTNAME'
    192.168.20.22 | CHANGED | rc=0 >>
    node2
    192.168.20.23 | CHANGED | rc=0 >>
    node3
    扩展:修改默认模块
    在主配置文件中的这一串#module_name = command 修改成module_name = shell就可以了
    就是将默认的command改成shell模块,不用重启服务

    8.Script模块
    功能:在远程主机上运行ansible服务器上的脚本
    例子:[root@node1 ~]# ansible websrvs -m script -a '/data/test.sh'
    运行结束之后,被远程的主机会把脚本自动删除
    远程主机的脚本在[root@node2 ~]# vim .ansible/tmp/ansible-tmp-1623120230.12-4051-84352792118513/test.sh


    9.Copy模块
    功能:从ansible服务器主控端复制文件到远程主机
    #如目标存在,默认覆盖,此处指定先备份,也可以拷贝文件夹
    例子:[root@node1 ~]# ansible websrvs -m copy -a 'src=/data/test.sh dest=/tmp/test.sh owner=root mode=600 backup=yes'
    说明:src是ansible主机的目录 dest是目标主机的目录 wener是目标主机的用户 mode是文件的权限 backup是复制一份

    #指定内容。直接生成目标文件
    例子:[root@node1 ~]# ansible websrvs -m copy -a "content='test line1 est line2' dest=/tmp/test.sh"
    说明:content是生成新的目标文件content是文件内容

    #复制/etc/下的文件,不包括/etc/目录自身
    例子:[root@node1 ~]# ansible websrvs -m copy -a 'src=/etc/selinux dest=/backup'


    10.Fetch模块
    功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
    例子:[root@node1 ~]# ansible all -m fetch -a 'src=/etc/redhat-release dest=/data/
    说明:将远程主机上的/etc/redhat-release文件,放入ansible的/data/目录下


    11.Fire模块
    功能:设置文件属性
    例子:
    #创建空文件夹,然后再创建文件
    [root@node1 ~]# ansible all -m shell -a 'mkdir /data/'
    [root@node1 ~]# ansible all -m file -a 'path=/data/ceshi.txt state=touch'
    [root@node1 ~]# ansible all -m file -a 'path=/data/ceshi.txt state=absent' absent是删除的意思
    [root@node1 ~]# ansible all -m file -a 'path=/data/ceshi.txt owenr=root mode=755'
    #创建目录
    [root@node1 ~]# ansible all -m file -a 'path=/data/mysql state=directory owner=root group=mysql'
    说明:directory就是创建的意思 后面是指定的用户和所属组
    #创建软连接
    [root@node1 ~]# ansible all -m file -a 'path=/data/testfile dest=/data/testfile-link state=link'

    12.unarchive模块
    功能:解包压缩包
    实现的两种方法:
    1.将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
    2.将远程主机上的某个压缩包解压到指定目录下,设置copy=no 远程主机上面的操作,不涉及ansible服务端

    参数:
    copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
    src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
    dest:远程主机上的目标路径
    mode:设置解压缩后的文件权限
    例子:[root@node1 data]# ansible all -m unarchive -a 'src=/data/etc.tar.gz dest=/data owner=zhang mode=0600'


    13.hostname模块
    功能:管理主机名
    例子:[root@node1 data]# ansible 192.168.20.23 -m hostname -a 'name=node4'


    14.cron模块
    功能:计划任务
    支持时间:minute hour day month weekday(分时日月周)
    例子:
    #备份数据库脚本
    mysqldump -A -F --single-transaction --master-data=2 -q -uroot | gzip > /data/mysql_`date+%F_%T`.sql.gz
    #创建任务
    [root@node1 data]# ansible 192.168.20.22 -m cron -a "hour=2 minute=30 weekday=1-5 name='backup mysql' job=/data/mysql_backup.sh"
    意思是说:周一至周五的2点30分执行一次mysql_backup.sh 任务的名字叫backup mysql
    [root@node1 data]# ansible all -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &> /dev/null'name=Synctime"
    #禁用计划任务
    [root@node1 data]# ansible 192.168.20.22 -m cron -a "hour=2 minute=30 weekday=1-5 name='backup mysql' job=/data/mysql_backup.sh disabled=yes"
    #启用计划
    [root@node1 data]# ansible 192.168.20.22 -m cron -a "hour=2 minute=30 weekday=1-5 name='backup mysql' job=/data/mysql_backup.sh disabled=no"
    #删除计划
    [root@node1 data]# ansible 192.168.20.22 -m cron -a "name='backup mysql' state=absent"


    15.yum模块
    功能:管理软件包,只支持RHEL Centos fedora 不支持ubuntu其他版本
    例子:
    #安装http
    [root@node1 data]# ansible all -m yum -a 'name=httpd'
    #启动httpd
    [root@node1 data]# ansible all -m shell -a 'systemctl start httpd'
    #查看进程
    [root@node1 data]# ansible all -m shell -a 'ps -ef | grep httpd'
    #卸载httpd
    root@node1 data]# ansible all -m yum -a 'name=httpd state=absent'


    16.lineinfile模块
    ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换。其实再ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换
    功能:相当于sed,可以修改文件内容
    例子:
    [root@node1 data]# ansible all -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=enforcing"'
    [root@node1 data]# ansible all -m lineinfile -a 'path=/etc/fstab state=absent regexp="^#"'


    17.replace模块
    类似于sed命令,主要也是基于正则进行匹配和替换
    例子:
    [root@node1 data]# ansible all -m replace -a 'pash=/etc/fstab regexp="^(UUID.*)" replace="#1"'
    意思是说:把/etc/fstab以UUID.开头的前面加#注释掉
    [root@node1 data]# ansible all -m replace -a 'pash=/etc/fstab regexp="^#(.*)" replace="1"'
    意思是说:去掉#号


    18.setup模块
    功能:收集每个远程主机的信息
    例子:
    [root@node1 data]# ansible 192.168.20.22 -m setup
    [root@node1 data]# ansible 192.168.20.22 -m setup -a 'filter="ansible_distribution_major_version"'
    [root@node1 data]# ansible 192.168.20.22 -m setup -a 'filter="ansible_python_version"'
    [root@node1 data]# ansible 192.168.20.22 -m setup -a 'filter="ansible_processor_vcpus"'

  • 相关阅读:
    django操作mysql时django.db.utils.OperationalError: (2003, "Can't connect to MySQL server")异常的解决方法
    Django实践:个人博客系统(第七章 Model的设计和使用)
    shared_ptr / weak_ptr 代码片段
    Java中比较容易混淆的知识点
    指针和引用作为参数的区别
    STL 算法
    STL扩展容器
    STL中 map 和 multimap
    STL中 set 和 multiset
    <<C++标准程序库>>中的STL简单学习笔记
  • 原文地址:https://www.cnblogs.com/zgqbky/p/14863623.html
Copyright © 2020-2023  润新知