ansible基础应用

一、运维主要工作

ansible聚集以上功能于一身,能够完整轻易的实现应用部署和批量命令功能,适用于主机数量不太多,再大的用puppet。

二、ansible特性

(1)模块化:调用特定的模块,完成特定任务;

(2)基于python语言实现,由paramiko,PYYAML和JINJa2三个关键模块组成

(3)部署简单:agentless,被红帽收购,故备收入epel源

(4)支持自定义模块

(5)支持playbook(剧本)

三、ansible组成+部署

部署:yum -y install ansible

配置文件:/etc/ansible/ansible.cfg

主机清单:/etc/ansible/hosts

主程序:ansible、ansible paly-book、ansible-doc

四、准备工作

1、主机(要管理的)纳入主机清单

2、基于ssh的方式与要管理主机通信(密钥)

(1)生成一对密钥:ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ''

(2)将公钥发给要管理的主机:ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.124

3、然后进行我们的第一个ansible命令吧

简单实用格式:ansible <host-pattern> [-m module_name] [-a args] [options]

ping管理的所有主机:ansible all -m ping

五、ansible的常用模块(用ansible-doc -l可以显示)

(1)command模块:远程主机上运行命令

例如:ansible webservers -m command -a "ls /var"

ansible webservers -a "useradd user1",command模块可以省

ansible webservers -a "echo magedu |passwd –stdin user1" ,不成功,不支持管道

(2)shell模块:(管道可以用)远程主机在shell进程下运行命令,支持shell特性

例如:ansible webservers -m shell -a "echo cwj1111|passwd –stdin user1"

(3)copy模块:把文件复制到远程位置

例如:ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab" 可以指明mode(权限),group(组),owner(主)。

4)cron:管理任务计划的

minute=,day=,month=,weekday=,hour=,job=,name=(必须要给),state=

例如:ansible all -m cron -a "minute=*/5 job='/sbin/ntpdate 192.168.1.109 &> /dev/null' name=Synctime "

在被管理主机上使用crontab -l便可以看到

ansible all -m cron -a "state=absent name=Synctime" 就可以删除

(5)fetch模块:拉取文件的(从远程主机上拉取文件到本地)

ansible-doc -s fetch 查看

(6)file模块:设定文件属性(属组,属主)

例如:ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link"

修改属性:path= ,owner= ,mode= ,group=

创建目录:ansible all -m file -a "path=/tmp/tmpdir state=directory "

(7)pip模块:管理python的模块

(8)yum模块:用yum包管理,管理包

例如:ansible all -m yum -a "name=httpd state=present"

上面显示的是我已经装过了,就没有改变,现在我们卸载了看看:ansible all -m yum -a "name=httpd state=absent"

在使用rpm看一下就没有了

(9)service模块:管理服务

name=,state=, started(启动),stopped(停止),restarted(重启), enabled=,runlevel=

例如:先查看两台主机的80端口,再启动

ansible all -m shell -a "ss -tnl |grep :80 "

ansible all -m service -a "name=httpd state=started"

启动之后:

(10)user模块:管理用户,账号,组

name=,system=,uid=,shell=,group=,groups=,home=,passwd=,remove=(state=absent,同时删除家目录)

例如:ansible all -m user -a "name=user2 system=yes state=present uid=306 "

(11)setup模块,收集变量

六、ansible-playbook

ansible使用YAML语法描述配置文件,YAML语法以简洁明了、结构清晰著称。ansible的任务配置文件被称为playbook,就是剧本,每个剧本里面包含一系列的任务,每个任务在ansible中又被称为“戏剧”(play)。

(1)YAML语法格式

数据结构可以用类似大纲的缩排方式呈现,结构通过通过缩进来表示,连续的项目可以通过减号“-”来表示,map结构里面的key/value对用冒号“:”来分隔。如下:

(2)例子

先创建一个working文件夹,再cd到working里面,把yaml文件移到里面,创建一个files目录,把配置好的httpd.conf移到里面去,改一下监听端口,改成8080

ansible-playbook –check web.yaml

测试一下:

启动:ansible all -m service -a "name=httpd state=restarted"

ansible all -m shell -a "ss -tnl |grep :8080"

(3)上面的有一个缺陷,我改动那个配置文件了怎么办,这个时候就要用handlers了

在特定条件下触发;接收到其他任务的通知时被触发。Tasks中的任务都是有状态的,changed或者ok。 在Ansible中,只在task的执行状态为changed的时候,才会执行该task调用的handler。Handlers 最佳的应用场景是用来重启服务,或者触发系统重启操作.除此以外很少用到了。我改了配置文件要重启吧。

(4)指定哪一出独唱用tags

我只想运行playbook的某一步,其他的不运行

(5)variables变量

1、facts:可以直接调用

2、ansible-playbook命令的命令行中可以自定义变量:-e 使用变量

ansible-playbook -e pkname=memcached –check web2.yaml

3、通过roles传递变量

4、Host Inventory

(6)模版templates:是一个文本文件内容嵌套脚本,是使用模版编程语言编程。

Jinja2:

template模块:基于模版方式生成一个文件复制到远程主机

例子,

(1)首先:ansible all -m setup | grep ansibleprocessorvcpus

(2)在working/files/ 下,编辑一个epel源,这里我们直接wget 阿里的好了:wget -O working/files/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

(3)复制过去:ansible all -m copy -a "src=files/epel.repo dest=/etc/yum.repos.d "

(4)装上nginx:ansible all -m yum -a "name=nginx state=present "

(5)创建模版文件:cp /etc/nginx/nginx.conf files/nginx.conf.j2

vim files/nginx.conf.j2

workerprocesses {{ ansibleprocessor_vcpus }};

(6)使用template将模版复制过去:

好了,现在做的结果是让worker_processes跟cpu的内核数相等。它比copy更厉害的是,它配置的是模版文件,就像作文模版一样,可以根据你的需要配置吻合不同机器一个模版文件,而copy的文件是固定不变的。

(7)条件判断,when语句,在task中使用,支持jinja2的语法格式

(8)循环,迭代,我一下装好几个包

作者:yezi

来源:http://www.178linux.com/65855

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-01-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

Mac下使用XLD转换无损音乐Ape

最近想要给音乐库增加一些音乐,下载了一些Ape格式的无损音乐,但是无法直接导入到iTunes中,必须经过其他工具转换成苹果的无损格式,XLD就是这样一款工具。X...

23110
来自专栏数据和云

你造吗,Oracle SQLplus 也有History命令了

很多时候我们只能通过SQLPlus来操作数据库,而当一个SQL执行结果太多时,我们要回翻之前的SQL语句就会很麻烦,甚至可能由于ssh客户端或SQLPlus客户...

33550
来自专栏菩提树下的杨过

spring cloud 学习(8) - sleuth & zipkin 调用链跟踪

业务复杂的微服务架构中,往往服务之间的调用关系比较难梳理,一次http请求中,可能涉及到多个服务的调用(eg: service A -> service B -...

62980
来自专栏程序员叨叨叨

【9】全民博客时代的到来——20分钟简要教程

很久以前就想搭建一个个人技术博客的网站了,但是那时候接触的东西不多,没有听说过hexo、jekyll、wordpress等快速blog生成工具,自己在网上找了博...

13830
来自专栏CSDN技术头条

从0到1搭建属于自己的服务器

云计算这个概念从提出到现在已经十多年了,在这些年里,云计算取得了飞速的发展与翻天覆地的变化,而云计算也给我们很多开发者带来了福音,比如早期的微信公众号开发,我们...

1.3K60
来自专栏Python攻城狮

Django教程(一)- Django视图与网址1.简介2.环境搭建3.安装pycharm4.Ubuntu下 正确安装VMware Tools5.Django主要模块6.Django基本命令7. Dj

Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!

16320
来自专栏北京马哥教育

生产环境之“进程”两字

一、进程概念 运行中的程序的一个副本,是被载入内存的一个指令集合 进程ID(Process ID,PID)号码被用来标记各个进程UID、GID、和SELinux...

37680
来自专栏建站达人秀

如何快速搭建 hexo 博客

本文将简介如何自己的服务器、腾讯云COS及Github Page上部署hexo博客。

1K50
来自专栏哈雷彗星撞地球

Mac 下安装node.js

Node.js 是一个用Chrome's V8 JavaScript engine 构建的 JavaScript 运行时框架。Node.js 使用事件驱动、非阻...

22150
来自专栏从流域到海域

在CentOS 7上安装Magento

在这篇教程中,您将学习如何在CentOS 7上安装Magent。Magento Community Edition(CE,即社区版)是一个免费的开源电子商务平台...

68460

扫码关注云+社区

领取腾讯云代金券