ansible:Ansible的核心程序
HostLnventory:记录每一个管理主机的信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载。
Playbooks
:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.Core Modules
:Ansible执行任何管理任务都不是由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[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