ansible Linux 项目发布 -安装 -配置 -命令模块

ansible

  • Ansible通过SSH协议管理计算机

控制节点要求

  • Ansible可以从装有Python 2(2.7版)或Python 3(3.5版及更高版本)的任何计算机上运行。控制节点不支持Windows。
  • 这包括Red Hat,Debian,CentOS,macOS,任何BSD等。

受管节点要求

  • 在受管节点上,您需要一种通信方式,通常是ssh。默认情况下,它使用sftp。如果不可用,可以切换到scp in ansible.cfg。您还需要Python 2(2.6版或更高版本)或Python 3(3.5版或更高版本)

一. 安装:

  • CentOS 安装

    1. 安装 epel 源

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

      yum install -y ansible
      
  • Ubuntu 通过Apt 安装

    • 在此处的PPA中获得Ubuntu版本。

      https://launchpad.net/~ansible/+archive/ubuntu/ansible

    • 安装

      $ sudo apt update
      $ sudo apt install software-properties-common
      $ sudo apt-add-repository --yes --update ppa:ansible/ansible
      $ sudo apt install ansible
      

二. 配置:

  1. 常用命令

    Usage: ansible <host-pattern> [options]
    -a MODULE_ARGS # 模块参数
    -C, --check #不做任何改变,但是会执行
    -f FORKS, --forks=FORKS # 用来指定并发
    --list-hosts  #列出主机列表
    -m MODULE_NAME #模块 名
    --syntax-check #语法检查
    -k, --ask-pass #输入密码
    
    
  2. ssh 生成密钥

    ssh-keygen   # 生成密钥对
    ssh-copy-id 100.0.0.12  # 将密钥对复制到远程机器
    
  3. 编辑 andible hosts 文件

    1. 查看 ansible所生成的文件
    rpm -ql ansible   
    rpm -ql ansible | more
    
    1. 编辑
    etc/andible/hosts
    
    1. 添加管控机IP地址
    [web]  ## 分组
    11.0.0.12
    [db]
    11.0.0.11
    [Server]
    11.0.0.[12:13:14]
    # 11.0.0.13
    # 11.0.0.14
    [check]
    11.0.0.11
    

三. 命令

1. 查看管理机是否畅通

  • host-pattern 格式
ansible 10.0.0.143 -m ping  # 单个主机
ansible 10.0.0.143,10.0.0.144 -m ping  #  多个主机,用逗号做分割
ansible all -m ping  # 全部主机,用all表示
ansible web -m ping  # 单个组
ansible web,db -m ping  # 多个组
ansible "web:&db" -m ping   # 交集 ‘db:&web’
ansible 'web:!db' -m ping  # 差集 ‘web:!db’
ansible 'web:db' -m ping  # 并集  web,db 或者 ‘web:db’

2. 查看模块的帮助信息

  • 命令 ansible-doc

ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-j json的方式返回模块内容
-l 以列表的形式返回模块内容
-s, --snippet 以片段式的方式显示模块的帮助信息
# 直接显示模块的全部信息
ansible-doc -l |wc -l 统计ansible提供的模块

四. 命令相关模块

1. command (-m)

chdir # 切换目录
creates # 如果存在,则不执行后面的命令
removes # 如果存在,则执行后面的命令
ansible web -a 'pwd'
ansible web -a 'ls /tmp'
ansible web -a 'creates=/tmp mdkir /data' #被忽略,因为/tmp存在
ansible web -a 'creates=/tmp2 mkdir /data' #被执行,因为/tmp2目录不存在
ansible web -a 'removes=/tmp2 mkdir /data2' #被忽略,因为/tmp2目录不存在
ansible web -a 'removes=/tmp mkdir /data2' # 被执行,因为/tmp存在

  • 查看用户

    tail -1 /etc/passwd
    tail -1 /etc/shadow
    id alex
    echo '123' |passwd --stdin alex # 设置密码,不需要交互
    

2. shell

ansible db -m shell -a 'echo "1234"|passwd --stdin alex'
ansible 10.0.0.143 -m shell -a "bash a.sh" # 执行脚本
ansible 10.0.0.143 -m shell -a "/root/a.sh"
ansible 10.0.0.143 -m shell -a "/root/a.py" # 执行python文件

3. script

ansible db -m script -a "/root/b.sh" # 执行管控机器上的文件
ansible web -m script -a "creates=/root/a.py /root/b.sh" # 判断被管控机器上的文件是否存在 ,如果存在,就跳过
ansible web -m script -a "removes=/root/a.py /root/b.sh" # 判断被管控机器上的文件是否存在 ,如果存在,就执行	

4. copy

backup # 备份
content # 内容
dest # 目的地址
group # 文件的属组
mode #文件的权限  R 4 W 2 X 1
owner # 文件的属主
src #文件的源文件地址
ansible web -m copy -a "dest=/tmp/f src=/etc/fstab" #复制单独文件
ansible web -m copy -a "src=/etc/init.d dest=/tmp"  #复制文件目录
ansible web -m copy -a "src=/etc/init.d/ dest=/tmp" # 复制文件夹内的所有的文件
ansible db -m copy -a "dest=/tmp/b.sh src=/root/b.sh mode=644 owner=alex" # 复制文件并修改权限和属主
ansible db -m copy -a "src=/etc/init.d dest=/tmp owner=alex" # 修改文件夹的权限或者属主属组时,文件夹内的所有文件的权限也会被修改
# 通过md5来做校验
ansible db -m copy -a "dest=/tmp/b.sh src=/root/b.sh mode=644 owner=alex backup=yes" # 复制文件并将原来的文件做备份
ansible db -m copy -a "dest=/tmp/c.txt content='大弦嘈嘈如急雨,小弦切切如私语'" # 直接往文件里面写入文件,是直接覆盖写入,慎用

5. file

access_time # 创建时间
group # 属组
mode # 权限
owner # 属主
path # 文件的路径
src # 源地址,只有在软连接和硬链接的时候才会使用
state # directory 目录 touch 文件  link 软连接 hard 硬链接 absent 删除
ansible db -m file -a "path=/alex state=directory" # 创建一个目录
ansible db -m file -a "path=/root/alex.txt state=touch" # 创建一个文件
ansible db -m file -a "src=/root/q.txt path=/tmp/q state=link" # 创建软连接,源地址是本机上的文件地址
ansible db -m file -a "path=/tmp/q state=absent" # 删除文件或者文件夹


  • 补充

    软连接  快捷方式          会跟源文件改变     ln -s 
    硬链接  硬盘的重复应用      会跟源文件改变    ln
    复制   复制了一份           不会跟源文件改变   cp
    

6. fetch

dest #目标地址
src # 源地址
ansible db -m fetch -a "dest=/tmp src=/var/log/cron" # 复制远程被管控机器的文件道管控机器上,以被管控机的ip为目录,并保留原来的目录结构(src=必须是文件, 不能是目录)
posted @ 2019-11-17 22:42  拐弯  阅读(302)  评论(0编辑  收藏  举报