ansible: 自动化运维工具

ansible: 自动化运维工具
批量管理
python开发
无客户端
基于ssh服务 22
安装:

    1.ansible包在扩展源,epel-release
    # yum  -y  install  epel-release 
    # yum  repolist 
    2.安装,ansible
    # yum  -y install  ansible 

基础命令:
    # rpm  -ql  ansible     //列出所有的文件
    # rpm  -qc  ansible     //列出配置文件
    # ansible  --help
    # ansible-doc  -l   //查看所有的模块
    # ansible-doc  -s  yum   //查看指定模块的帮助信息

第一个ansible的命令:
    # ansible  主机名/IP地址  -m  ping  
    # ansible  主机名/IP地址  -m  ping  -o     //一行输出

管理主机:
    1.编写主机清单
    vim  /etc/ansible/hosts
    host1
    host2
    2.调用ping模块测试后host1
    #  ansible  host1  -m  ping    会失败 
    # ansible  host1 -m  ping  -u root  -k -o   
    SSH password: 
    host1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}

    问题:管理100台,是不是需要输入100遍密码,输入100次命令???

主机清单:
    # vim /etc/ansible/hosts 
    host1
    host2 
    host3
    host4
    host5

    分组:
    [webserver]
    host1
    host2 
    host3
    host4
    host5

    内置变量:  
        ansible_ssh_user 
        ansible_ssh_pass 
    
    分组:
    [webserver]
    host1  ansible_ssh_user='root'  ansible_ssh_pass='qwer'
    host2  ansible_ssh_user='root'  ansible_ssh_pass='qwer'
    host3  ansible_ssh_user='root'  ansible_ssh_pass='qwer'
    host4  ansible_ssh_user='root'  ansible_ssh_pass='qwer'
    host5  ansible_ssh_user='root'  ansible_ssh_pass='qwer'
    
    测试:
    # ansible webserver   -m  ping   -o

    分组:
    [webserver]
    host[1:5]  ansible_ssh_user='root'  ansible_ssh_pass='qwer' 

    问题: 用户名和密码不一样怎么办?
        1.手动添加
        2.脚本
    
    分组:
    [webserver]
    host1
    host2
    host3
    host4
    host5
    [webserver:vars]
    ansible_ssh_user='root'
    ansible_ssh_pass='qwer'     //一行一个变量

    分组之上再分组
    [mysql]
    mysql1
    mysql2
    [web]
    web1
    web1 
    [lvs]
    mysql
    web 

    对主机清单进行拷贝,/etc/ansible/hostlist 
    自定义主机列表:
    # ansible  -i /etc/ansible/hostlist  host1  -m  ping  -o 

模块:
    ping 模块
    shell模块:
        # ansible  host1 -m shell  -a  'hostname'  -o 
        # ansible  host1 -m shell  -a  'yum  -y install  httpd '  -o 
        # ansible  host1 -m shell  -a  'touch  a.txt'  -o 





    复制模块:
        # ansible-doc   copy    //帮助
        # ansible  host1  -m  copy  -a 'src=/etc/hosts  dest=/tmp/2.txt  mode=0666'
        # ansible  host1  -m  copy  -a 'src=/etc/hosts  dest=/tmp/2.txt  backup=yes'
    用户模块
        # ansible  host1  -m  user -a 'name=yunjisuan'

    软件包管理模块
        # ansible host1 -m yum  -a 'name=httpd   state=latest'
    服务模块
    文件模块
    收集信息模块


核心:
    YAML 非标记语言 
         标记语言:   标签
    语法: 
        列表:
            水果:
            - 苹果
            名字: 富士山苹果
            价格: 4.5/斤
            颜色: 红色
            - 香蕉
            - 榴莲
        字典:
            苹果:
            名字: 富士山苹果
            价格: 4.5/斤
            颜色: 红色

模块: 一行一行写的,如果执行一整套的配置呢?


目的: 通过yaml编写一个剧本,完成web的部署,配置,启动全过程
剧本:
# vim apache.yaml
- hosts: host1
  tasks:
  - name: install  apache  packages
    yum: name=httpd state=present
  - name: copy  apache conf
    copy: src=./httpd.conf  dest=/etc/httpd/cong/httpd.conf 
  - name:  qifuwu
    service: name=httpd  state=started  enabled=yes 


执行yaml这个剧本:
    # ansible-playbook  apache.yaml   
    # ansible-playbook  apache.yaml  --syntx-check 
    # ansible-playbook  apache.yaml  --list-hosts 
    # ansible-playbook  apache.yaml  --list-tasks  

你可能感兴趣的:(云计算,linux)