开始用 Ansible 管理机器了

栏目: Python · 发布时间: 6年前

内容简介:说起来很可笑,总说自己是 SRE,但是 Salt,ansible 这种东西还没玩溜呢。平时的运维和发布一般都是工单,要走一些审批流程,所以也没啥场景去用这些。今天部署一个东西,才发现自己已经重复在机器上编译 Python 这种事情干了三次了,好,是时候将这些操作自动化了。之所以选择 ansible,是因为它是通过 ssh 协议的,不必再客户端上面安装任何东西,不依赖其他 broker 数据库等,ansible 项目本身就是 Python 脚本,所以安装和使用就非常方便。体验下来,发现 ansible 被人

说起来很可笑,总说自己是 SRE,但是 Salt,ansible 这种东西还没玩溜呢。平时的运维和发布一般都是工单,要走一些审批流程,所以也没啥场景去用这些。今天部署一个东西,才发现自己已经重复在机器上编译 Python 这种事情干了三次了,好,是时候将这些操作自动化了。

之所以选择 ansible,是因为它是通过 ssh 协议的,不必再客户端上面安装任何东西,不依赖其他 broker 数据库等,ansible 项目本身就是 Python 脚本,所以安装和使用就非常方便。

体验下来,发现 ansible 被人吐槽“慢”真是一点都不委屈,实在太慢了。

我主要用的是 role 的功能来将平时要做的事情在服务器上组织起来。

一个 Compile Python 的 Role

ansible 提供了 role 来组织你的脚本,role 其实是 playbook 通过 文件结构将不同的部分组织 ,用的时候在 playbook 中 include 就可以了。

下面以一个编译 Python 的 role 为例。

首先它的目录结构如下:

➜  cluster git:(master) tree
.
├── roles
│   └── compile_python37
│       ├── tasks
│       │   └── main.yml
│       └── vars
│           └── main.yml
└── tools.yaml

在 roles 文件夹里面建了一个 compile_python37 的文件夹,一个文件夹就是一个 role,然后按照 role 规定的文件夹结构在这个 role 中新建相关的比如 tasks

tools.yaml 中的内容如下,就是调用一下 role:

---
- hosts: '{{target}}'
  remote_user: admin
 
  roles:
    - compile_python37

compile_python37/tasks/main.yml 中的内容如下:

---
- name: yum
  yum: name={{item}} state=latest
  become_method: sudo
  become: yes
  with_items: "{{ python_yum }}"
 
- name: unarchive
  unarchive:
    src: "{{ python_url }}"
    dest: "{{ python_tmp }}"
    remote_src: True
 
- name: configure and make
  shell: cd "{{ python_dir }}" && ./configure --with-ensurepip=install --prefix=/usr/local/python && make -j2 && sudo make install
 
- file:
    src: '{{ item.src }}'
    dest: '{{ item.dest }}'
    state: link
  become_method: sudo
  become: yes
  with_items:
    - { src: '/usr/local/python/bin/python3', dest: '/usr/local/bin/python' }
    - { src: '/usr/local/python/bin/pip3'   , dest: '/usr/local/bin/pip'    }

可以看到用到了很多 "{{ xxx }}" 这样的东西,这相当于一些变量,我们将固定的操作写在 tasks 里面,将变量 vars 里面,这样之后如果要修改一些诸如解压地址的时候,就可以直接编辑 vars 了。

unarchive 可以直接写远程的 url,解压到本地的一个位置。

with_items 其实是循环,会循环 value 中所有的值,将它们当做 item 来执行一次命令。比如第一个 yum 命令会对 "{{ python_yum }}" 中的每一个值都执行一次。

compile_python37/vars/main.yml 的内容如下:

---
python_tmp: /tmp
python_url: https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
python_dir: /tmp/Python-3.7.1
python_yum:
   - wget
   - zlib-devel
   - bzip2-devel
   - openssl-devel
   - ncurses-devel
   - sqlite-devel
   - readline-devel
   - tk-devel
   - gcc
   - gcc-c++
   - libffi-devel

可以看到就是上面 tasks 需要的变量。

搞定,另外 galaxy 这里有一些大家写的 role ,类似像一个 docker hub。不过我试了几个,直接用都有问题……

最后一点 Tips,单字母的命令放着不用太浪费了,推荐一下几个 alias:

alias a=ansible
alias h=htop
alias d=docker
alias v=vagrant
alias ap=ansible-playbook

以上所述就是小编给大家介绍的《开始用 Ansible 管理机器了》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

MATLAB实用教程

MATLAB实用教程

穆尔(Holly Moore) / 高会生 刘童娜 李聪聪 / 电子工业出版社 / 2010-1-1 / 59.00元

MATLAB实用教程(第二版),ISBN:9787121101793,作者:(美)穆尔 著,高会生,刘童娜,李聪聪 译一起来看看 《MATLAB实用教程》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具