一.目的

代码发布系统

二.准备工作:干净的虚拟机准备4个

准备一个虚拟机后克隆出另外三个,注意,克隆前要将虚拟机关机

三.可以用来代码发布的工具

puppet ansible slatstack

四.ansible(批量在远程主机上执行 命令)

1.下载ansible

  1. 第一步:下载wget
    yum install wget
    第二部:下载epel
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    第三部:安装ansible
    yum install -y ansible

2.ansible 通过ssh来连接并控制‘被控节点’

注:ssh 的认证方式

  • 密码连接

  • 秘钥连接

ansible使用秘钥登录

  1. ssh-keygen # 用来生成ssh的密钥对
    ssh-copy-id 192.168.177.132 # 复制秘钥到远程主机
    ssh-copy-id 192.168.177.133 # 复制秘钥到远程主机
    ssh-copy-id 192.168.177.134 # 复制秘钥到远程主机

注:135作为主节点,后三个作为被控者节点

结果:在192.168.177.135主机中,想要连接另外三个被控节点,使用命令:ssh 192.168.177.132(ssh ip)即可

3.ansible命令格式

(1)查看ansible的所有命令
  1. ansible -h
  1. -a MODULE_ARGS, --args=MODULE_ARGS #模块的参数
    -C, --check # 检查
    -f FORKS, --forks=FORKS #用来做高并发的
    --list-hosts #列出主机列表
    -m MODULE_NAME #模块名称
    --syntax-check # 语法检查
    -k 输入密码
(2)查看ansible生成的文件
  1. rpm -ql ansible
  1. /etc/ansible
    /etc/ansible/ansible.cfg #配置文件
    /etc/ansible/hosts
    /etc/ansible/roles
(3)查看是否能够连通单个IP(查看某个IP是否在线)
  1. ansible 192.168.177.132 -m ping

如果ping不通,在hosts文件中添加相应IP

  1. vi /etc/ansible/hosts
  1. # This is the default ansible 'hosts' file.
    #
    # 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 #一台主机可以在多个组中

    192.168.177.132
    192.168.177.133
    192.168.177.134

根据注释:You can enter hostnames or ip addresses,可以在hosts文件中加入主机命

或IP地址,以此来ping通相应IP

(4)查看所有被控节点是否在线
  1. ansible all -m ping
(5)测试特定的某几个机器是否在线
  1. ansible 192.168.177.132192.168.177.132 -m ping
(6)测试特定的某组机器是否在线

在配置文件中

  1. # Ex 2: A collection of hosts belonging to the 'webservers' group

    ## [webservers]
    ## alpha.example.org
    ## beta.example.org
    ## 192.168.1.100
    ## 192.168.1.110
    [web]
    192.168.177.[132:133]

    [db]
    192.168.177.133
    192.168.177.134

    [cache]
    192.168.177.134
  1. ansible web,db -m ping #查看web,db两个组的机器是否在线
(7)查看两个组的交集的机器是否在线
  1. ansible 'web:&db' -m ping
(8)查看两个组的并集的机器是否在线
  1. ansible 'web:db' -m ping #方式一
    ansible web,db -m ping #方式二
(9)查看两个组的差集的机器是否在线
  1. ansible 'web:!db' -m ping

注:系统自带的ping走的是ICMP协议

4.ansible-doc查看模块的帮助信息(有哪些参数可以使用)

  1. ansible-doc -h

  1. -j, --json           **For internal testing only** Dump json metadata for #以json的格式返回所有的ansible模块 ansible-doc -j
                         
    -l, --list           List available plugins #以列表的格式返回所有的ansible模块 ansible-doc -l

    -s, --snippet         Show playbook snippet for specified plugin(s) #以片段的形式显示ansible的帮助信息 ansible-doc -s 模块

查看详细信息

  1. ansible-doc command
    ansible-doc shell

5.命令相关模块

(1)command模块(不支持特殊字符)
  1. ansible web -m command -a 'ls /' #(默认就是command,command可以省略)
    ansible web -a 'ls /' #可简写为这
    ansible web -a 'pwd' #
command的参数

  1. ansible web -a 'chdir=/tmp pwd' #切换目录执行命令,常用来编译安装,
    ansible web -a 'creates=/tmp pwd' #如果目录已存在,就不执行命令,用来判断tmp目录是否存在
    ansible web -a 'removes=/data pwd' #目录已存在,就执行命令
在web组中创建一个用户shy
  1. ansible web -a 'useradd shy'
查看用户是否创建成功
  1. ansible web -a 'tail -l /etc/passwd' #方式一
    ansible web -a 'tail -l /etc/shadow' #方式二
    id shy #方式三
给用户设置密码
  1. passwd shy
设置密码 一步搞定
  1. echo '123' | passwd --stdin shy #用这种方式设置密码,远程登录时,不用重复确认密码
    ansible web -a 'echo '123' | passwd --stdin shy ' #管道符不支持

ansible不支持 < > ; &|这些符号,这时候就永远到了shell模块,shell模块支持这些符号

(2)shell模块(在远程执行)
shell的参数(与command模块相同)

设置密码
  1. ansible web -m shell -a 'echo '123' | passwd --stdin shy' #此时可以使用各种特殊符号
批量在在远程主机上执行shell脚本
  1. ansible 192.168.177.132 -m shell -a 'bash /opt/a.sh' #方式一
    ansible 192.168.177.132 -m shell -a '/opt/a.sh' #方式二

注:方式二文件可能没有可执行权限,需要:chmod +x a.sh

批量在在远程主机上执行python脚本
  1. ansible 192.168.177.132 -m shell -a '/opt/b.py'
(3)script模块(在本地执行)
参数信息(与command和shell参数相同)

执行本地(管控机)(主机)文件
  1. ansible web -m script -a '/opt/m.sh'
判断的是被管控机(从机)上的文件是否存在,存在就执行本地文件
  1. ansible web -m script -a 'removes=/opt/m.sh /opt/m.sh'
判断的是被管控机上(从机)的文件是否存在,存在就跳过
  1. ansible web -m script -a 'creates=/opt/m.sh /opt/m.sh'

6.文件相模块

(1)copy模块(在本地执行)
copy的参数

  1. backup 备份,以时间戳结尾
  2. dest 目的地址
  3. group 文件的属组
  4. mode 文件的权限 r 4 w 2 x 1
  5. owner 文件的属主
  6. src 源文件(加/是保存目录中的文件,不加/是保存目录)
  7. content 直接把文字输入到远程的文件中
  8. # 通过md5码来判断是否需要复制
将192.168.177.135(本地)中的/opt/a.sh复制dao192.168.177.132(远程)中的/root/a.sh
  1. ansible 192.168.177.132 -m copy -a 'src=/opt/a.sh dest=/root/a.sh'
  2. #复制得到的权限信息跟原来比少了一个可执行的权限
修改文件的权限
  1. ansible db -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755' #修改文件的权限
修改文件的属主
  1. ansible web -m copy -a 'src=/root/m.sh dest=/tmp/a.sh mode=755 owner=shy' 修改文件的属主
复制本地目录内的所有文件到远程主机
  1. ansible web -m copy -a 'src=/etc/init.d/ dest=/tmp/ mode=755 owner=hsy' # 复制本地目录内的所有文件到远程主机,如果改变文件夹的属性,则文件夹内文件的属性也会被改变
直接将文本内容注入到远程主机的文件中
  1. ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语\n' dest=/tmp/b.txt" # 直接将文本内容注入到远程主机的文件中
(2)file模块(在远程执行)
file模块的参数

软连接与硬连接
  1. inode 硬盘的地址
  2. id 获取到的是内存的地址
  3. ln -s a.py b.py 创建软连接 #类似于快捷方式
  4. ln a.py c.py 创建硬链接 #两个文件的inode是一样的
  5. cp a.py d.py #复制
  6. #当源文件变化时,软连接和硬链接文件都会跟着变化,复制的文件不会变化
在远程机器上创建文件夹
  1. ansible db -m file -a 'path=/lzmly2 state=directory' #在远程机器上创建文件夹
用来在远程机器上创建文件
  1. ansible db -m file -a 'path=/root/q.txt state=touch' #用来在远程机器上创建文件
创建软连接src是源地址,path是目标地址
  1. ansible db -m file -a 'path=/tmp/f src=/etc/fstab state=link' #创建软连接src是源地址,path是目标地址,state=hard是硬链接
用来删除文件或者文件夹
  1. ansible db -m file -a 'path=/tmp/f state=absent' #用来删除文件或者文件夹
(3)fetch模块

下载被控节点的文件

  1. dest 目的地址
    src 源地址 被管控机上的地址
    ansible web -m fetch -a 'src=/var/log/cron dest=/tmp' # 下载被控节点的文件,每台机器创建一个文件夹(以IP命名),并保留原来的目录结构

ansible(一)的更多相关文章

  1. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  2. 《Ansible权威指南》笔记(2)——Inventory配置

    四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...

  3. useful Ansible commands

    This article includes some useful Ansible commands. I will try to write blogs by English. You may wa ...

  4. 《Ansible权威指南》笔记(4)——Playbook

    七.Playbook1.语法特性如下:(1)"---"首行顶格开始(2)#号注释(3)缩进统一,不同的缩进代表不同的级别,缩进要对齐,空格和tab不能混用(4)区别大小写,键值对k ...

  5. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  6. 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令

    2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...

  7. 自动化运维工具ansible部署以及使用

    测试环境master 192.168.16.74webserver1 192.168.16.70webserver2 192.168.16.72安装ansiblerpm -Uvh http://ftp ...

  8. Ansible Ubuntu 安装部署

    一.安装: $ sudo apt-get install ansible 二.配置: a.基本配置 $ cd /etc/ansible/ $ sudo cp hosts hosts_back 备份一个 ...

  9. Ansible 模块命令介绍

    copy模块: 目的:把主控端/root目录下的a.sh文件拷贝到到指定节点上 命令:ansible 10.1.1.113 -m copy -a 'src=/root/a.sh dest=/tmp/' ...

  10. 用Vagrant和Ansible搭建持续交付平台

    这是一个关于Vagrant的学习系列,包含如下文章: Vagrant入门 创建自己的Vagrant box 用Vagrant搭建Jenkins构建环境 用Vagrant和Ansible搭建持续交付平台 ...

随机推荐

  1. Diffie-Hellman Key Exchange – A Non-Mathematician’s Explanation

    The Complete Diffie-Hellman Key Exchange Diagram The process begins when each side of the communicat ...

  2. Android如何获得系统版本

    如何获得Android系统版本 项目移植中,遇到需要区分不同系统版本的问题.于是查找相关方法如下: android.os.Build类提供了当前系统信息. 可用if (Build.VERSION.SD ...

  3. Matlab Tricks(二十九) —— 使用 deal 将多个输入赋值给多个输出

    deal:Distribute inputs to outputs: >> [id, name, data] = deal(123, 'zhang', randn(3)) 注意: [Y1, ...

  4. Java设计模式透析之 —— 单例(Singleton)

    写软件的时候经常需要用到打印日志功能,可以帮助你调试和定位问题,项目上线后还可以帮助你分析数据.但是Java原生带有的System.out.println()方法却很少在真正的项目开发中使用,甚至像f ...

  5. 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP

    原文 签署 Centennial Program Addendum,使用 Desktop Bridge 将 Win32 应用转制成 UWP 能上架 Windows 应用商店的并不一定必须是 UWP 应 ...

  6. python 教程 第二十一章、 扩展Python

    第二十一章. 扩展Python /* D:\Python27\Lib\Extest-1.0\Extest2.c */ #include <stdio.h> #include <std ...

  7. C#彩色艺术化二维码样式设计(仅说思路)

    原文:C#彩色艺术化二维码样式设计(仅说思路) 仅讲思路,想要源码的请绕道.   一.样式 1.先看各种二维码的样式吧: (1)最简单的样式--黑白样式,如下图: 图1  最平常见到的二维码样式(如果 ...

  8. C# IDisposable接口的使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. Win10 如何以管理员身份设置开机自启程序(2)

    原文:Win10 如何以管理员身份设置开机自启程序(2) 自己水平太菜,对Windows的权限问题一直不是特别了解.之前在<Win10 如何以管理员身份设置开机自启程序(1)>一文中介绍了 ...

  10. wpf 深度复制控件,打印控件

    原文:wpf 深度复制控件,打印控件 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.micr ...