美文网首页
ansible 运维使用(一)

ansible 运维使用(一)

作者: 虚心的锄头 | 来源:发表于2018-08-08 12:18 被阅读0次
    ansible 运维使用(二)之Playbook
    官网 https://www.ansible.com/
    官网文档 https://docs.ansible.com/
    中文文档 http://www.ansible.com.cn/ < Ansible中文权威指南>
    安装 pip install ansible
    创建工作目录 mkdir -p /opt/ansible
    复制配置文件 cp /etc/ansible/ansible.cfg /opt/ansible/
    修改 vim /opt/ansible/ansible.cfg
    # 修改 hosts目录
    inventory      = /opt/ansible/hosts
    
    创建hosts vim /opt/ansible/hosts
    [docker]  # 组名
    172.17.0.1  ansible_ssh_user=root ansible_ssh_pass=fenglican
    172.17.0.2  ansible_ssh_user=root ansible_ssh_pass=fenglican
    # 172.17.0...  可以有很多主机
    # ansible_ssh_user 登陆用户
    # ansible_ssh_pass 登陆密码
    
    ansible命令格式

    ansible <host-pattern> [-f forks] [-m module_name] [-a args]

    command模块 [执行远程命令] (默认)

    ansible testservers -m command -a 'uname -n'

    script模块 [在远程主机执行主控端的shell/python脚本 ] (使用相对路径)

    ansible testservers -m script -a '/etc/ansible/test.sh

    shell模块 [执行远程主机的shell/python脚本]

    ansible testservers -m shell -a 'bash /root/test.sh'

    raw模块 [类似于command模块、支持管道传递]

    ansible testservers -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print \$2}' |awk -F: '{print \$2}'"

    将控制端的文件cp到被控端

    ansible docker -m copy -a "src=./hosts dest=/root/Alic/"

    常用模块介绍

    copy模块:http://docs.ansible.com/ansible/copy_module.html
    参数:
    src:本地文件的路径,如果源是一个目录,会将目录中所有的文件都copy过去
    dest:远程主机的绝对路径
    owner:文件属主
    group:文件属组
    mode:文件权限
    命令演示:
    ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab owner=root mode=0644'
    
    fetch模块:http://docs.ansible.com/ansible/fetch_module.html
    下载文件,文件拉取模块主要是将远程主机中的文件拷贝到本机中,和copy模块的作用刚刚相反,
    并且在保存的时候使用hostname来进行保存,当文件不存在的时候,会出现错误,
    除非设置了选项fail_on_missing为yes
    参数:
    dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile
    fail_on_missing:当源文件不存在的时候,标识为失败
    flat:允许覆盖默认行为从hostname/path到/file的,如果dest以/结尾,它将使用源文件的基础名称
    src:在远程拉取的文件,并且必须是一个file,不能是目录
    validate_checksum:当文件fetch之后进行md5检查
    命令演示:
    ansible 192.168.10.1 -S -m fetch -a "dest=tmp_file src=/tmp/ttt.txt"
    
    192.168.10.1 | SUCCESS => {
        "changed": true, 
        "checksum": "a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0", 
        "dest": "/opt/ansible/tmp_file/192.168.10.1/tmp/ttt.txt", 
        "md5sum": "ba1f2511fc30423bdbb183fe33f3dd0f", 
        "remote_checksum": "a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0", 
        "remote_md5sum": null
    }
    
    #ll /opt/ansible/tmp_file/192.168.10.1/tmp/ttt.txt 
    -rw-r--r-- 1 root root 4 Aug  8 16:26 /opt/ansible/tmp_file/192.168.10.1/tmp/ttt.txt
    
    file模块:http://docs.ansible.com/ansible/file_module.html
    功能:设置文件属性、创建符号链接、创建目录等
    参数:
    path:指明文件路径,可以使用name或dest来代替
    owner:文件属主
    group:文件属组
    mode:文件权限
    创建文件的符号链接:
    src:指明源文件
    dest:指明符号链接文件路径
    命令演示:
    ansible pms -m file -a 'src=/tmp/fstab dest=/srv/fstab state=link'
    
    # ll
    lrwxrwxrwx 1 root root      10 Jul  6 14:08 fstab -> /tmp/fstab
    
    ping模块:http://docs.ansible.com/ansible/ping_module.html
    功能:测试被管理主机的连通性
    命令演示:
    ansible all -m ping
    
    172.16.206.134 | SUCCESS => {
        "changed": false, 
        "ping": "pong"
    }
    
    command模块:http://docs.ansible.com/ansible/command_module.html
    功能:在远程主机上执行命令
    注意:command模块不支持管道符,这也是command模块和shell模块的区别。
    命令演示:
    ansible all -m command -a 'hostname'  
    
    172.16.206.134 | SUCCESS | rc=0 >>
    localhost.localdomain
    
    user模块:http://docs.ansible.com/ansible/user_module.html
    功能:在远程主机上创建或者删除用户
    参数:
    name:账户名
    state:
              present:创建
              absent:删除   
    group:指定用户的基本组
    uid:指定uid
    system:创建系统用户 值为yes 或者no
    命令演示:
    ansible pms -m user -a 'name=test state=present uid=306 group=root  system=yes'
    
    172.16.206.134 | SUCCESS => {
        "changed": true, 
        "comment": "", 
        "createhome": true, 
        "group": 0, 
        "home": "/home/test", 
        "name": "test", 
        "shell": "/bin/bash", 
        "state": "present", 
        "system": true, 
        "uid": 306
    }
    
    service模块:http://docs.ansible.com/ansible/service_module.html
    功能:管理远程主机上的服务状态
    参数:
    enabled=:是否开机自动启动,取值为yes或者no。enabled=yes,表示服务开启启动
    name=:服务名
    state=: 服务状态
        started:启动
        restarted:重启
        stopped:停止
        reloaded:重载
    命令演示:
    ansible pms -m service -a 'name=zabbix-agent state=started enabled=yes'
    
    172.16.206.134 | SUCCESS => {
        "changed": true, 
        "enabled": true, 
        "name": "zabbix-agent", 
        "state": "started"
    }
    
    
    script模块:http://docs.ansible.com/ansible/script_module.html
    功能:在远程主机执行主控端的shell/python脚本
    ansible pms -m script -a '/tmp/echo.sh'
    
    172.16.206.134 | SUCCESS => {
        "changed": true, 
        "rc": 0, 
        "stderr": "", 
        "stdout": "", 
        "stdout_lines": []
    }
    
    
    shell模块:http://docs.ansible.com/ansible/shell_module.html
    shell模块支持管道符,这是它与commands模块的最大区别
    命令演示:
    ansible pms -m shell -a 'ps -ef | grep nginx'    
    
    yum模块:http://docs.ansible.com/ansible/yum_module.html
    功能:在远程主机上安装软件包
    参数:
    name=:  包名,如果从远程服务器本地安装某个包,则可以写该包在远程主机上绝对的路径,如name=/srv/jdk/jdk-8u66-linux-x64.rpm
    state=:状态,值为present,absent,lastest
        present、lasted安装
        absent:卸载
        lastest:安装最新版的包,相当于升级软件包
        removed:删除软件包
        installed:安装软件包
    命令演示:
    ansible pms -m yum -a 'name=/srv/jdk/jdk-8u66-linux-x64.rpm  state=present'  
    
    172.16.206.134 | SUCCESS => {
        "changed": false, 
        "msg": "", 
        "rc": 0, 
        "results": []
    }
    
    
    synchronize模块:http://docs.ansible.com/ansible/synchronize_module.html
    注意:ansible主机和远程主机上都需要安装rsync
    功能:将ansible主机上的源目录下的文件同步到远程主机上
    参数:
    src:ansible主机上的源路径
    dest:远程主机上的目标路径
    delete:delete=yes时,删除目标路径下,源路径中不存在的目录或者文件
    compress:是否开启压缩功能,默认为开启
    mode:同步模式,默认为push,设置mode=pull,改成pull模式
    archive:默认开启了这个参数,该参数默认开启了recursive, links, perms, times, owner,group和-D参数。如果你将该参数设置为no,那么你将停止很多参数,比如会导致如下目的递归失败,导致无法拉取
    rsync_opts:增加rsync的额外选项,例如
    rsync_opts="--exclude=fstab" 表示同步时文件时,排除fstab文件,即不同步fstab文件。如果有delete=yes选项,而目标路径下有一个源路径下不存在的文件,如文件名为fstab,那么
    rsync_opts="--exclude=fstab"表示不删除目标路径下的fstab文件
    命令演示:
    ansible pms  -m synchronize -a 'src=/tmp/test/ dest=/tmp/aaa/ delete=yes  rsync_opts="--exclude=fstab"'
    #上面的命令表示将ansible主机上/tmp/test/目录下的所有文件(除了fstab)同步到远程主机的/tmp/aaa/目录下。并删除/tmp/aaa/目录下,在/tmp/test/上不存在的文件或者目录
    
    
    unarchive模块:http://docs.ansible.com/ansible/unarchive_module.html
    功能:解压缩,这个模块有两种用法:
    1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes
    2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no
    参数:
    copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
    src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
    dest:远程主机上的目标路径
    mode:设置解压缩后的文件权限
    命令演示:
    ansible pms -m unarchive -a 'src=/srv/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'
    
    
    get_url模块:http://docs.ansible.com/ansible/get_url_module.html
    功能:从http、https、ftp下载文件到远程主机
    参数:
    url:下载地址
    dest:远程主机上的目标径路
    mode:设置下载到远程主机后的文件的权限
    命令演示:
    ansible pms -m get_url -a 'url=ftp://ftp.cheyaoshicorp.com/pub/临时文件/derby.init.sh dest=/tmp'
    
    172.16.206.134 | SUCCESS => {
        "changed": true, 
        "checksum_dest": null, 
        "checksum_src": "770a432e9847e594e0154e31c906062585d571e0", 
        "dest": "/tmp/derby.init.sh", 
        "gid": 0, 
        "group": "root", 
        "md5sum": "4564411c7e614859965c9ab5d76df22b", 
        "mode": "0644", 
        "msg": "OK (3934 bytes)", 
        "owner": "root", 
        "size": 3934, 
        "src": "/tmp/tmp5nqAsJ", 
        "state": "file", 
        "uid": 0, 
        "url": "ftp://ftp.cheyaoshicorp.com/pub/临时文件/derby.init.sh"
    
    cron模块
    用于管理计划任务包含如下选项: 
    backup:对远程主机上的原任务计划内容修改之前做备份 
    cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划 
    day:日(1-31,*,*/2,……) 
    hour:小时(0-23,*,*/2,……)  
    minute:分钟(0-59,*,*/2,……) 
    month:月(1-12,*,*/2,……) 
    weekday:周(0-7,*,……)
    job:要执行的任务,依赖于state=present 
    name:该任务的描述 
    special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly 
    state:确认该任务计划是创建还是删除 
    user:以哪个用户的身份执行
    示例:
    ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
    ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root
    ansible test -m cron  -a 'backup="True" name="test" minute="0" hour="5,2" job="ls -alh > /dev/null"'
    ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'
    
    setup模块
    setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数
    具体使用示例如下:
    ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb'   //查看主机内存信息
    ansible 10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]'   //查看地接口为eth0-2的网卡信息
    ansible all -m setup --tree /tmp/facts   //将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)
    

    使用错误记录

    ansible报错Aborting, target uses selinux but python bindings (libselinux-python) aren't installed

    yum install libselinux-python -y

    相关文章

      网友评论

          本文标题:ansible 运维使用(一)

          本文链接:https://www.haomeiwen.com/subject/vditbftx.html