zoukankan      html  css  js  c++  java
  • 自动化运维 ansible

    ansible

    首先安装虚拟机的时候没有ip

    查看ip ip addr ifconfig

    vi /etc/sysconfig/network-scripts/ifcfg-ens33

    修改最后一行 reboot =yes

    systemctl restart network

    获取阿里镜像元

    https://opsx.alibaba.com/mirror

    找到epel 帮助

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    

    要是没有wget 命令 就先下载一个 yum install wget

    yum install -y ansible
    

    salt 控制节点需要安装slat-master

    salt被控制节点需要安装salt-minion

    ansible 通过ssh来连接并控制被控节点和进行操作

    ssh的认证方式

    • 密码连接
    • 秘钥连接

    ssh秘钥登录

    ssh-keygen  # 用来生成ssh的秘钥对
    ssh-copy-id  + ip  地址 # 复制秘钥到远程主机
    

    ansible命令格式

    ansible <host-pattern> [options]
    -a MODOULE_ATGS, --args=MODULE_ARGS # 模块的参数
    -C, --check # 检查,审阅
    -f FORKS, --forks=FORKS # 用来做高并发的
    --list-hosts # 列出主机列表
    -m MOUDLE_NAME #模块名称
    --syntax-check # 语法检查
    -k 输入密码
    

    查看ansible生成的文件

    rpm -ql ansible | head
    
    /etc/ansible
    /etc/ansible/ansible.cfg
    /etc/ansible/hosts
    /etc/ansible/roles
    /usr/bin/ansible
    /usr/bin/ansible-2
    /usr/bin/ansible-2.7
    /usr/bin/ansible-config
    /usr/bin/ansible-connection
    /usr/bin/ansible-console
    
    

    ansible hosts文件解读

    # This is the default ansible 'hosts' file
    #
    # It should live in /etc/ansible/hosts
    #
    #   -Comments begin with the '#' character # 用来表示注释
    #   -Blank lines are igore # 空白行被忽略
    #   -Groups of hosts are delimited by [header] elements
    	主机组 需要在[] 下面 | 主机组由[header]元素分隔
    	
    #   - You can enter hostnames or ip multiple groups 
    	一台主机可以在多个组里面
    www[001:006].example.com # 表示www001到www006的机器
    

    host-pattern的格式

    • 单个的主机
    • 全部主机
    • 多个主机
    • 单个组
    • 多个组
      • 交集 'web: $db'
      • 并集
        • web,db
        • 'web:db'
      • 差集或称补集 'web: ! db'

    ansible-doc 查看模块帮助信息

    Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
    
    plugin documentation tool
    
    Options:
      -a, --all             **For internal testing only** Show documentation for
                            all plugins.
      -h, --help            show this help message and exit
      -j, --json            **For internal testing only** Dump json metadata for
                            all plugins.
      -l, --list            List available plugins
      -F, --list_files      Show plugin names and their source files without
                            summaries (implies --list)
      -M MODULE_PATH, --module-path=MODULE_PATH
                            prepend colon-separated path(s) to module library
                            (default=[u'/root/.ansible/plugins/modules',
                            u'/usr/share/ansible/plugins/modules'])
      -s, --snippet         Show playbook snippet for specified plugin(s)
      -t TYPE, --type=TYPE  Choose which plugin type (defaults to "module")
      -v, --verbose         verbose mode (-vvv for more, -vvvv to enable
                            connection debugging)
      --version             show program's version number and exit
    
    
    缩略版本
     ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
     -j # 以json的方式返回ansible的所有模块
     -l, --list # 列出所有的ansible的模块
     -s # 以片段式显示ansible的帮助信息
    
    

    tips 系统自带的ping走的是ICMP协议

    命令相关模块

    command

    ansible web -a 'ls /' # 第一个命令
    
    ansible web -a 'pwd' # 查看当前所在目录
    
    ansible web -a 'chdir=/tmp pwd' 切换目录执行命令,使用场景:是编译安装时使用
    
    ansible web -a 'creates=/tmp pwd' # 用来判断/tmp目录是否存在,存在就不执行
    
    ansible web -a 'creates=/data pwd' # 因为data不存在,所以才会执行
    
    ansible web -a 'removes=/tmp pwd' #用来判断tmp是否存在,存在就执行此操作
    
    ansible web -a 'removes=/data pwd' # 因为data不存在,所以才不会执行
    
    
    

    查看用户是否创建成功

    [root@localhost ansible]# useradd alex
    [root@localhost ansible]# tail -1 /etc/passwd
    alex:x:1000:1000::/home/alex:/bin/bash
    [root@localhost ansible]# tail -1 /etc/shadow
    alex:!!:17946:0:99999:7:::
    [root@localhost ansible]# id alex
    uid=1000(alex) gid=1000(alex) groups=1000(alex)
    [root@localhost ansible]# echo 'alex' | passwd --stdin alex
    Changing password for user alex.
    passwd: all authentication tokens updated successfully.
    [root@localhost ansible]# 
    
    
    tail -1 /etc/passwd
    tail -1 /etc/shadow 意为影子
    id alex
    echo 'password' | passwd --stdin 'username' # 设置密码
    

    shell

    ansible web -m shell -a 'echo "password" | passwd --stdin alex' # 批量创建密码
    
    执行远程文件
    ansible ip -m shell -a 'bash a.sh' # 执行远程文件方式一
    ansible ip -m shell -a '/root/a.sh'# 执行远程方式二,文件必须有执行权限 x
    
    ansible ip -m shell -a '/root/a.py' 执行远程的python脚本
    
    

    script

    ansible web -m script -a '/root/m.sh' # 执行本地的文件,执行管控机上的文件
    
    ansible web -m script -a 'removes=/root/m.sh /root/m.sh'
    # 用来判断被管控机上是不是存在文件,如果存在,存在即执行,不存在即跳过
    
    ansible web -m script -a 'creates=/root/a.sh /root/m.sh'
    # 用来判断被管控机上是不是存在,存在即跳过
    
    

    文件相关操作

    copy

    backup 备份,以时间戳结尾
    dest 目的地址 destination 目的地
    group 文件的属组
    mode 文件的权限 r 4 w 2 x 1
    owner 文件的属主
    src 源文件
    # 通过md4码来判断是否需要复制
    
    ansible db -m copy -a 'src=/root/a.txt dest=/tmp/a.txt'
    # 复制本地文件到远程主机
    
    amsible db -m copy -a 'src=root/a.txt dest=/tmp/a.txt mode=755' 修改文件的权限
    
    ansible web -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755 owner=alex'  修改文件的属组
    
    ansible web -m copy -a 'src=/etc/init.d dest=/tmp/ mode=755 owner=alex' 复制本地目录到远程主机,如果改变文件的属性,则文件夹内的文件也会改变
    复制整个文件夹 包括文件
    
    
    ansible web -m copy -a 'src=/etc/init.d/ dest=/tmp/1/ mode=755 owner=alex' 复制本地目录中国的所有文件 到目的地址
    
    ansible web -m copy -a 'content="杰森斯坦森
    " dest=/tmp/a.txt ' 直接将文本内容注入 覆盖到远程主机
    
    

    file

    tips

    inode 硬盘的地址
    id 获取到的是内存地址
    ln -s a.py b.py 创建软连接
    ln a.py c.py 创建硬链接
    当 源文件发生变化时,软连接和硬链接都会随着发生变化
    
    
    ansible db -m file -a 'path=/smlz state=directory' 
    # 在远程机器上创建文件夹
    
    ansible db -m file -a 'path=/root/q.txt state=touch'
    # 在远程机器中创建文件
    
    ansible db -m file -a 'path=/tmp/f src=/etc/fst state=link' 创建软连接src是源地址,path是目标地址
    
    ansible db -m file -a 'path=/tmp/f state=absent'
    # 用来删除文件或者文件夹
    
    
    

    fetch

    dest 目的地址
    src 源地址
    
    ansible web -m fetch -a 'src=/var/log/cron dest =/tmp'
    # 下载被控节点的文件,每台机器创建一个文件夹,并保留原来的目录结构
    
  • 相关阅读:
    一提黄金肯定就是西方的货币史
    封装QtCore(在非Qt项目里使用QString,QJson,QFileInfo,QFile等类)
    Qt 自定义事件(三种方法:继承QEvent,然后Send Post就都可以了,也可以覆盖customEvent函数,也可覆盖event()函数)
    MAC 设置环境变量path的几种方法
    深入Qt 学习 -- 反射机制(比较简单清楚)
    排序
    寄存器,cache、伙伴系统、内存碎片、段式页式存储管理
    NET Core项目
    消息队列
    RedisHelper
  • 原文地址:https://www.cnblogs.com/zzy7372/p/10402575.html
Copyright © 2011-2022 走看看