美文网首页
about ansible 01

about ansible 01

作者: Prince_wyf | 来源:发表于2019-04-22 00:44 被阅读0次

    ansible简介

    一款轻量级的自动化运维软件

    为什么用ansible

    • Chef
      Ruby 语言编写,C/S架构,配置需要Git依赖,Recipe脚本编写规范,需要一定编程经验
    • Saltstack
      Python编写,C/S架构,模块化,YAML脚本编写规范,适合大规模集群部署
    • Ansible
      Python编写,agentless(无客户端),模块化管理,Playbook脚本编写规范,易于上手,适合中小规模快速部署,对敏捷开发十分友好

    安装

    两种方式实现安装

    1. yum安装(yum -y install ansible )
    2. git clone https://github.com/ansible/ansible.git
      这里我们采用 python3.6.5 + Virtualenv + ansible2.5 安装ansible,使用虚拟环境的好处在这里不必多说。
    1. 安装Python3.6 和 pip 
    2. 安装 virtualenv
    # pip install virtualenv 
    3.  创建ansible账户并安装python3.6版本virtualenv实例
    # useradd deploy && su - deploy 
    # virtualenv -p /usr/local/bin/python3 .py3-a2.5-env  # 在 deploy 账户家目录下创建了名叫 .py3-a2.5-env 的虚拟环境
    4. git 源代码安装ansible2.5
    # cd /home/deploy/.py3-a2.5-env
    # git clone https://github.com/ansible/ansible.git
    # cd ansible && git checkout stable-2.5
    5. 加载python3.6 virtualenv 环境
    # source /home/deploy/.py3-a2.5-env/bin/activate
    6. 安装ansible依赖包
    # pip install paramiko PyYAML jinja2
    7. 在python3.6虚拟环境下加载ansible2.5
    # source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q 
    8. 验证 ansible2.5
    # ansible --version
    

    playbooks 框架格式

    01框架与格式.png
    单看图可能会有些懵逼,下面我们来详细解释
    1. 创建一个 testplaybooksd 目录
    # mkdir /home/deploy/testplaybooks
    2. 进入 testplaybooks 目录
    (1) 创建 inventory  # 这个目录就可以用来放我们需要进行管理的主机清单
    # mkdir inventory 
    (2) 创建roles目录 # 这个目录就是用来存放具体任务的
    # mkdir roles 
    (3) 在inventory 里面创建一个 testenv文件 # 这个文件里就定义了被管理主机的一些信息和变量
    vim inventory/testenv 
    [testservers]   #  定义主机可以一个或多个
    test.example.com
    
    [testservers:vars]   # 定义变量,用法后面会讲到
    server_name=test.example.com
    user=root
    output=/root/test.txt
    (4) 在roles下创建 testbox 并在 testbox 下创建tasks 用来存放具体任务
    # mkdir roles/testbox/tasks
    (5) 到 tasks 目录下面创建 main.yml 文件用来编写我们需要在被管理主机上执行的任务
    cd roles/testbox/tasks
    vim mail.yml 
    - name: print server name and user to remote testbox
      shell: "echo 'current {{user}} is logging {{server_name}}'" > {{output}}    
    # 在这里,任务名字就是就是我们定义的name后面的内容,而第二行就代表 我们使用ansible的shell模块去打印这句话并追加到我们定义的文件中,
    #这里的{{user}},{{server_name}},{{output}}就是我们在 testenv #中定义的变量,{{变量名}} 是固定写法
    
    (6) 最后我们在我们的主目录 testplaybooks 中,编写 deploy.yml 脚本作为我们执行任务的入口
    vim deploy.yml 
    - hosts: "testservers"   # 这里的 testservers 就是我们在 testenv 中定义的被管理主机
      gather_facts: true  #  参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息
      remote_user: root  # 指定被管理主机的用户
      roles:
        - testbox   # 指定任务
    
    3.  so,我们定义的目录结构用树状图表示就是这样的
    .
    ├── deploy.yml
    ├── inventory
    │   └── testenv
    └── roles
        └── testbox
            │   
            ├── tasks
            │   └── main.yml
      
    4. 接下来,执行我们的 YML 任务
    ansible-playbook -i inventory/testenv deploy.yml
    5.  看到如下输出结果,就代表执行成功
    (.py3-a.2.5-env) [deploy@centos7-05 testplaybooks]$ ansible-playbook -i inventory/testenv deploy.yml 
    
    PLAY [testservers] *************************************************************
    TASK [Gathering Facts] *********************************************************
    ok: [test.example.com]
    TASK [testbox : print server name and user to remote testbox] ******************
    changed: [test.example.com]
    PLAY RECAP *********************************************************************
    test.example.com           : ok=1   changed=1    unreachable=0    failed=0
    6.   到 test.example.com 这台主机下验证
    cat /root/test.txt 
    current deploy is logging test.example.com
    7. 完成
    

    下一篇文章将介绍ansible的常用模块,并demo演示用法

    相关文章

      网友评论

          本文标题:about ansible 01

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