ansible学习笔记

一、ansible简介

ansible是基于python的开发的自动化运维工具。实现了批量系统配置、批量程序部署、批量运行命令等功能。
官方地址
官方文档
中文手册

二、对管理主机的要求

Red Hat, Debian, CentOS, OS X, BSD等等各种版本 需要安装python

三、对托管节点的要求

ansible使用ssh与托管节点通信 默认使用sftp,如果sftp不可以,可以在ansible.cfg配置文件中配置scp的方式。 托管节点需要安装python以上版本。

四、安装

1. 管理节点安装

  yum install ansible

2. 配置文件

配置文件详解
配置文件地址:/etc/ansible/ansible.cfg
inventory = /etc/ansible/hosts #托管主机的文件列表文件路径
remote_port = 8090 #托管主机的ssh默认端口

3. 托管主机的文件列表

路径:/etc/ansible/hosts
主机和组

[zu]          #方括号内是组名,可以操作一组.  
120.92.51.3   #组内ip列表

文件中的host后面可以跟参数

ansible_ssh_host
      将要连接的远程主机名.与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port
      ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user
      默认的 ssh 用户名

ansible_ssh_pass
      ssh 密码(这种方式并不安全,我们强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass
      sudo 密码(这种方式并不安全,我们强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
      sudo 命令路径(适用于1.8及以上版本)

ansible_connection
      与主机的连接类型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默认使用 paramiko.1.2 以后默认使用 'smart','smart' 方式会根据是否支持 ControlPersist, 来判断'ssh' 方式是否可行.

ansible_ssh_private_key_file
      ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_shell_type
      目标系统的shell类型.默认情况下,命令的执行使用 'sh' 语法,可设置为 'csh' 或 'fish'.

ansible_python_interpreter
      目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如  \*BSD, 或者 /usr/bin/python
      不是 2.X 版本的 Python.我们不使用 "/usr/bin/env" 机制,因为这要求远程用户的路径设置正确,且要求 "python" 可执行程序名不可为 python以外的名字(实际有可能名为python26).

      与 ansible_python_interpreter 的工作方式相同,可设定如 ruby 或 perl 的路径....

五、ansible常用模块和命令

ansible-doc -l 使用这个命令可以查看所有的模块

1. ansible常用模块

    1.ping测试是否连通管控主机
    命令示例:

   ansible ip -m ping

    2.可以执行常用shell命令 command模块 命令示例:

   ansible seek-nginx -m command -a "hostname"

    3.可以上传文件,在上传之前对文件进行备份

copy模块
    backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no 
    content:用于替代"src",可以直接设定指定文件的值 
    dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录 
    directory_mode:递归的设定目录的权限,默认为系统默认权限
    force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
    others:所有的file模块里的选项都可以在这里使用
    src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。 
    validate :The validation command to run before copying into place. The path to the file to validate is passed in via '%s' which must be present as in the visudo example below.
    使用示例:
      ansible test -m copy -a "src=/root/test dest=/tmp/ backup=yes force=no"

synchronize模块(本地和管控主机都需要安装rsync)
    使用rsync同步文件,其参数如下:
    archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
    checksum: 跳过检测sum值,默认关闭
    compress:是否开启压缩
    copy_links:复制链接文件,默认为no ,注意后面还有一个links参数
    delete: 删除不存在的文件,默认no
    dest:目录路径
    dest_port:默认使用的是ansible用来进行ssh连接的端口
    dirs:传速目录不进行递归,默认为no,即进行目录递归
    rsync_opts:rsync参数部分
    set_remote_user:主要用于/etc/ansible/hosts中定义或默认使用的用户与rsync使用的用户不同的情况
    mode: push或pull 模块,push模的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件
    使用示例:
     ansible test -m synchronize -a "src=/root/test2 dest=/tmp/"
       "changed": true, 为true为执行成功,changed为false时,为执行失败。执行失败的原因有一个是管控主机已经有相同的文件了。
    注意事项
       需要在关机主机和管控主机安装rsync才可以使用

    4.脚本执行

2. script模块
    在管控主机执行本地的脚本    
      使用示例:
        ansible ip -m script -a 'ansible_test.sh'

    5.管理服务

3. servcei模块
    该模块包含如下选项: 
    arguments:给命令行提供一些选项 
    enabled:是否开机启动 yes|no
    name:必选项,服务名称 
    pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
    runlevel:运行级别
    sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
    state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
    使用示例
    ansible test -m service -a "name=nginx enabled=no"

    6.管理定时任务

4.cron模块
    用于管理计划任务包含如下选项: 
    backup:对远程主机上的原任务计划内容修改之前做备份 
    cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划 
    day:日(1-31,*,*/2,……) 
    hour:小时(0-23,*,*/2,……)  
    minute:分钟(0-59,*,*/2,……) 
    month:月(1-12,*,*/2,……) 
    weekday:周(0-7,*,……)
    job:要执行的任务,依赖于state=present 
    name:该任务的描述 
    special_time:指定什么时候执行,参数:reboot,yearly,annually,monthly,weekly,daily,hourly 
    state:确认该任务计划是创建还是删除,默认为添加。absent选项为删除。
        注意:只能删除cron里面带有#Ansible名字标识的。
         如果name名字和原来cron里面相同了,则会覆盖之前的定时任务
    user:以哪个用户的身份执行
    使用示例
    添加定时任务
     ansible ip -m cron -a 'name="test" minute="33" hour="15" day="14" month="*" weekday="*" job="echo "1">/tmp/1" backup="True"'
     删除定时任务
     ansible ip -m cron -a 'name="test" state="absent"'

六、ansible常用功能

1.批量添加ssh key

vim  /etc/ansible/hosts#添加需要管理的业务主机IP

ansible all -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub')}}' path='/root/.ssh/authorized_keys' manage_dir=no"--ask-pass -c paramiko

#因为密码都一样,所以只需要输入一次密码即可,如果密码不同  需要自定义

说明

user=root    #将秘钥推送到远程主机的哪个用户下
key='{{ lookup('file','/root/.ssh/id_rsa.pub')}}'#指定要推送的秘钥文件所在的路径
path='/root/.ssh/authorized_keys'#将秘钥推送到远程主机的哪个目录下并重命名
manage_dir=no       #指定模块是否应该管理authorized_keys文件所在的目录,如果设置为yes,模块会创建目录,以及设置一个已存在目录的拥有者和权限。如果通过 path 选项,重新指定了一个 authorized key 文件所在目录,那么应该将该选项设置为 no
exclusive [default: no]: #是否移除 authorized_keys 文件中其它非指定 key
state (Choices: present, absent) [Default: present]: #present 添加指定 key 到 authorized_keys 文件中;absent 从 authorized_keys 文件中移除指定 key
Previous Post

vim学习笔记

Next Post

ffmpeg常用命令

Related Posts