ansible

  1. ansible的简介与安装
  2. ansible基础
  3. Inventory -主机清单
  4. Ad-Hoc-点对点模式
  5. YAML-YAML Ain’t Markup Language-非标记语言
  6. Role-角色扮演
  7. 拓展

1.ansible的简介与安装

        1.1ansible简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,
实现了批量系统配置、批量程序部署、批量运行命令等功能。
无客户端。

        1.2工作原理图

         1.3ansible的安装

        (一)安装epel源或者阿里源

yum install -y epel-release

        (二)安装ansible

yum install -y ansible

        (三)查询部署是否完成

rpm -ql ansible        列出所有文件

rpm -qc ansible        查看配置文件

ansible --help        查看ansible帮助

ansible-doc -l        看所有模块(A10,华为,docker,EC2,aws等等广大厂商设备)

ansible-doc -s yum         看yum模块,了解其功能

2.ansible基础

        2.1定义主机清单

vim /etc/ansible/hosts  :

        host1    host2    host3

        2.2测试连通性

ansible   localhost   -m ping  :

-m 指定模块de什么功能;ping只是其中一个模块。还有shell,yum等等

注意这里测试先做免密或者关闭ssh的询问用:

ansible host1 -m ping -u root -k

        2.3简洁输出

ansible host1 -m ping  -o 

        2.4去掉ssh的询问

vim /etc/ssh/ssh_config 文件中添加如下并重启
StrictHostKeyChecking no
systemctl restart sshd

        2.5请注意ping和ssh

ping        ICMP:网际消息管理协议

结论ansible的ping,是探测ssh程序是否连接。不是icmp协议

3.Inventory -主机清单

        3.1增加主机组

        (一)官方链接  :http://docs.ansible.com/ansible/intro_inventory.html#

        在vim /etc/ansible/hosts中添加:

         在测试:

         也可以都做免密,不填密码来进行测试

        3.2增加用户名 密码

        如果主机和主机的主机名密码不同情况下:

        3.3 增加端口

        请将host1的sshd程序端口修改为2222

        3.4 组:变量

        ansible内部变量可以帮助我们简化主机清单的设置;在/etc/ansible/hosts中

         常用的变量:

        3.5子分组

        将不同的分组进行组合

        3.6自定义主机列表

        创建文件并在其中定义主机组和变量:

        使用ansible测试:

 

4.Ad-Hoc-点对点模式

        4.1简介:

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

        4.2shell模块

ansible-doc shell                   帮助

ansible webserver -m shell -a 'hostname' -o          获取主机名

ansible webserver -m shell -a 'hostname' -o -f 2        -f 2   指定线程数

ansible host2 -m shell -a 'yum -y install httpd' -o        部署apache

ansible host3 -m shell -a 'uptime' -o              查询系统负载

        4.3复制模块

ansible-doc copy         帮助

测试:

        ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777'

        ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt owner=root group=bin mode=777 backup=yes'

        4.4用户模块

ansible-doc user          帮助

ansible webserver -m user -a 'name=qianfeng state=present'       创建用户

修改密码:

        echo '512050951' | openssl passwd -1 -stdin                  生成加密密码

        ansible webserver -m user -a 'name=qianfeng

password="$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272."'         修改密码

修改shell:

        ansible webserver -m user -a 'name=qianfeng shell=/sbin/nologin append=yes'

删除用户:

        ansible webserver -m user -a 'name=qianfeng state=absent'

        4.5软件包管理模块

ansible-doc yum        帮助

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

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

        4.6服务模块

ansible-doc service         帮助

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

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

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=no'         开机禁止启动

        4.7文件模块

ansible-doc file          帮助

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'              创建文件夹

        4.8收集模块

ansible-doc setup         帮助

ansible host3 -m setup          查询所有信息

ansible host3 -m setup -a 'filter=ansible_all_ipv4_addresses'           查询IP地址信息

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

        5.1测试:需求通过YAML编写一个简单的剧本,完成web的部署,配置,启动的全过程。

        5.2准备工作  

创建文件夹,把安装的http的配置文件(/etc/httpd/conf/httpd.conf)拷贝到创建的文件夹;

并修改配置端口

        5.3编写剧本

        创建一个以.yaml结尾的文件。     【编写剧本的时候要特别的注意格式】

  

- hosts: host2
  tasks:
  - name: install http
    yum: name=httpd state=present
  - name: copy http conf
    copy: src=./http/httpd.conf dest=/etc/http/conf/httpd.conf
  - name: ensure http is running
    service: name=httpd state=started

        5.4测试

         (一)编写完成之后检验语法是否有错:

ansible-playbook http.yaml --syntax-check

        (二)列出任务:

ansible-playbook http.yaml --list-tasks

          (三)列出主机:

ansible-playbook http.yaml --list-hosts

 

        (四)执行并检测

 

        5.5    handlers

如果配置文件发生变化。比如端口发生变化 变为9000

再次执行,命令成功,但配置未生效,所以要增加处理程序。设置触发器 

【编写剧本的时候要特别的注意格式】

        在文件以.yaml结尾的文件中修改:

 - hosts: host2
  tasks:
  - name: install http
    yum: name=httpd state=present
  - name: copy http conf
    copy: src=./http/httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify: restart http service
  - name: ensure http is running
    service: name=httpd state=started
  handlers:
  - name: restart http service
    service: name=httpd state=restarted

        再次执行剧本成功配置生效:

6.Role-角色扮演

        6.1简介

roles则是在ansible中,playbooks的目录组织结构。
将代码或文件进行模块化,成为roles的文件目录组织结构,
易读,代码可重用,层次清晰。

        6.2测试案例:通过role远程部署nginx并配置

        6.3目录结构

nginx 角色名
files  普通文件
handlers  触发器程序
tasks  主任务
templates 金甲模板(有变量的文件)
vars 自定义变量

        创建文件:

mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p
touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml
echo 1234 > roles/nginx/files/index.html
yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

        6.4编写任务

        在"roles/nginx/tasks/main.yaml"的文件中:

---
- name: install epel-release packge
  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: restarted nginx

- name: make sure nginx service is running
  service: name=nginx state=started

        6.5准备配置文件

        在"roles/nginx/templates/nginx.conf.j2"中:

worker_processes  {{ ansible_processor_cores }};      调用内部已知变量
worker_connections {{ worker_connections }};            自定义变量

        6.6编写变量

        在"roles/nginx/vars/main.yaml"中:

 worker_connections: 10240

         6.7编写处理程序

        在"roles/nginx/handlers/main.yaml"中:

 ---
- name: restarted nginx
  service: name=nginx state=restarted

        6.8编写剧本

        在"roles/site.yaml"中:

- hosts: host3
  roles:
  - nginx 

         6.9检验并执行

7.拓展

        7.1如何在ansible中,使用不同的用户登录不同的主机

        7.2判断主机地址为10.18.46.37的主机。关闭该主机

        关闭两台

 

        7.3循环创建多个用户

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值