zoukankan      html  css  js  c++  java
  • ansible

    ansible

       代码发布系统

    ansible

      使用python 2.7开发的代码发布系统。是用来批量在远程主机上执行命令的。

    安装

    第一步:下载epel源

      ansible安装文件在epel源里边,需要去epel里边下载。命令如下:

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

      如果没有wget,需要先安装wget,命令如下:

    yum install -y wget

    第二步:安装

    yum install -y ansible

    ansible命令

    查看帮助

    ansible -h

    命令格式

    Usage: ansible <host-pattern> [options]
    -a MODULE_ARGS # 模块参数
    -C, --check # 检查语法
    -f FORKS # 并发
    --list-hosts # 列出主机列表
    -m MODULE_NAME # 模块名字

      ansible通过ssh连接被控主机。

    ssh认证方式

      ssh认证方式有两种,分别是:

        密码

        秘钥

      秘钥包含公钥私钥

    生成秘钥对

    ssh-keygen

    编辑查看秘钥

    vi /root/.ssh/id_rsa

      生产环境中也是使用秘钥连接的

    将公钥发送到远程机器上

    ssh-copy-id 192.168.12.25  # 192.168.12.25为目标主机IP

       私钥加密,公钥解密。

    查看ansible生成的文件

    rpm -ql ansible

    查看包安装状态

    rpm -qa ansible

    ping

      ping使用的是ICMP协议。

      ansible的ping使用的是ssh。

    ping单台机器

    ansible 192.168.12.26 -m ping  # 192.168.12.26是目标主机的IP地址

    ping多台机器

    ansible 192.168.12.28,192.168.12.26 -m ping  # IP地址中间使用,(逗号)连接

    ping所有机器

    ansible all -m ping

    hosts

    hosts文件内容

    # It should live in /etc/ansible/hosts
    #
    #   - Comments begin with the '#' character #是注释
    #   - Blank lines are ignored 空行被忽略
    #   - Groups of hosts are delimited by [header] elements []表示主机组
    #   - You can enter hostnames or ip addresses  可以输入主机名或者ip地址
    #   - A hostname/ip can be a member of multiple groups 一台主机可以被分配多个组
     www[001:006].example.com www001到www006.example.com

    ping单个主机组

    ansible web -m ping  # web为组名

    查看指定主机组

    ansible web --list-hosts  # web为指定的机组

    并集

      同时对两个主机组进行ping测试,也可以理解为两个组的并集,下边两种方式都可以。

    # 方式一
    ansible web,db -m ping # 主机组之间用逗号连接

    # 方式二 ansible "web:db" -m ping # 使用双引号包含主机组名,主机组名之间用冒号连接

     交集

      ping两个组之间的交集。

    ansible "web:&db" -m ping

     差集

      ping两个组之间的差集。

    ansible 'web:!db' -m ping  # 注意是单引号,必须。解释:web中有,db中没有的

    host-pattern

      host-pattern有如下5种格式:

        单个机器

          直接使用ip地址等唯一标识的标志来指定目标主机。

        多个机器

          可以使用逗号(,)将多个IP地址或者组名连接起来。

        所有机器

          使用all来代替所有的主机。

        可以写一个组

          使用组名来代替指定的一组主机。

        可以写多个分组

          并集

            方式一:

              使用逗号(,)将两个组名连接起来。

            方式二:        

              冒号(:)将两个组命名连接起来。

          交集  :&隔开

            使用:&(冒号和&)将两个组名连接起来。

          差集(前边有,后边没有的) :!隔开

            使用:!(冒号和惊叹号)使用将两个组名连接起来。

    查看模块信息

    查看模块帮助信息

    ansible-doc -h

    命令格式 

     ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
     -j 以json格式显示所有模块信息
     -l 列出所有的模块
     -s 显示模块的摘要信息
     # 直接显示模块的所有帮助信息

    以json的格式显示所有的模块信息

    ansible-doc -j

    列出所有的模块

    ansible-doc -l

    统计出模块的数量

    ansible-doc -l|wc -l

    查看指定命令的摘要信息

      这里查看的是ping命令,当然也可以是其他命令。

    ansible-doc -s ping

    查看指定命令的全部信息

      这里查看的是ping命令的全部的信息,当然也可以是其他命令。

    ansible-doc ping

    命令相关

    显示分组的所有信息

      下边两条命令的作用相同,第一条是简化的写法,系统默认是的命令方式是command。

    ansible web -a 'ls'
    ansible web -m command -a 'ls'

    chdir 

      在运行pwd命令之前切换到/tmp目录下,一般在使用编译情况下使用。

    ansible web -a 'chdir=/tmp pwd'

     creates

       如果creates的文件存在,则不执行后面的操作。

    ansible web -a 'create=/tmp pwd'

     removes

      如果remove的文件存在,则执行后面的操作。

    ansible web -a 'removes=/tmp pwd'

    使用ansible创建一个用户

    ansible web -a 'useradd alex'  # 创建一个名为alex的用户

    查看用户的创建状态

      方法一:

    tail -1 /etc/passwd  # -1为数字1,显示倒数第一条

      方法二:

    tail -1 /etc/shadow  # -1为数字1,显示倒数第一条

    交互式设置密码

      给用户交互式设置密码,由于使用交互式,所以需要输入两遍密码。

    passwd alex  # alex为用户名

    非交互式设置密码

      一次设置密码,用户设置的密码为数字1。

    echo '1' | passwd --stdin alex

    shell

      < > | ; & $ 这些特殊字符command不支持。

    指令方式为用户设置密码

    ansible web -m shell -a 'echo "1" | passwd --stdin alex'  # 给alex用户设置密码为1

    执行shell脚本

    编写脚本文件a.sh

      下边的代码为脚本的内容,在当前目录创建一个名为xxoo的文件夹。

    #!/bin/bash
    mkdir /xxoo
    执行脚本文件

      方式一:

    ansible 192.168.12.25 -m shell -a '/root/a.sh'  # 执行shell脚本,前提是脚本有可执行的权限

      方式二:

    ansible 192.168.12.25 -m shell -a 'bash a.sh'

      当脚本没有可执行的权限时,给脚本可执行的权限。

    chmod +x a.sh  # a.sh为被执行的脚本文件

    执行python脚本

    编写python脚本a.py

      脚本代码意思为打印下面的那句古诗。

    #!/bin/env python
    #coding:utf-8
    
    print('花径不曾缘客扫,蓬门今始为君开。')
    执行python脚本
    ansible 192.168.12.25 -m shell -a '/root/a.py'

      如果脚本文件没有执行权限,则增加执行权限。

    script

    创建脚本m.sh

    #!/bin/bash
    mkdir /ooxx

    执行管控机上的脚本文件m.sh

    ansible db -m script -a '/root/m.sh'  # db为组名

    查看被管控机上的文件是否存在

    ansible web -m script -a 'creates=/root/m.sh /root/m.sh'  # 查看的是被管控机上的文件是否存在,存在则不创建;不存在则创建ooxx文件夹、

    文件相关的模块

    copy

      复制文件到远程主机

    ansible db -m copy -a "dest=/tmp/a.sh src=/root/m.sh"

    file

    saltstack

      使用python 2.7开发的代码发布系统。

    openpyxl

      用python来操作Excel的模块。

    puppet

      是由日本程序猿使用Ruby语言开发的代码发布工具。使用比较繁琐,需要配置很多文件,现在已经没落了,只有少数大公司现在还在使用。而且现在这些公司也在慢慢的想ansible和saltstack方向转。

  • 相关阅读:
    Eclipse本地创建新的GIT分支,并推送至远程Git分支
    将持久态数据转化为游离态数据代码实现
    Java根据当前日期获得昨天的当前日期代码实现
    @RequestMapping和@GetMapping区别
    炫酷的banner.txt
    小程序colorUI框架初步使用教程
    Java Spring boot element ui activiti前后端分离,流程审批,权限管理框架
    Activiti (一)
    CSS Clip 裁剪
    @SpringBootApplication的使用
  • 原文地址:https://www.cnblogs.com/ZN-225/p/10375873.html
Copyright © 2011-2022 走看看