技术-自动化-ansible-ansible学习笔记

Posted linux艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术-自动化-ansible-ansible学习笔记相关的知识,希望对你有一定的参考价值。

ansible简介

对管理主机的要求

Red Hat, Debian, CentOS, OS X, BSD等等各种版本 需要安装python2.6或者python2.7 不支持windows机器

对托管节点的要求

ansible使用ssh与托管节点通信 默认使用sftp,如果sftp不可以,可以在ansible.cfg配置文件中配置scp的方式。 托管节点需要安装python2.4以上版本。 如果python版本低于2.5,需要单独安装python-simplejson模块。

管理节点安装

  yum install ansible

配置文件

托管主机的文件列表

路径:/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 使用这个命令可以查看所有的模块


ansible常用模块

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

   ansible ip -m ping

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

   ansible ip -m command "date"

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.脚本执行

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

5.管理服务

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.管理定时任务

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-ansible学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 记学习笔 Maven自动导包 Auto Import

IntelliJ IDEA 记学习笔 Maven自动导包 Auto Import

新世纪五笔输入方案-Rime输入法

网易笔试题——计算机视觉_深度学习方向

mysql数据库笔试题,阿里一线架构师分享的技术图谱,进阶加薪全靠它

经典PHP笔试题