Ansible常用模块命令

一、安装ansible

yum install epel-release

yum install ansible

二、配置文件配置

vi /etc/ansible/ansible.cfg (主要设置一些ansible初始化的信息,比如日志存放路径、模块、插件等配置信息)

[defaults]

inventory = /etc/ansible/hosts

library = /usr/share/ansible

sudo_user = root  (默认远程执行命令的用户)

remote_port = 22

fork = 5

host_key_checking = False

log_path = /var/log/ansible.log

module_name = command

roles_path = /etc/ansible/roles

deprecation_warnings = False

vi /etc/ansible/hosts  (机器清单,进行分组管理)

[tomcat]

192.168.16.192

192.168.16.193

[nginx]

app1 ansible_ssh_host=192.168.16.190 ansible_ssh_pass="2039"

app2 ansible_ssh_host=192.168.16.191 sudo_user=”ald” ansible_ssh_pass="2039"

(其他组命名规则查看配置文件例子)

[nginx]组使用的是明文密码认证,一般都使用密钥登陆,生产环境用密钥

三、常用模块命令

l  ansible命令常用指令

-m指定模块

-a 指定模块的命令。默认是command模块,可以省略

-B 指定ansible后台运行超时时间

-C 测试运行效果,而不是正在运行

-f 指定使用的并行进程的数量

-i 指定inventory/hosts文件,默认/etc/ansiable/hosts文件

--limit=xxx.xxx.xxx.xxx 限制对某个ip或者网段或者组执行

--list-hosts 显示将要执行命令的主机

l  ansible-doc 命令常用指令  (显示ansiable模块的帮助文档)

           -M --module-path=/xxx/xxx  查询模块 默认是/usr/share/ansible/

-l  --list          显示已存在的所有模块

-s  command     显示playbook制定模块的用法,类似 man 命令

l  ansible-galaxy 下载第三方模块指令,类似yum、pip、easy_install这样的命令

ansible-galaxy install <module_name>

l  ansible-playbook命令常用指令 (和ansible类似)

--syntax-check  [yaml文件]         语法检测

-t TAGS    只允许指定的tags标签任务,多个以 , 分开

--skip-tags=SKIP_TAGS   跳过指定的标签

--start-at-task=START_AT   从哪个任务后执行

l  ansible-pull 命令常用指令

l  ansible-vault 命令常用指令 (对playbook文件进行加密/解密)

playbook文件在执行时,需要加上 –ask-vault-pass参数,同样需要输入密码后才能正常执行。

============================================================

1、 copy——拷贝模块   (用于将本地或远程机器上的文件拷贝到远程主机上)

ansible all –m copy -a “src=/xxx/xxx dest=/yyy/yyy owner=root group=root mode=644 force=yes/no backup=yes/no”

解释:将src 文件/目录复制到远程dest上,所有者/组为root 权限为644,force为是否强制替换,backup为替换前是否需要备份远程远文件

2、 raw——命令模块 (和command、shell类似)

3、 yum——安装模块 (安装程序)

ansible all –m yum –a “name=httpd state=present”

解释:安装httpd程序,state可以是present、latest、installed表示安装程序,absent、removed表示卸载程序

4、 file——文件模块 (文件属性修改)

ansible all –m file –a “src=/xxx/xxx/1 dest=/yyy/1 state=link owner=alad group=alad mode=777”

ansible develop -m file -a "path=/xxx/dir recurse=yes owner=root group=alad mode=644"

解释:1、将src的文件软连接到dest目录下,并修改所有者/组和权限

2、将path路径的目录递归形式设置所有者和权限

*、state还可以是directory:如果目录不存在,创建目录

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

hard:创建硬链接

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

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

5、 cron——计划任务模块 (计划任务crontab)

ansible develop -m cron -a "name='show time' minute=*/1 hour=* day=* month=* weekday=* job='/bin/date'"

ansible develop -m cron -a "name='show time' state=absent"

解释:1、创建一个每分钟显示时间的计划任务

2、删除名为show time这个计划任务

6、 group——组模块(用户组)

ansible all-m group -a "name=develop"

解释:在所有主机上创建一个develop的组 ,state=absent表示删除该组

7、 user——用户模块(用户)

ansible develop -m user -a "name=harlan groups=root password=-1vFO89dP6qyK"

ansible develop -m user -a "name=harlan state=absent remove=yes"

解释:1、在所有主机上创建harlan用户,并将其添加到root组,密码是经过hash加密后的,明文密码会被哈希,所以先填入hash后的密码即可

可用此命令hash密码  openssl passwd -salt -1 "123456"

2、删除harlan用户。Remove表示是否删除用户的同时删除家目录

8、 service——服务模块(服务状态)

ansible develop -m service -a "name=nginx state=running"

ansible develop -m service -a "name=nginx state=restarted enabled=yes"

解释:1、无论服务处在什么状态,最后都是将服务状态设置为启动,当服务正在运行的时候,显示为changed为false,state显示为状态,表示为正在运行;当服务停止的时候,显示为changed为true,表示这个时候将服务进行了启动,状态为启动

2、表示重启nginx并且将nginx设置为开机自启动,state还有staeted、reloaded、stoped值

9、 script——脚本模块(运行脚本)

ansible develop -m script -a "/root/a.sh"

解释:在develop主机上运行当前服务器上的a.sh脚本

10、get_url——下载url上指定文件(类似wget)

ansible develop -m get_url -a "url=http://file.alavening.com/alading_file/head_img/1526900421976.jpg dest=/home/ owner=alad group=alad mode=644"

解释:将url上的图片下载到dest目的目录上,并且设置相应的所有者/组和权限。

11、synchronize——同步目录(默认推送,mode=pull为拉取)

ansible develop -m synchronize -a "src=/home/test/ dest=/home/test compress=yes delete=yes"

ansible develop -m synchronize -a "src=/home/test/ dest=/home/test compress=yes mode=pull"

解释:1、将src下的文件同步到dest上,delete=yes表示以src 目录为准镜像同步。

2、拉取远程src上的目录文件到本地dest上

12、template——文档内变量的替换的模块

ansible develop –m template –a ‘src=/mytemplates/foo.j2 dest=/etc/file.conf mode="u=rw,g=r,o=r"’

解释:将src上foo.j2的变量模版复制到dest上。Template适合用playbook编写 ,通过变量然后拷贝到远程主机。

可以参考:https://www.cnblogs.com/jsonhc/p/7895399.html

13、fetch——从远程主机下载文件(不能拉取目录)

ansible develop -m fetch -a "src=/home/test/xxx dest=/home/ flat=yes"

解释:将远程xxx文件拉取到本地home目录下,目录结构会是dest路径+远程主机名+src,假如远程主机名为develop,拉取的xxx文件在本地的/home/develop/home/test目录。如果需要指定拉取到某目录下 加个flat=yes的参数即可。

14、unarchive——解压文件

ansible develop -m unarchive -a "src=/root/apache-tomcat-7.0.85.tar.gz dest=/home/test owner=alad group=alad mode=755"

ansible develop -m unarchive -a "src=/home/alad/ansible/elk/logstash-6.2.4.tar.gz dest=/home/test remote_src=yes"

ansible develop -m unarchive -a "src=http://mirrors.linuxeye.com/oneinstack-full.tar.gz dest=/home/test remote_src=yes"

解释:将本地的tomcat压缩包解压到远程主机dest目录下,并修改其权限和所有者/组,remote_src=yes 表示解压远程主机已有的压缩包,src为url表示下载此包到远程主机dest目录进行解压缩后,并删除压缩包源文件

15、command和shell——linux命令模块

shell和command的区别:shell模块可以特殊字符,而command是不支持

简单说:command运行的命令中无法使用变量,管道。如果需要使用管道、变量,请使用raw模块,或者shell模块。

16、setup——获取主机信息

ansible develop -m setup

ansible develop -m setup -a 'filter=ansible_*_mb'

解释:1、显示系统所有信息

2、通常配合filter进行过滤来获取主机信息,(例子是显示内存信息)

17、assemble——配置文件组装发送到远程主机

ansible test -m assemble -a "src=/root/test dest=/root/ansible/fileone mode=777 remote_src=False delimiter='========'"

解释:将src test目录下所有文件(不含test子目录内容)的内容发送到dest fileone文件中,remote_src默认为Ture表示src为远程主机上的路径,False为ansible控制端的路径,delimiter为文件之间内容分隔符。

四、PlayBook语法和结构

Playbook需要7个文件夹,如ansible安装nginx,则需要在/etc/ansible/roles目录下建立以下文件夹。

mkdir -pv nginx/{default,tasks,vars,meta,handlers,templates,files}

对于Ansible,几乎每个YAML文件都以一个列表开始。列表中的每个项目都是键/值对列表,通常称为“散列”或“字典”。所以,我们需要知道如何在YAML中编写列表和字典。

YAML还有一个小小的怪癖。所有YAML文件(无论它们是否与Ansible相关联)都可以选择开始---和结束---.。这是YAML格式的一部分,并指示文档的开始和结束。

列表中的所有成员都是以相同的缩进级别开头的行(短划线和空格):"- "

例如以下例子:

第一次的话都会运行,后边如果copy的文件内容发生改变就会触发 notify ,然后会直接执行 handlers 的内容( 这里notify后边的事件就都不会执行了 )。

五、        template模块jinja2语法

A:template:使用了Jinjia2格式作为文件模版,进行文档内变量的替换的模块。相当于copy,将jinja2的文件模板理解并执行,转化为各个主机间的对应值。

如:template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

http.conf.j2必须是完整的文件内容,因为这是覆盖操作,而非只选择性远程主机替换变量,dest要指定文件名,如果是目录就相当于copy了http.conf.j2到远程目录下,不是我们要的结果。

B:when语句:在tasks中使用,Jinja2的语法格式

- name: start nginx service

shell: systemctl start nginx.service

 when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"

当系统为 centos 7的时候执行sysctemctl命令,否则不执行

C:循环:迭代,需要重复执行的任务

变量名为item,而with_item为要迭代的元素。如果某个任务出错,后面不执行

- name: install packages

yum: name={{ item }} state=latest

with_items:

- httpd

- php

这是基于字符串列表给出元素示例

- name: create users

user: name={{ item.name }} group={{ item.group }} state=present

with_items:

- {name: 'userx1', group: 'groupx1'}

- {name: 'userx2', group: 'groupx2'}

这是基于字典列表给元素示例:item.name  . 后边的表示键

Ansible常用模块命令的更多相关文章

  1. Ansible常用模块及API

    Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel ...

  2. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  3. Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...

  4. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...

  5. ansible常用模块入门

    常用模块有以下几个 command copy shell crond yum service setup 1.command模块 ansible george -m command -a " ...

  6. Ansible常用模块基本操作

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提 ...

  7. Ansible 常用模块详解

    经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...

  8. ansible常用模块详解(三)

    1.模块介绍 明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量. 1.1 模块的使用方 ...

  9. Linux之ansible 常用模块

    目的 代码发布系统 代码发布:把本地的代码通过某些方式弄到线上,可以供别人访问 部署 前戏 ansible 批量在远程主机上执行命令 puppet ruby ansible saltstack pyt ...

随机推荐

  1. TCP建立连接的三次握手和TCP连接断开的四次挥手

    1. TCP建立连接的3次握手 2. TCP断开连接的四次挥手 [注意]中断连接端可以是Client端,也可以是Server端. 图3—Client端主动发起关闭连接请求 1. 假设Client端主动 ...

  2. VUE的使用方法

    vueInit: function() { var _this = this; this.vue = new Vue({ el: '#pa', data: { //存放初始化数据 sourceData ...

  3. pthread访问调用信号线程的掩码(pthread_sigmask )

    掩码: 信号掩码 在POSIX下,每个进程有一个信号掩码(signal mask).简单地说,信号掩码是一个"位图",其中每一位都对应着一种信号.如果位图中的某一位为1,就表示在执 ...

  4. Spring Boot 入门之消息中间件篇(五)

    原文地址:Spring Boot 入门之消息中间件篇(五) 博客地址:http://www.extlight.com 一.前言 在消息中间件中有 2 个重要的概念:消息代理和目的地.当消息发送者发送消 ...

  5. emacs之配置php

    php-setting.el (require 'php-mode) 以后丰富

  6. 黄聪:360、chrome开发插件扩展如何跨域调用其他网站的信息并且显示在扩展、tab中的api

    chrome插件提供了查找tab的api chrome.tabs.get(integer tabId, function callback) 但是出于安全的考虑,tab的属性中没有document 因 ...

  7. 编译sass,遇到报错error style.scss (Line 3: Invalid GBK character "\xE5")

    今天学习sass,写了一行中文注释,结果却遇到了报错: cmd.exe /D /C call C:/Ruby23-x64/bin/scss.bat --no-cache --update style. ...

  8. Java 将指定字符串连接到此字符串的结尾 concat()

    Java 手册 concat public String concat(String str) 将指定字符串连接到此字符串的结尾. 如果参数字符串的长度为 0,则返回此 String 对象.否则,创建 ...

  9. Bootstrap-CL:略缩图

    ylbtech-Bootstrap-CL:略缩图 1.返回顶部 1. Bootstrap 缩略图 本章将讲解 Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstr ...

  10. Bootstrap-Plugin:下拉菜单(Dropdown)插件

    ylbtech-Bootstrap-Plugin:下拉菜单(Dropdown)插件 1.返回顶部 1. Bootstrap 下拉菜单(Dropdown)插件 Bootstrap 下拉菜单 这一章讲解了 ...