ansible详解

ansible:Ansible的核心程序

HostLnventory:记录每一个管理主机的信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载。

PlaybooksYAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
Core ModulesAnsible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写
Connection Plugins连接插件,Ansible和Host通信使用。

ansible特点:

1 Stupied Simple ,上手简单,学习曲线平滑
2 SSH by default ,安全,无需安装客户端
3 配置简单、功能强大、扩展性强
4 支持API及自定义模块,可通过Python轻松扩展
5 通过Playbooks来定制强大的配置、状态管理
6 提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台
7 幂等性:一种操作重复多次结果相同

一 安装ansible

yum -y install ansible

二 ansible配置客户端:

1 server: ssh-keygen
2 scp id_rsa.pub root@192.168.254.25:/root/.ssh/authorized_keys

或者:

1  vim /etc/ansible/hosts
2  ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=root
3 在/etc/ansible/ansibe.cfg中取消host_key_checking=False的注释

如果报错:

这可能因为三点:

1)hosts文件主机组添加错误

2)ansible.cfg配置文件的注释没有取消

3)没有设置免密登陆

三 :ansible常用命令

 1 ansible-doc -l #查看支持的模块
 2 ansible-doc -s MODEL_NAME #查看模块用法
 3 ansible命令应用基础
 4 ansible <host-pattern> [options]
 5       -f forks:启动并发线程数        #可以限制同时运行的线程数来控制任务运行
 6       -m model_name:要使用的模块    
 7       -a args:特有的参数        #接在命令和具体动作中间
 8 
 9 ansible all -m ping #查看client端是否正常ping通
10 ansible webserver -m setup #查看客户端信息
11 ansible webserver -m copy -a 'src=/root/git_test/code.txt dest=/root/test' #copy文件到cient端
12 ansible webserver -m user -a "name=test state=present" #创建test用户
13 ansible webserver -m user -a "name=test state=absent" #删除test用户
14 ansible webserver -m yum -a ‘name=epel-relese state=latest‘ #yum安装
15 ansible webserver -m service -a ‘name=httpd state=stopped enabled=no‘ #停止httpd服务
16 ansible webserver -m script -a ‘/tmp/test.sh‘ #运行脚本
17 ansible webserver -m command 'date' #查看时间    #执行时会有 command warning提示可以在ansible.cfg的文件中取消command_warnings = False的注释,并置顶格即可

四:yaml

 1 yaml介绍
 2 
 3 yaml是一个可读性高的用来表达资料序列的格式,yaml参考了其他多种语言,包括:xml,c语言,python,perl以及电子邮件格式RFC2822等,ClarkEvans在2001年在首次发表了这种语言。
 4 
 5 yaml的可读性好
 6 yaml和脚本语言的交互性好
 7 yaml使用实现语言的数据类型
 8 yaml有一个一致的信息模型
 9 yaml易于实现
10 yaml可以基于流程来处理
11 yaml表达能力强,扩展性好

五:yaml文件配置详解

 1 - hosts: zzz    #主机组名,  -置顶格,后面空一格 冒号后面空一格 
 2   remote_user: root    #用户  与hosts对齐
 3   vars:          #变量  
 4   - packages: tree    #意思为package=tree 指定变量用- 变量
 5   tasks:          #任务:
 6   - name: yum install tree    #任务名 
 7     yum: name={{ packages }} state=absent  #用什么模块就什么模块名,将packages当作变量赋值给name,这就是jinjia2的用法
 8     notify:        #上面命令一旦执行成功并且有变化就触发触发器下面的命令,notify起到承接提示的作用。
 9     - delete user
10   - name: changed service status
11     service: name=httpd state=stopped
12   - name: create users
13     user: name={{ item }}    #{{ item }}当作变量名,固定内置用法
14     with_items:                             #这里以with—item:来引用,一般用于批量操作
15     - user1
16     - user2
17     - user3
18   - name: copy httpd.conf
19     copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/zzz
20     notify:
21     - service httpd restart
22   handlers:                        #与hosts对齐
23   - name: service httpd restart     #名称与notify的名称一致才能触发
24     service: name=httpd state=restarted        #名称下面写具体操作内容
25   - name: delete user
26     user: name=likai1 state=absent

 templates模块:

1) mkdir templates                       #root下创建templates目录

2) cd /etc/httpd/conf   && cp -a httpd.conf  /root/templates/httpd.conf      #将内容复制到templates目录下

3) mv  templates/httpd.conf  templates/httpd.conf.j2     #以j2后缀为命名文件

4)  打开httpd的配置文件将listen 80 改为 listen {{ port }}      #将端口号设置为变量

5)打开ansible/hosts文件 在添加的主机信息后面再加上port = 5000,port=6000     #(此数字自己设置),目的是便于查看执行完yml文件后的效果。

下面进行templates模块在yml文件的配置:

 1 - hosts: zzz
 2   remote_user: root
 3   tasks:
 4   - name: cp httpd.conf
 5     template: src=/root/templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf    #src=以j2为后缀的文件的绝对路径
 6     notify:
 7     - restart httpd
 8   handlers:
 9   - name: restart httpd
10     service: name=httpd state=restarted     #注意重启操作是需要主机防火墙关闭的。

在客户端主机上执行ss -tnl如果有5000或者6000的端口开启则证明templates模块应用成功。

如果报错:

这是因为主机组中并没有此目录。

 roles介绍:

什么情况下用到roles

主机组中的主机之间也会有不同的需求,为了满足这些不同的需求就需要用到roles(重复调用代码)

下面开始:

1)mkdir -pv ansible_playbooks/roles/{webserver,dbserver}/{files,tasks,vars,templates,handlers}     #创建roles所需目录
2)tree ansible_playbooks                  #查看此目录的树状结构
3)在webser目录:
cp /etc/httpd/conf/httpd.conf files/ #假设主机相同的前提下,复制配置文件信息到files目录下 4) 在task目录下创建main文件 #main.yml的main为固定写法
cd tasks
5) vim main.yml - name: install httpd package yum: name=httpd - name: install configuration file copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restart httpd
6)在handlers目录下创建main文件并写入 - name: restart httpd #与notify的名称保持一致 service: name=httpd state=restarted

# 以上步骤dbbserver同理,将httpd改成cobbler来进行区分
7)然后cd至ansible_playbooks下创建site.yml文件,写入: #必须和ansible_playbooks是同一级目录,而且site为固定写法 - hosts: zz #可以是具体的主机ip地址 remote_user: root roles: #定义角色 - webserver - dbserver 8)执行: ansible-playbook site.yml

        

原文地址:https://www.cnblogs.com/zzzynx/p/10804540.html