ansible 学习命令详解

ansible 学习命令详解


一.什么是ansible?


ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,

实现了批量系统配置、批量程序部署、批量运行命令等功能。

无客户端。

二.ansible工作原理



3

三.部署环境


(1)准备环境,准备好要部署的客户机(一台ansible,n台需要批量部署的主机)

ansible主机地址:192.168.65.140

需要部署的客户机(由于批量太多这里例举三台客户机)地址:192.168.65.138  192.168.65.142 192.168.65.143

(2)域名解析

进入到ansible主机  vim/etc/hosts

将需要部署的客户机地址解析加入进去:

192.168.65.138  host1

192.168.65.142  host2

192.168.65.143  host3

(3)ansible服务器安装

首先安装epel源,首先安装阿里源:

rm  -rf /etc/yum.repos.d/*    (清除源配置文件)   

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo  【安装阿里云的epel源(如果没有wget命令可以先yum -y install wget 装一个wget )】

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo        (安装阿里云的centos7的repo文件)

然后,开始安装ansible: yum -y install ansble

(4)实现免密登陆客户机(可选)

ssh-keygen                        #生成密钥对

ssh-copy-id                        # 客户机IP地址

如果不往客户机上推送公钥的话也可以进入ansible配置文件给客户机增加用户名和密码依然可以实现免密登陆:

vi /etc/ansible/hosts

host[1:3]ansible_ssh_user='root' ansible_ssh_pass='wangning'


四.ansible基础


(1)定义主机清单:

vim/etc/ansible/hosts

在里面加入上面解析的客户机地址:host1  host2  host3

(2)测试连通性

ansible host1 -m ping -o                  #ansible:调用ansible命令

                                                        #  host1:客户机一地址 

                                                        # -m:指定模块

                                                        # ping:ping:

                                                        #ssh连通性测试

                                                        # -o:以行输出

注意ping和ssh:ping是探测ssh程序是否连接。

五.主机清单


(1)主机组

增加主机组:vim /etc/ansible/hosts

[webserver]

host1

host2

host3                                        #  []:中括号定义主机组的名称,在里面填上主机组的名字,把客户机写到下面写在下面的客户机就属于这个主机组

测试主机组:ansible webserver -m ping -o                                                      #出现各个客户机的su'ccess证明测试成功

(2)增加用户名和密码和端口

进入配置文件:

vim /etc/ansible/hosts

【webserver】                                                                                                            # 客户机组名

host[1:3]ansible_ssh_user='root' ansible_ssh_pass='wangning'                          #给客户机添加用户和密码

测试:ansible webserver -m ping -o                                                                  #  免用户名和密码成功

主机用户名和密码不同的设置方法:

【webserver】                                                                                                            # 客户机组名

host1:ansible_ssh_user='wangning' ansible_ssh_pass='wangning1'      #给客户机一添加用户名和密码

host[2:3]ansible_ssh_user='root' ansible_ssh_pass='wangning'                          #给别的客户机添加用户和密码

如果客户机修改端口了的话ansible配置文件里面需要加上客户机端口

例:客户机一:

vim /etc/ssh/sshd_config

              port 2222

systemctl restart sshd

ansible配置文件:

host1:ansible_ssh_user='wangning' ansible_ssh_pass='wangning1' ansible_ssh_port=2222          #客户机如果修改了端口只需要在ansible里面加上端口就OK了

(6).子分组

进入配置文件:

vim /etc/ansible/hosts

【apache】                #定义apache组

host1

【mysql】                      #定义mysql组

host【2:3】

【webserver】                #将apache组和mysql组加入到webserver组里面

apache

mysql

(7).自定义主机列表

vim  hostlist                                                #定义一个主机列表文件

[webserver]

host1

host2

host3       

测试:

ansible -i hostlist webserver -m ping -o

六.点对点模式


简介:

临时的,在ansible中是指需要快速执行的单条命令,并且不需要保存的命令。对于复杂的命令则为 playbook。

(1)shell模块

ansible webserver -m shell -a ‘hostname’ -o                                      # -m:定义模块  shell:调用shell模块                                                                                                                                                                            # -a:制定参数  单引号里面写要干的事情

ansible host2 -m shell -a ‘yum -y install apache’ -o                          #在host2客户机上部署apache

(2)copy模块

ansible webserver -m copy -a ‘src=/tmp/wangning.txt dest=/tmp/wangning.txt mod=654 owner=root group=bin’-o

  #src:源文件地址

  #dest:目标文件地址

  #mod:文件权限

  #owner:属主

  #group:属组

(3)用户模块

ansible webserver -m user -a 'name=wangning state=present'                                        #创建用户:调用user模块创建一个wangning的用户

ansible webserver -m user -a 'name=wangning state=absent'                                          #删除用户:

给客户机修改密码:

echo 'wangning'  | openssl passwd -1 -stdin                                                                    #生成密码:生成一个加密的wangning密码选项

ansible webserver -m user -a 'name=qianfeng password="$1$gJ9gAvue$SP0qLivrFtgRM27bE9USl1"'    #修改密码:password后面就是刚才生成的wangning密码

(4)服务模块

ansible host2 -m service -a 'name=httpd state=started'                                                #启动服务

ansible host2 -m service -a 'name=httpd state=stopped'                                              #停止服务

ansible host2 -m service -a 'name=httpd state=restarted'                                              #重启服务

ansible host2 -m service -a 'name=httpd state=started enabled=yes'                            #开机自启

ansible host2 -m service -a 'name=httpd state=started enabled=no'                              #永久关闭

(4)软件包管理

ansible host1 -m yum -a 'name="*" state=latest'                        #升级所有包

ansible host2 -m yum -a 'name="httpd" state=latest'                  #安装apache

(3)文件模块

ansible host1 -m file -a 'path=/tmp/88.txt mode=777 state=touch'                    #创建文件

ansible host1 -m file -a 'path=/tmp/99 mode=777 state=directory'                    #创建目录

七.YAML-YAML Ain’t Markup Language-非标记语言

简介:

ansible的playbook采用yaml语法,所以当要写好剧本的话必须懂得YAML语言

(1)语法

列表:

使用"- "(减号加一个或多个空格)作为列表项。yaml的列表在playbook中极重要,必须得搞清楚它的写法。

例如:

字典:

使用"冒号+空格"分隔,即key: value。它一般当作列表项的属性

例如:


(2)通过YAML编写一个完成web部署的剧本,配置,启动的全过程。

准备工作:

ansible all -m yum -a 'name=httpd state=removed' -o                          #清理环境

yum -y install httpd                                                                              #安装apache 准备配置文件

mkdir apache

cd apache

cp -rf /etc/httpd/conf/httpd.conf .

grep '^Listen' httpd.conf                                                                      #修改配置文件监听端口,用作推送

编写剧本:

vim apache.yaml

- hosts: host2                                                                  #指定客户机

  tasks:                                                                            #任务(下面是任务内容),一般情况每个yaml文件内都得有这个任务                           

  - name: install apache packages                                  #指定要做的任务(安装apache)

    yum: name=httpd state=present                                  #执行任务的命令

  - name: copy apache conf                                              #拷贝配置文件

    copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf

  - name: ensure apache is running                                  #启动apache服务

    service: name=httpd state=started enabled=yes

测试:

ansible-playbook apache.yaml  --syntax-check                        # 检验语法是否有错误

ansible-playbook apache.yaml                                                  #测试

handlers  (处理程序)

简介:

如果修改了配置文件的话,再次执行ansible就会失败,因为修改了配置文件之后需要刷新配置文件,然而这么些台客户机不可能每次都刷新,所以产生了我们这个处理程序

添加处理程序:

#notify:触发器,引用handlers


八.Role 角色扮演

简介:

roles则是在ansible中,playbooks的目录组织结构。

将代码或文件进行模块化,成为roles的文件目录组织结构,

易读,代码可重用,层次清晰。

通过role远程部署nginx配置:

目录结构:

#roles:主目录名

#site.yaml:主文件

#nginx:存放的是ansible部署nginx的内容

#files:存放网页的目录

#handlers:存放处理程序的目录

#tasks:存放ansible主任务的目录

#templates:金甲模板,里面存放的是模板的ansible执行文件

#vars:存放变量的目录

准备好目录结构之后,安装上nginx并拷贝nginx的配置文件到金甲模板目录中:

yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

编写任务:

vim roles/nginx/tasks/main.yaml

---

- name install epel-release

yum: name=epel-release state=latest

- name: install nginx packge

  yum: name=nginx state=latest

- name: copy index.html

  copy: src=index.html dest=/usr/share/nginx/html/index.html

- name: copy nginx.conf template

  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

  notify: restart nginx

- name: make sure nginx service running

  service: name=nginx state=started enabled=yes

准备配置文件:

vim roles/nginx/templates/nginx.conf.j2                      #进入到金甲模板里的拷贝过来的配置文件

worker_processes  {{ ansible_processor_cores }};        #调用内部已知变量

worker_connections {{ worker_connections }};              #自定义变量

编写变量:

vim roles/nginx/vars/main.yaml                              #进入到变量目录的剧本文件

worker_connections: 10240                                   

编写处理程序:

vim roles/nginx/handlers/main.yaml                          #进入到处理程序的剧本

---                                                                              #剧本开头指定 ---

- name: restart nginx                                               

  service: name=nginx state=restarted

编写主剧本:

vim roles/site.yaml                                                    #进入到主剧本

- hosts: host4                                                            #指定客户机

  roles:                                                                      #调用roles

  - nginx                                                                    #执行nginx

实施:

cd /roles                                                                  #进入到roles目录 

ansible-playbook site.yaml --syntax-check                #测试剧本

ansible-playbook site.yaml                                        #实施剧本


若有问题咨询欢迎大家联系我:

邮箱:Wangmouren1997@163.com

QQ:1586787265

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357