Ansible

作者: 一吻江山 | 来源:发表于2018-10-13 11:48 被阅读8次

Ansible是配置管理和应用部署工具,
Ansible默认通过SSH协议管理服务器。

安 装


pip3 install ansible

# Mac也可以用brew安装
brew install ansible

定 义 服 务 器 的 清 单 列 表 文 件


创建/etc/ansible/hosts文件,文件内容:

[webservers]
10.211.55.3 ansible_ssh_user=parallels
10.211.55.4 ansible_ssh_user=root

[dbservers]
#设置别名
Ubuntu ansible_ssh_host=10.211.55.4 ansible_ssh_user=parallels 
#设置本地的连接类型
localhost ansible_connection=local 

# 把一个组作为另一个组的子成员
[southeast:children]
webservers
servers

[other]
# foo.example.com
# db[01:20].jason.com   #db01到db20这20个服务器
# db-[a:f].example.com
# db.jason.com:5501     #使用5501作为ssh连接端口 

hosts文件参考:Inventory文件

使用


ansible

Usage: ansible <host-pattern> [options]

#  -m MODULE_NAME, --module-name=MODULE_NAME
#                   module name to execute (default=command)
#  -a MODULE_ARGS, --args=MODULE_ARGS
#                    module arguments
#  -f FORKS, --forks=FORKS
#                   specify number of parallel processes to use
#                   (default=5)
# -f表示同时执行,提高并发效率

➜  ~ ansible all -m command -a"whoami" -f 3
10.211.55.3 | CHANGED | rc=0 >>
parallels

Ubuntu | CHANGED | rc=0 >>
parallels

localhost | CHANGED | rc=0 >>
zhoujie

host-pattern参考Working with Patterns
-m参考:全部模块

# 创建一个默认权限的文件,用ansible修改文件权限
➜  ~ touch /tmp/file
➜  ~ ls -l /tmp/file
-rw-r--r--  1 zhoujie  wheel  0 Oct 13 12:10 /tmp/file

# 可以修改目标文件权限、用户组
➜  ~ ansible localhost -m file -a"dest=/tmp/file mode=666 owner=zhoujie group=wheel"

➜  ~ ls -l /tmp/file
-rw-rw-rw-  1 zhoujie  wheel  0 Oct 13 12:10 /tmp/file
➜  ~ ansible 10.211.55.3 -a"ls /tmp/file"
10.211.55.3 | FAILED | rc=2 >>
ls: cannot access '/tmp/file': No such file or directorynon-zero return code

# 把本地文件复制到目标服务器下
➜  ~ ansible 10.211.55.3 -m copy -a"src=/tmp/file dest=/tmp/file"

➜  ~ ansible 10.211.55.3 -a"ls /tmp/file"
10.211.55.3 | CHANGED | rc=0 >>
/tmp/file
# “state=present”确保安装,但是不更新。
# 如果使用“state=latest”表示确保安装到最新版;
# “state=absent”表示确保没有安装。
# 不同的系统安装包的模块不同,apt模块仅限Debian/Ubuntu系统
➜  ~ ansible 10.211.55.3 -m apt -a"name=nginx state=present"
#使用Git克隆最新的代码到目录
➜  ~ ansible 10.211.55.3 -m git -a"repo=https://github.com/zhoujie903/superlists.git dest=/home/parallels/sites/superlists version=HEAD"
# 下载文件
➜  ~ ansible 10.211.55.3 -m get_url -a"url=http://download.redis.io/redis-stable.tar.gz dest=/tmp/redis-stable.tar.gz"

ansible-playbook

剧本(Playbooks)是Ansible的配置、部署、编排语言。它们可以被描述为一个需要远程主机执行的命令集合。

剧本文件:playbook.yml, 使用YAML格式

---
- hosts: all

  vars:
    host: "www.superlist.com"

  tasks:
    - name: Deadsnakes PPA to get Python 3.6
      apt_repository:
        repo='ppa:fkrull/deadsnakes'

    - name: make sure required packages are installed
      apt: pkg=nginx,git,python3.6,python3.6-venv state=present

    - name: add nginx config to sites-available
      #.j2为模板文件,模板文件里一般使用上面vars字段定义的变量
      template: src=./nginx.conf.j2 dest=/etc/nginx/sites-available/{{ host }}
      notify:
        - restart nginx #这里的值为下面handlers:name的值

    - name: add symlink in nginx sites-enabled
      file:
        src=/etc/nginx/sites-available/{{ host }}
        dest=/etc/nginx/sites-enabled/{{ host }}
        state=link
      notify:
        - restart nginx

    - name: write gunicorn service script
      template:
        src=./gunicorn.service.j2
        dest=/etc/systemd/system/gunicorn-{{ host }}.service
      notify:
        - restart gunicorn

  handlers:
    - name: restart nginx  #上面有2个任务都发出了notify,这个handler只执行一次
      service: name=nginx state=restarted

    - name: restart gunicorn
      systemd:
        name=gunicorn-{{ host }}
        daemon_reload=yes
        enabled=yes
        state=restarted

playbook文件里可以包含的几个重要概念:hostsvarstaskshandlers
playbook文件里还可包含的重要概念:roles[见下文]
大概的意思:对hosts中匹配到的每台主机按顺序执行tasks中定义的每个任务,
handlers只有在全部tasks执行完时且有任务发出notify时,才会执行相应的操作,不然不执行。

  • 运行剧本文件:
    ansible-playbook [options] playbook.yml [playbook2 ...]
  • 检查格式是否正确:
    ansible-playbook --syntax-check playbook.yml
  • 提供密码:
    ansible-playbook playbook.yml -K
    -K"ask for privilege escalation password"
  • 运行部分任务:
    ansible-playbook -t "delete, create" playbook.yml,
    -t"-t TAGS, --tags=TAGS only run plays and tasks tagged with these values"
  • 从某个任务为起点:
    ansible-playbook playbook.yml --start-at-task="install packages"
  • 条件执行:当bool_var: false时,TASK [create file]任务不执行
➜  Desktop ansible-playbook playbook.yml

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [create file] *************************************************************
changed: [localhost]

TASK [delete file] *************************************************************
ok: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0

Roles

当我们刚开始学习运用 playbook 时,可能会把 playbook 写成一个很大的文件,到后来可能你会希望这些文件是可以方便去重用的,所以需要重新去组织这些文件。

Roles基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。
基于 roles 对内容进行分组,使得我们可以容易地与其他用户分享 roles

目录结构:

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

一个 playbook[playbook.yml] 如下:

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

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

  • 如果 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 列表中
  • 所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
  • 所有 script tasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
  • 所有 template tasks 可以引用 roles/x/templates/ 中的文件,不需要指明文件的路径。
  • 所有 include tasks 可以引用 roles/x/tasks/ 中的文件,不需要指明文件的路径。

ansible-galaxy

Ansible Galaxy是一个免费网站,
用于查找,下载,评级和审查各种社区开发的Ansible角色,
可以成为您自动化项目快速启动的绝佳方式。

比如用ansible在Mac上安装Homebrew

ansible-galaxy install geerlingguy.homebrew

ansible-galaxy: Perform various Role related operations.

参考:geerlingguy.homebrew

文档


Ansible英文文档
Ansible中文文档
SSH原理与运用(一):远程登录
YAML

相关文章

  • 【Ansible学习】- Ansible初探

    安装 Ansible基础 Ansible架构图 Ansible核心组件说明 Ansible:Ansible的核心程...

  • 快速上手 Ansible

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible 命令

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible 主机清单配置文件

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible Playbook 剧本语法

    Ansible 系列:(一):快速上手 Ansible(二):Ansible 命令(三):Ansible 主机清单...

  • Ansible(一)、实现SSH免密

    1.ansible安装 2.ansible配置 /etc/ansible/ansible.cfg /etc/ans...

  • Ansible第一篇:基础

    一、配置文件 ansible.cfg /etc/ansible/ansible.cfg 是ansible安装好后...

  • 自动化运维-ansible

    目录 十五、ansible介绍十六、ansible安装十七、ansible远程执行命令十八、ansible拷贝文件...

  • 04-invertory

    Ansible Ansible version : 2.6.2 inventory Ansible可以同时处理基础...

  • Ansible部署

    安装ansibleyum install ansible 确认ansible版本ansible --version...

网友评论

      本文标题:Ansible

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