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

 

posted @ 2017-04-04 18:56  紫竹山庄  阅读(308)  评论(0编辑  收藏  举报