Ansible: 自动化管理IT资源的工具(实现语言:python)

   功能:1:系统环境配置

              2:安装软件

              3:持续集成

              4:热回滚

   优点:

             1:无客户端

              2:推送式

              3:丰富的module模块

              4:基于YAML的playbook

              5:商业化支持,比较稳定

缺点:

              1:基于ssh,效率低

一、ansible的安装

    环境准备 1python的解释器。

     pip安装:1 安装pip   easy_install  pip

                     2 安装ansible   pip install ansible

    源码安装:1  获取源码、(从githup下载源码)

                      2  source  ./hacking/env-setup

    从系统的源安装   centos     yum install  ansible

                                  ubantu       

                                  安装ansible源 然后安装ansible     

                                  1) apt-get install software-properties-common 

                                  2) apt-add-repository ppa:ansible/ansible

                                 3) apt-get update

                                  4) apt-get install ansible

二、ansible运行

      ansible配置文件  ansible工具寻找配置文件的优先级

       * export ANSIBLE/CONFIG(全局变量文件)

       * ./ansible.cfg

       *~/.ansible.cfg

       * /etc/ansible/ansible.cfg

     如果没找到,会在ansible默认路径创建一个配置文件

         ansible配置文件详解:​​https://www.imooc.com/video/15232​

    添加机器

    1 编辑/etc/ansible/hosts (如果没有该文件可以创建)

    2 添加本机的公钥到目标机器的authorized_keys

    3 将本机的私钥到ansible(可省略)

    4 ansible all -m ping(测试是否成功)

   *   ansible all -m  ping  命令解析  ansible 命令主体  all 正则表达式  去hosts文件匹配需要操作的服务器

                                        -m  ping 指定要使用的模块  4 传入的参数:(此处没用) eg  ansible all -a "ls"

                                          ansible 默认的是command模块,可以执行shell命令  此时 -a 指定将"ls" 当成参数传递给command模块

                                          所以ls能在目标机器执行成功

                                        ansible ip1:ip2 -m ping 两台服务器中间用:隔开

 

    -a  指定传入模块的参数

    -C -D 两个一起使用就,检查hosts规则文件的修改

    -I  限制匹配的主机数

    --list-hosts 显示所有匹配的主机数

     -m -M 指定所使用的模块和模块路径

      --syntax-check 检查语法

      -v  显示详细的日志

hosts主机分组  Inventory(对所管理服务器进行分组,默认路径为/etc/ansible/hosts)

eg

10.113.190.12

[webservers]

10.113.190.12

10.113.190.12

  上面三台服务器,第一台不属于任何一个组,中括号里面是一个组名,里面包括下面两台机器,中括号下面的机器都属于总括号这个组  操作时候  ansible  webservers  -a "ls"  如果ssh不是22端口  可在ip后面加:port

  如果多个都是一样的端口,可以起别名

   jumper ansible_ssh_port=5555 ansible_ssh_host=192.168.1.60 ansible_ssh_user=pa 指定端口,ip,用户名

  ansible_ssh_pass 密码  ansible_sudo_pass  sudo密码   ansible_sduo_exe_sudo sudo路径

  机器太多,但是连续的,写起来比较麻烦 

  

   10.113.190.[1:50]  1到50

    vim[a-f].com  a到f

 

ad-hoc  

  * 这其实是一个概念性的名字,是相对于ansible playbook来说的,类似于在命令行敲入shell命令和写shell scripts两者之间的关系

 * 如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些命令特别保存下来,这样的命令就叫做ad-hoc命令。

eg ansible atlanta -a  "/sbin/reboot" -f 10 

    解析:这个命令中,atlanta是一个组,这个组里面有很多服务器,"/sbin/reboot"命令会在atlanta组下所有服务器执行。这里ssh-agent会fork出10个子进程(bash)以并行的方式执行reboot命令。每次重启10个。

指定用户使用shell命令

ansible webservers -a "/usr/bin/foo" -u username --sudo[--ask-sudo-pass]

创建文件夹   

ansible webservers -m file -a "dest=/path/to/chmod=755 owner=python group=python state=directory"

拷贝文件夹   

ansible webservers -m copy  -a "src=/etc/hosts dest=/tmp/hosts"

软件包管理

  确认一个软件包已经安装但不想升级

 ansible webservers -m yum -a 'name=acme state=present'

 确认一个软件包还没有安装

 ansible webservers -m "yum" -a "name=acme state=absent"

模块 git模块 services模块 setup模块

  如果执行一个耗时的模块

 ansible all -B 3600 -P 0 -a "/usr/bin/long_running_operation --do-stuff"

 -B 1800 表示最多运行60分钟 -P 0 表示不获取状态

  palybook简介

 playbook是一种简单的配置管理系统与多机器部署系统的基础,与现有的其他系统有不同之处,且非常适合于复杂应用的部署。

playbook可用于声明配置,更强大的地方在于,在playbook中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤。并且可以同步或异步的发起任务。

比较复杂(暂时不了解)