文档章节

DevOps 之 Ansible入门实践(一)

chenbilly
 chenbilly
发布于 2017/02/22 14:47
字数 678
阅读 66
收藏 1

本文将介绍在Ansible 已经 Galaxy 的基本使用。

本文默认操作环境为 Mac.

###安装Ansible[^1]

sudo pip install ansible 即可完成安装。

###配置conf

创建并编辑ansible的hosts文件

# /etc/ansible/hosts是默认路径
sudo mkdir /etc/ansible
sudo vi /etc/ansible/hosts

添加内容如

[web-server]
192.168.1.134

[mysql]
192.168.1.133:2222

如果远程的ssh端口修改了不在22标准端口,文件内容中机器地址应该明确指定端口号如:192.168.1.134:2222

###authorized_keys授权

新建一个基本的playbook文件 copyKey.yml

- name: cp sshKey
  hosts: all
  user: root
  become: yes

  tasks:
       - name: Placing key
         authorized_key: user=root key="{{ lookup('file', '/home/{***}/.ssh/id_rsa.pub') }}"

注意 key 的文件本地目录地址的修改。

hosts 也可以改成 web-server 来指定 只操作 该主机。

执行命令 ansible-playbook copyKey.yml --ask-pass --user=root

--ask-pass 即 显示的 问你输入服务的密码.

###ping test 上述的copyKey 执行成功后,执行 ansible web-server -m ping -u root

正确回应

192.168.1.134 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

###Playbook[^2]

playbooks使用yaml语法,在ansible中几乎所有的yaml文件都是以list开始,每个item是键值对的list。

所有的yaml文件都以---开头表示开始一个document,所有的列表元素以- 开头,键值对用: ,后面的空格是必须的。(如果官网文档中有指出空格那一定是merge了我的pull request^_^)

键值对中的值如果是bool类型的字符串true/false(首字母不论大小写),pyyaml会load成python中对应的bool值,在键值对中如果值中有: 或者以{{开头的变量定义,则必须用引号引起来

示例如下:

- name: Hello Ansible - quick start
  hosts: web-server
  user: root
  become: yes

  tasks:
    - name: Hello server
      shell: date >> now.txt

上述的示例 即 在 now.txt 中 写入一行Date信息

###常用的Task Module[^4]

例如上述的Hello server 即 使用到了 shell[^5] 模块.

authorized_key | - Adds or removes an SSH authorized key

command | - Executes a command on a remote node

copy | - Copies files to remote locations

apt_repository | - Add and remove APT repositories

apt| - Manages apt-packages

所有的Task Module 参考 这里

###Ansible Galaxy[^3]的使用

Mysql 安装示例

找到 geerlingguy.mysql,它是MySQL server for RHEL/CentOS and Debian/Ubuntu.的ROLE.

执行 ansible-galaxy install geerlingguy.mysql 安装到本地.

在新建一个 mysql.yml 的文件

- hosts: [mysql]
  become: yes
  vars_files:
    - vars/main.yml
  roles:
    - {role: geerlingguy.mysql }

同个目录下 新建 vars 目录,并新建 main.yml 文件

mysql_root_password: 123456
mysql_databases:
  - name: ***-base
    encoding: utf8mb4
    collation: utf8mb4_unicode_ci
mysql_users:
  - name: ***-base
    host: "%"
    password: xxxxx
    priv: "***-base.*:ALL"

执行命令 ansible-playbook mysql.yml,则目标服务器则自动安装mysql。

未完待续,下篇文章将讲述如何快速的初始化一台J2EE环境的服务器.

###参考列表

© 著作权归作者所有

chenbilly
粉丝 16
博文 9
码字总数 7714
作品 0
杭州
程序员
私信 提问
2017年我的阅读书单

2017年我正在看或者已经看完的书单,基本上都是纸质书,主要是长时间阅读也不伤眼。由于现阶段的主要工作是DevOps,所以涉及运维方面的书我没有再细看,主要是工作用到的话会稍为翻阅下。主要...

抚琴煮酒
2017/06/04
0
0
年度十佳 DevOps 博客文章(后篇)

如果说 15 年你还没有将 DevOps 真正应用起来,16 年再不实践也未免太落伍了。在上篇文章中我们了解到 15 年十佳 DevOps 博客文章的第 6-10 名,有没有哪一篇抓住了您的眼球,让您有所收获呢...

OneAPM蓝海讯通
2016/02/26
35
0
《Python自动化运维开发实战》课程配套手记内容列表

自动化实战课程的手记内容手记列表 各位同学,《Python自动化运维开发实战》实战课中的配套手记内容列表如下,供大家参考学习,已经出的手记将参考大家的实际情况进行补充,其他的配套课程整...

幕客技术
2018/01/12
0
0
[ Linux运维学习 ] 路径及实战项目合集

我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构、提升部署效率、优化资源利用率,确保服务可以7*24H不间断地为用户提供服...

实验楼
2017/11/15
0
0
5 个 Ansible 运维任务

让 DevOps 少一点,OpsDev 多一点。 在这个 DevOps 世界中,看起来开发(Dev)这一半成为了关注的焦点,而运维(Ops)则是这个关系中被遗忘的另一半。这几乎就好像是领头的开发告诉尾随的运维...

作者: Mark Phillips
09/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
47分钟前
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部