资讯专栏INFORMATION COLUMN

ansible基本使用

社区管理员 / 397人阅读

Ansible是一个自动化运维工具,可以实现批量配置,部署,命令等功能

安装

yum 安装

yum -y install ansible

pip安装

pip install ansible

配置路径

默认读取/etc/ansible/目录下的主机清单规则

主机清单

记录ansible需要执行操作的目标机器文件,默认读取/etc/ansible/hosts,一般通过 -i参数指定,也可以分类写到一个文件夹下

  • #开头为注释

  • 忽略空行

  • 组由[组名]定义

  • 主机名和域名都可以

  • 一个ip或域名可以是组的成员

  • 没有分组的主机写在任意的一个组的前面

连续IP
# 等价于 192.168.1.1 192.168.1.2 192.168.1.2 192.168.1.3 192.168.1.4等等192.168.1.[1:4]# 等价于 server1.example.com server2.example.com server3.example.com等等server[1:3].example.com
参数
192.168.1.1 ansible_ssh_user=root ansible_ssh_pass=root
常用参数
  • ansible_ssh_host 目标主机地址

  • ansible_ssh_port 目标主机端口,默认22

  • ansible_ssh_user 目标主机用户

  • ansible_ssh_pass 目标主机ssh密码

  • ansible_sudo_pass sudo密码

  • ansible_sudo_exe

  • ansible_connection 与主机的连接类型,比如:local,ssh或者paramiko

  • ansible_ssh_private_key_file 私钥地址

  • ansible_shell_type 目标系统的shell类型

  • ansible_python_interpreter python版本

别名
test1 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1 ansible_ssh_user=root    # 别名test1
主机组
[foo]192.168.1.1
192.168.2.1
主机组嵌套
[db]192.168.1.1[server]192.168.2.1[all:children]db
server
主机组参数
[test]name1 ansible_ssh_host=192.168.1.[1:3][test:vars]ansible_ssh_user=rootansible_ssh_pass="root"testvar="test"

模块

ansible的功能都是通过模块来完成的
ansible-doc -s <模块名>查看模块的参数
ansible-doc -l 查看所有模块

常用模块

参数中的free_form是各个模块的命令或args,并不是一个存在的参数

command

在目标主机上执行命令

  • 参数:

    • free_form 必选表在目标机器上执行的命令

    • chdir 在目标主机的哪里执行命令

    • creates 文件存在时就不执行此命令

    • removes 和creates相反存在时就执行

  • 例子:ansible test -m command -a “chdir=/var/log removes=kern.log cat kern.log” /var/log下kern.log存在就查看kern.log

shell

和command一样不过command不支持重定向等管道操作,shell会调用/bin/sh执行

  • 参数:

    • free_form: 执行的命令

    • chdir: 改变运行执行的目录

    • creates: 文件存在则不就不执行命令

    • executable: 改变命令说用的shell解释器,默认为/bin/sh

    • removes: 和creates相反存在时就执行

  • 例子:ansible test -m shell -a “cat /etc/hosts”

script

在目标主机上执行本地主机的脚本

  • 参数:

    • free_form: 需要执行的脚本路径

    • chdir: 执行脚本的目录

    • creates: 目标机器的文件存在则不执行

    • removes: 目标机器的文件存在则不执行

  • 例子: ansible test -m script -a “test.sh”

copy

复制本地文件或文件夹到目标主机上

  • 参数:

    • src: 指定需要copy的文件或目录

    • dest: 文件将被拷贝到目标主机的哪个目录中,dest为必须参数

    • content 不适用src时用此参数写入内容

    • force: 目标主机路径已经有文件且内容不相同时是否覆盖

    • backup: 目标主机已经有文件且内容不同时是否备份

    • owner: 拷贝到目标主机后的所有者

    • group: 拷贝到目标主机后的属组

    • mode: 拷贝到目标主机后的权限

  • 例子: ansible test -m copy -a “src=/root/test.sh dest=/tmp”

file

对目标主机的文件管理

  • 参数:

    • directory: 如果目录不存在,创建目录

    • file: 即使文件不存在,也不会被创建

    • link: 创建软连接

    • hard: 创建硬连接

    • touch: 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时

    • absent: 删除目录、文件或者取消链接文

    • path: 指定目标目录或文件

    • state:

    • src: 当state设置为link或者hard时,需要操作的源文件

    • force: 需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况下;另一种是目标连接已存在,需要先取消之前的软连接,有两个选项:yes|no

    • owner: 指定被操作文件的所有者,

    • group: 指定被操作文件的所属组

    • mode: 权限

    • recurse: 文件为目录时,递归目录

  • 例子:

    • 设置权限为777所属组为minikube所有者为:ansible test -m file -a “path=/tmp/test.sh mode=777 owner=minikube group=minikube”

    • 创建/etc/hosts的软连接到home目录:ansible test -m file -a “path=/root/hosts src=/etc/hosts state=link”

blockinfile

在指定的文件里修改一段文本

  • 参数:

    • path: 必须参数,指定要操作的文件

    • block: 指定要操作的一段文本

    • marker: ansibel默认修改时会添加一个以#开头标记,可以改为自定义

    • state: present为插入或者更新;absent删除

    • insertafter: 默认会将文本插入到指定的位置的后面

    • insertbefore: 默认会将文本插入到指定的位置的前面

    • backup: 是否在修改文件之前对文件进行备份。

    • create: 当要操作的文件并不存在时,是否创建对应的文件。

  • 例子:

    • 在目标主机的/tmp/test文件中插入ansible-test且标记内容为teststart:ansible localhost -m blockinfile -a “path=/tmp/test block=ansible-test marker=’#{mark}teststart’”

lineinfile

blockinfile相似不过是一行还可以使用正则表达式

  • 参数:

    • path: 必须参数,指定要操作的文件

    • line: 要指定的文本内容

    • regexp: 正则匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除

    • state: absent为删除,state的默认值为present

    • backrefs: 在使用正则匹配时如果没有匹配到默认会在文件的末尾插入要替换的文本,设置为yes则不会

    • insertafter: 默认会将文本插入到指定的位置的后面

    • insertbefore: 默认会将文本插入到指定的位置的前面

    • backup: 是否在修改文件之前对文件进行备份

    • create: 当要操作的文件并不存在时,是否创建对应的文件

  • 例子:

    • 将/tmp/test的文件中#kern开头行换成kern.* /var/log/kern.log:ansible localhost -m lineinfile -a ‘path=/tmp/test regexp=”^#kern” line=”kern.* /var/log/kern.log”‘

replace

文本替换模块

  • 参数:

    • path: 必须参数,指定要操作的文件,2.3版本之前,只能使用dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为path参数的别名使用。

    • regexp: 必须参数,指定一个python正则表达式,文件中与正则匹配的字符串将会被替换。

    • replace: 指定最终要替换成的字符串。

    • backup: 是否在修改文件之前对文件进行备份,最好设置为yes。

  • 例子:将/etc/test文件中所有的localhost换成FOO: ansible localhost -m replace -a ‘path=/tmp/test regexp=”localhost” replace=foo’

systemd

运行systemd相关的命令

  • 参数:

    • enabled: 是否设置为开机启动

    • name: systemd模块名字

    • state: 想要设置的状态,比如restartd重启started启动、stopped停止、reloaded重新加载

    • daemon_reload: 运行daemon-reload命令

    • daemon_reexec: 运行daemon_reexec命令

  • 例子:ansible test -m systemd -a “name=rsyslog state=restarted”

yum

yum包管理

  • 参数:

    • action: yum

    • conf_file yum的配置文件

    • disable_gpg_check 关闭gpg_check

    • disablerepo 不启用某个源

    • enablerepo 启用某个源

    • name 指定要安装的包,如果有多个版本需要指定版本,否则安装最新的包

    • state 安装:present,安装最新版:latest,卸载程序包:absent

  • 例子: 安装最新版psree命令:ansible localhost -m yum -a “name=psmisc state=latest”

cron

定时模块

  • 参数:

    • backup 如果设置,创建一个crontab备份

    • cron_file 如果指定, 使用这个文件cron.d,而不是单个用户crontab

    • day 日应该运行的工作( 1-31, *, */2, etc )

    • hour 小时 ( 0-23, *, */2, etc )

    • job 指明运行的命令是什么

    • minute 分钟( 0-59, *, */2, etc )

    • month 月( 1-12, *, */2, etc )

    • name 定时任务描述

    • reboot 任务在重启时运行,不建议使用,建议使用special_time

    • special_time 特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)

    • state 指定状态,默认prsent添加定时任务,absent删除定时任务

    • user 以哪个用户的身份执行

    • weekday 周 ( 0-6 for Sunday-Saturday, *, etc )

  • 例子:

    • 每天8点半执行cat /etc/hosts这个命令:ansible localhost -m cron -a “name=test minute=30 hour=8 day=* job=’cat /etc/hosts’”

    • 删除test这个cronjob:ansible localhost -m cron -a “name=test state=absent”

    • 重启时rm -rf /tmp命令: ansible test -m cron -a ‘name=”test” special_time=reboot job=”rm -rf /tmp”‘

执行命令

# ansible <主机> -m <模块> -a <模块参数>ansible <主机> -m shell -a "cat /etc/hosts"
指定某些机器执行

ansbile <主机组> -m <模块> -a <参数> –limit <主机> 指定执行主机
ansbile <主机组> -m <模块> -a <参数> –limit <!主机> 排除执行的主机
ansbile <主机组> -m <模块> -a <参数> –limit <主机1:主机2> 只在主机1和主机2中执行

一步一步的执行且确认

在执行 剧本的时候加上 –step,每执行一个任务就询问一次

ansible-playbook  -i inventories test.yaml --step

playbook

剧本就是一系列ansible命令组合类似shell脚本和shell命令

一个将内核日志输出到/var/log/kern.log的剧本

---- hosts: all                 # 要执行的主机组
  tasks:
  - name: 修改rsyslog配置文件 # 任务名字
    tags: rsyslog            # 任务标签
    lineinfile:              # 任务模块
       dest: /etc/rsyslog.conf       regexp: "{{ item.regexp }}"
       line: "{{ item.line }}"
    with_items:              # 循环执行
     - { regexp: '^#kern',line: 'kern.* /var/log/kern.log' }
     - { regexp: '^#\$ModLoad imklog',line: '$ModLoad imklog' }
     - { regexp: '^#\$ModLoad imjournal',line: '$ModLoad imjournal' }
  - name: 修改logrotate的syslog配置    shell: sed -i '1i\\/var\/log\/kern.log' /etc/logrotate.d/syslog    tags: logrotate  - name: 重启rsyslog服务    tags: rsyslog    systemd:
    &am           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127883.html

相关文章

  • 一些小团队的自动化运维实践经验

    摘要:行业内各巨头的自动化运维架构都各种功能各种酷炫,如下图,让人可望不可及。面对这么多问题,我就想啊,如何在低成本情况下实现自动化运维。自动扩缩容通过配置告警规则,调用相应就可以实现实战以上就是笔者关于自动化运维的一些实践。 行业内各巨头的自动化运维架构都各种功能各种酷炫,如下图,让人可望不可及。现在最终的样子大家都知道了,但问题是如何根据自己团队当前的情况一步步向那个目标演进?笔者所在团队,三...

    princekin 评论0 收藏0
  • ansible自动化部署(一)

    摘要:自动化部署最近因为工作需要学习了把这几天所学的东西做了个总结,和大家分享一下什么是能干什么是新出现的自动化运维工具,基于开发,集合了众多运维工具的优点,实现了批量系统配置批量程序部署批量运行命令等功能。 ansible自动化部署 最近因为工作需要学习了ansible,把这几天所学的东西做了个总结,和大家分享一下: 1、什么是ansible?ansible能干什么? ansible是新出...

    娣辩孩 评论0 收藏0
  • ansible2.0 playbook api运维应用

    摘要:写在前面是一个非常棒的运维工具,可以远程批量执行命令上传文件等自动化运维操作,由于要搞配置管理,初始化等批量操作,而自己对相对熟悉因此选择了。 写在前面: ansible是一个非常棒的运维工具,可以远程批量执行命令、上传文件等自动化运维操作,由于要搞配置管理,初始化等批量操作,而自己对ansible相对熟悉,因此选择了ansible playbook。不过在调用playbook api...

    dreamans 评论0 收藏0
  • ansible2.0 playbook api运维应用

    摘要:写在前面是一个非常棒的运维工具,可以远程批量执行命令上传文件等自动化运维操作,由于要搞配置管理,初始化等批量操作,而自己对相对熟悉因此选择了。 写在前面: ansible是一个非常棒的运维工具,可以远程批量执行命令、上传文件等自动化运维操作,由于要搞配置管理,初始化等批量操作,而自己对ansible相对熟悉,因此选择了ansible playbook。不过在调用playbook api...

    wangtdgoodluck 评论0 收藏0
  • 使用 SNMP 从网络硬件采集 Ansible facts

    摘要:比如你想对你所有的交换机来使用这个收集信息,但是你有一些交换机和一些华为交换机。问题就是华为不使用开放的,但是使用代替。假设对于我们有一个模块选项,它通过选项来确定是否是华为设备。 注:本文作者是 Patrick Ogenstad,原文是 Gathering Ansible facts from network devices using SNMP 注:这篇博客里面的文...

    FuisonDesign 评论0 收藏0
  • 初创公司如何实现 Ansible 多机房自动部署发布

    摘要:在只有少量服务器的情况下,大多数运维人员会选择手动更新,减少自动化部署发布的开发成本。五自动化部署发布示例简要说明下我们的项目如何使用实现了多个环境的自动化部署发布。 showImg(https://segmentfault.com/img/bVJEL6?w=500&h=250); 一、面临的问题 一个完整的程序开发流程少不了部署发布这个环节,而部署发布是一个重复的过程,最基本的操作包...

    Karuru 评论0 收藏0

发表评论

0条评论

社区管理员

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<