Ansible自动化运维工具

Ansible自动化运维工具

Ansible是一款极其简单的IT自动化工具,使用Python开发,有丰富的内置模块。Ansible使用openssh协议来对远程主机进行管理,
无需安装客户端插件,安装部署简单。
主要构成部分:
    ansible     inventory 管理的主机清单
    ansible     playbook 个人把它叫做 编排任务,自定义自己的任务列表,然后交个ansible按照定义的顺序依次执行。
    modules     ansible的核心模块集合
    plugins     作为对模块的补充,定义额外的插件
    api         供第三方调用,这个在后续运维平台开发中很有用哦
    ansible        大部分的自动化管理都是用ansible 这个命令

使用:
本次使用系统为centos6.8,安装方法为yum安装(由于Ansible所需模块较多,yum安装较为简便)
主机A:192.168.0.1    Ansible安装在此机器
主机B:192.168.0.2    被远程操作机器

#########################################################################################################
安装Ansible:
    主机A执行
    yum install -y epel-release
    yum install -y ansible
    注意:Ansible依赖于python环境,centos6.8默认安装为python2.6,经测试该python环境可运行Ansible,但网上有帖子说
        python2.7或以上可支持所有Ansible模块,python3目前不能完全支持。
将A主机的公钥发送给B主机,使其可以免密登录:
    ssh-keygen                    #A主机中生成密钥对
    ssh-copy-id 192.168.0.2        #将A主机的公钥发送给B主机,这时会让你输入B主机的密码
    ssh 192.168.0.2                #测试是否可以直接免密登录
关闭B主机selinux:
    setenforce 0
在Ansible主机上定义主机或主机组:
    vi /etc/ansible/hosts        #/etc/ansible/hosts文件中可以定义被批量管理的主机或主机组
        [testhost]        #此为主机组
        192.168.0.2        #此为主机,当在本机hosts文件中指定主机名和ip的映射关系后此处也可使用主机名
在Ansible主机上批量管理主机:
    ansible testhost -m command -a 'echo "hello world"'
    testhost    #此处为被管理主机名或组名,也可使用all,表示所有被管理主机
    -m            #后跟模块名,指明所使用模块
    -a            #后跟命令,表示使用指定模块对指定主机或群组执行的命令

使用ansible命令批量管理主机实例:
    ansible拷贝目录或者文件
        ansible testhost -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755"
        将ansible本地的/etc/ansible拷贝到被管理主机并重新命名为/tmp/ansibletest,并且定义了权限
    ansible远程执行脚本
        vim /tmp/test.sh
            #!/bin/bash
            echo "date" > /tmp/ansible_test.txt
        ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
        ansible testhost -m shell -a "/tmp/test.sh"
        注意此处使用了shell模块,shell模块,还支持远程执行命令并且带管道:
            ansible testhost -m shell -a "cat /etc/passwd | wc -l"
    ansible实现任务计划
        ansible testhost -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt' weekday=6"
            如果删除该cron只需要加一个字段state=absent
            ansible testhost -m cron -a "name='test cron' state=absent"
        其他的时间表示:
            分:minute
            时:hour
            日:day
            月:month
            周:weekday
    ansible安装rpm包和管理服务
        ansible testhost -m yum -a "name=httpd"    #在name后面还可以加上state=installed,默认不加也可以安装
        ansible testhost -m service -a "name=httpd state=started enabled=yes"    #开启httpd服务,并设为开机启动
        这里的name是CentOS系统里的服务名,可以通过chkconfig --list查看

################################################################################################
ansible playbook介绍    参考网站:http://blog.51cto.com/13525470/2112720
    playbook是系统ansible命令的集合,其利用yaml语言编写,运行过程,ansbile-playbook命令根据自上而下的顺序依次执行。
    Playbooks开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变
    量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。
    playbooks 的格式是yaml,语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本。
    
举例说明:
---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service: name=httpd state=started
  handlers:
    - name: restart apache
      service: name=httpd state=restarted
    
第一行中,文件开头为 ---;这是YAML将文件解释为正确的文档的要求。YAML允许多个“文档”存在于一个文件中,每个“文档”
由 --- 符号分割,但Ansible只需要一个文件存在一个文档即可,因此这里需要存在于文件的开始行第一行。
YAML对空格非常敏感,并使用空格来将不同的信息分组在一起,在整个文件中应该只使用空格而不使用制表符,并且必须使用一致的
间距,才能正确读取文件。相同缩进级别的项目被视为同级元素。
以 - 开头的项目被视为列表项目。作为散列或字典操作,它具有key:value格式的项。YAML文档基本上定义了一个分层的树结构,
其中位于左侧是包含的元素。YAML文件扩展名通常为.yaml或者.yml。

你可能感兴趣的:(linux)