zoukankan      html  css  js  c++  java
  • ansible 学习笔记

    前言

    Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置、批量程序部署、批量运行命令等功能。

    Ansible 并不使用守护进程,它也不需要任何额外的自定义安全架构,因此它的部署可以说是十分容易。你需要的全部东西便是 SSH 客户端和服务器了。

    Ansible是基于模块工作的,ansible提供一个框架,通过模块实现批量部署。

    来源:http://www.cnblogs.com/ee900222/p/ansible.html

    1、安装

    使用的系统是Ubuntu 16.04,使用apt-get安装,也可通过pip安装。

    apt-get install ansible

    2、设置 SSH 公钥认证

    创建SSH证书。

    ssh-keygen -t rsa

    通过ssh-copy-id命令复制公钥(~/.ssh/id_rsa.pub)到服务器,用于ansible控制机和服务器直接的ssh链接。

    ssh-copy-id username@server

    3、运行ansible

    首先,需修改/etc/ansible/hosts,添加主机,具体可参考hosts文件中的说明。

    ansible简单的操作就是远程执行一条简单的shell命令。

    ansible all -m ping

    all表示所有主机,也可改成host文件中定义的组名。

    -m用于指定模块名称,模块列表见:http://docs.ansible.com/ansible/modules_by_category.html

    4、简单的ansible-playbook

    Playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行。

    Playbook的文件格式是yaml,一个简单的playbook,至少保护host,remote_user,tasks,如示例。

    ---
    # ansible playboo学习示例

    namehello ansible
      hostsall
      remote_userjay
      gather_factsfalse
      vars:
        var_bFlagtrue
        var_strFlagVariable Flag
      tasks:
        - nametest environment
          sudono
          shellenv
          args:
            executable/bin/bash
     
        - debug
            msg"'{{ var_strFlag }}' is true."
          whenvar_bFlag==True

        - debug
            msg"'{{ var_strFlag }}' is false."
          whenvar_bFlag==False


      运行ansible-playbook命令:

    ansible-playbook -i inventory hello-ansible.yml

    5、通过role更好的组织playbook

      上面简单的playbook,将所有内容均放在yaml文件中,有时会非常复杂且不容易分享。ansible提供了基于role来组织playbook。

      Roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers,基于 roles 对内容进行分组,一个项目的结构如下:

    site.yml
    webservers.yml
    fooservers.yml
    roles/
       common/
         files/
         templates/
         tasks/
         handlers/
         vars/
         defaults/
         meta/
       webservers/
         files/
         templates/
         tasks/
         handlers/
         vars/
         defaults/
         meta/
    

    一个 playbook 如下:

    ---
    - hosts: webservers
      roles:
         - common
         - webservers
    

    这个 playbook 为一个角色 ‘x’ 指定了如下的行为:

    • 如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
    • 如果 roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
    • 如果 roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
    • 如果 roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 and later)
    • 所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
    • 所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
    • 所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
    • 所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。

    参考资料:

    Ansible :一个配置管理和IT自动化工具:  https://linux.cn/article-4215-1.html

    Ansible中文权威指南: http://www.ansible.com.cn/docs/intro_getting_started.html#id3

    原理与运用(一):远程登录: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

  • 相关阅读:
    【欧拉质数筛选法 模版】
    【归并排序 逆序对 模版】
    【 lca倍增模板】
    【LSGDOJ 1333】任务安排 dp
    【NOIP2013】火柴排队
    【USACO Feb 2014】Cow Decathlon
    【USACO08NOV】奶牛混合起来Mixed Up Cows
    【LSGDOJ 1351】关灯
    【USACO】干草金字塔
    【USACO】电子游戏 有条件的背包
  • 原文地址:https://www.cnblogs.com/greatalexander/p/6665964.html
Copyright © 2011-2022 走看看