先来看一下ansible架构图:

一、官网的语法简单介绍

#选择的主机组

- hosts: webservers
#这个是变量
  vars:
    http_port: 80
    max_clients: 200
  tasks:
#利用yum模块来操作
  - name: ensure apache is at the latest version
    yum: pkg=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
#触发重启服务器(只要上面的httpd.conf文件变化了,就触发handlers中的restart apache)
    notify:
    - restart apache
  - name: ensure apache is running
    service: name=httpd state=started
#这里的restart apache 和上面的触发是配对的。这就是handlers的作用。相当于tag
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

二、常用模块介绍

1、

copy:复制本地文件到远程主机
template:复制本地文件到远程主机但是他可以在本地文件中调用变量,使用template模块可以传递变量,copy模块则不能

示例如下:

2、vars_files参数

变量设置和when示例:

参考文档:http://tshare365.com/archives/1033.html

------------------------------------------------------------------------------------------------

copy:复制本地文件到远程主机 template:复制本地文件到远程主机但是他可以在本地文件中调用变量

----------------------

raw这东西,咋用的呢,其实前面说的command,shell能干的活,raw都能干 raw最拿手的好活,就是,如果你有的机器是没有装python,或者说你的是python2.4以下,木有装python-simplejson的,用它可以装python,装python-simplejson raw还有一个拿手好戏,就是你的有些机器压根就装不了python,OK,不用装了,直接用raw吧,也可以玩ansible

ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

ansible db35 -m copy  -a 'src=/root/.ssh/id_rsa.pub dest=/root'  --ask-pass -c paramiko

ansible db35 -m shell -a 'cat /root/id_rsa.pub >> /root/.ssh/authorized_keys && rm -f /root/id_rsa.pub'  --ask-pass -c paramiko 可同时执行多个命令

ansible db35:db36  -m file  -a 'dest=/root/id_rsa.pub state=absent'  用ansible删除一个文件

使用ansible内置的密钥管理模块进行设置(一条命令搞定)

ssh-keygen -t rsa 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

ansible基于ssh连接inventory中指定的远程主机时还可以通过参数指定其交互方式常用的参数如下所示:(修改/etc/ansible/hosts )

ansible_ssh_host   # 要连接的主机名

ansible_ssh_port   # 端口号默认是22

ansible_ssh_user   # ssh连接时默认使用的用户名

ansible_ssh_pass   # ssh连接时的密码

ansible_sudo_pass  # 使用sudo连接用户是的密码

ansible_ssh_private_key_file # 秘钥文件如果不想使用ssh-agent管理时可以使用此选项

ansible_shell_type # shell的类型默认sh

Ansible 命令参数介绍

Usage: ansible <host-pattern> [options]

Options:

-m MODULE_NAME, --module-name=MODULE_NAME 要执行的模块,默认为command

-a MODULE_ARGS, --args=MODULE_ARGS 模块的参数

-u REMOTE_USER, --user=REMOTE_USER ssh 连接的用户名,默认用root,ansible.cfg 中可以配置

-k, --ask-pass 提示输入ssh 登录密码,当使用密码验证登录的时候用

-s, --sudo sudo 运行

-U SUDO_USER, --sudo-user=SUDO_USER sudo 到哪个用户,默认为root

-K, --ask-sudo-pass 提示输入sudo 密码,当不是NOPASSWD 模式时使用

-B SECONDS, --background=SECONDS run asynchronously, failing after X seconds(default=N/A)

-P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using -B (default=15)

-C, --check 只是测试一下会改变什么内容,不会真正去执行

-c CONNECTION 连接类型(default=smart)

-f FORKS, --forks=FORKS fork 多少个进程并发处理,默认5

-i INVENTORY, --inventory-file=INVENTORY 指定hosts 文件路径,默认default=/etc/ansible/hosts

-l SUBSET, --limit=SUBSET 指定一个pattern,对<host_pattern>已经匹配的主机中再过滤一次 --list-hosts 只打印有哪些主机会执行这个playbook 文件,不是实际执行该playboo

-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/

-o, --one-line 压缩输出,摘要输出 --private-key=PRIVATE_KEY_FILE 私钥路径

-T TIMEOUT, --timeout=TIMEOUT ssh 连接超时时间,默认10 秒

-t TREE, --tree=TREE 日志输出到该目录,日志文件名会以主机名命名

-v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging)

command模块:ansible 默认使用的module,这个模块可以运行远程权限范围所有的shell命令,但并不支持shell 变量和管道等。

script模块:功能是在远程主机执行主控端存储的shell脚本文件,相当于scp+shell组合

shell模块:功能是执行远程主机的shell脚本文件。

使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用;
但是我们自己定义在.bashrc/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;

1) 如果待执行的语句少,可以直接写在一句话中:

ansible myservers  -a ". .bash_profile;ps -fe |grep sa_q" -m shell

2) 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;

command 和shell 模块关注命令或者脚本执行后返回值,如果命令成功执行返回值不是0 的情况 下,可以使用以下方法 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand || /bin/true 或者 tasks: - name: run this command and ignore the result shell: /usr/bin/somecommand ignore_errors: True

file ## 设置文件的属性

相关选项如下:

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

group:定义文件/目录的属组 mode:定义文件/目录的权限

owner:定义文件/目录的属主

path:必选项,定义文件/目录的路径

recurse:递归设置文件的属性,只对目录有效

src:被链接的源文件路径,只应用于state=link的情况

dest:被链接到的路径,只应用于state=link的情况

state:

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

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

link:创建软链接

hard:创建硬链接

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

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

################################

自定义变量  在 yaml 中可以使用vars关键字来定义变量  vars:  var_name: value

#############################

变量的引用  {{ var_name }}

-------------------

在命令行使用变量。使用-e参数,就OK了,'uservar=lixc'就是楼主在web.yml里面定义的romote_user

ansible-playbook item.yml -e 'user=jia' --tags stopi

--------------------------

- name: test to see if selinux is running

command: getenforce

register: sestatus

changed_when: false

运行getenforce来检测selinux是否在运行状态,"changed_when:false"作用为ansible-playbook时最后一行不记录命令运行结果的changed状态,即changed为False (不加1)

...ok=2    changed=0    unreachable=0    failed=0

来自:https://github.com/ansible/ansible-examples/blob/master/lamp_haproxy/roles/common/tasks/main.yml

ansible随记的更多相关文章

  1. 【Ansible】记一次技术博客害死人的经历——ansible模板变量注入探究

    风和日丽,夏天的北京湿热并举,睁不开的眼睛里,横竖都看着是“吃人”. 带薪学习的日子不好过,要在几天内迅速掌握导师下发要求学习的技能,看着以前一起蹲IT坑的同事人来人往,用隔壁同性黄同学的话来说,就是 ...

  2. 001_记一次ansible api二次开发遇到的小问题

    在某次关于发布系统的项目中,需要调用ansible来发布任务,其中一段代码是初始化ansible的连接,并传入一个source(目标机器)的值,代码段如下: from .ansible_api imp ...

  3. 记一次容器内执行ansible命令卡住

    1.由来 最近在使用kylin_v10系统,发现当在此系统下运行的容器内执行#ansible localhost -m setup 命令会卡住不动,于是和同事一起经过如下排查最终找到解决问题的办法. ...

  4. 记一次优化ansible inventory的小例子

    起因: 阿里云新扩容一批机器,要对上面的flume配置做修改 之前的inventory是这样子的 [user@vip10-ali-tj-console host_vars]$ sdiff vip10- ...

  5. Ansible安装及配置

    ansible分为以下几个部份: Ansible:核心引擎 Modules:包括 Ansible 自带的核心模块(core modules)及自定义模块 (custom modules): 核心模块: ...

  6. 3、Ansible playbooks(Hosts、Users、tasks、handlers、变量、条件测试(when、迭代)、templates)

    Ansible playbooks playbook是由一个或多个“play”组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲 ...

  7. Ansible 小手册系列 十七(特性模块)

    异步操作和轮询 --- # Requires ansible 1.8+ - name: 'YUM - fire and forget task' yum: name=docker-io state=i ...

  8. Ansible 小手册系列 十三(Jinja2)

    用于playbook中的jinja 2过滤器 更改数据格式,其结果是字符串 {{ some_variable | to_json }} {{ some_variable | to_yaml }} 对于 ...

  9. 通过ansible自动化部署zabbix应用

    zabbix在实际的应用中,可能需要监控的主机非常多,而每个主机的操作系统类型.版本也都不尽相同,在这种环境下,通过手动安装zabbix的agent端已经不现实了,此时就需要借助自动化工具完成zabb ...

随机推荐

  1. 消息中间件 ActiveMQ的简单使用

    一.AactiveMQ的下载和安装 1. 下载ActiveMQ 地址:http://activemq.apache.org/activemq-5152-release.html 我这里下载的是wind ...

  2. bisect维持已排序的序列

    如下: import bisect # 用来处理已排序的序列,用来维持已排序的序列,升序 # 基于二分查找 li = [] bisect.insort(li, 2) bisect.insort(li, ...

  3. 用7z.exe 压缩整个文件夹里的内容

    以下是批处理中的内容: 7z.exe a -tzip zmv9netSrc.zip "D:\IE收藏夹备份\*"pause7z.exe a -tzip zmv9netSrc.zip ...

  4. Linux系统管理员非常使用的几款工具推荐

    1. ExplainShell.com 命令解释 对于Linux用户来说每天都会写各种命令和脚本,那么你可以使用这个网站工具来查看命令式如何工作的,这样可以避免不必要的错误出现:也是一个很好的学习命令 ...

  5. POJ 1182 食物链(并查集的使用)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 81915   Accepted: 24462 Description ...

  6. [UE4]动态数组:TArray容器

    为什么使用UE4提供的容器类? 如果你用过C++的STL库,你就知道STL提供了各种各样的容器/数据结构,使得你对处理很多数据的时候非常快捷高效.UE4同样也提供了类似的库,库里面的类型是以T开头的, ...

  7. LightGBM优势总结

    效率和内存上的提升 1) 在训练决策树计算切分点的增益时,xgboost采用预排序,即需要对每个样本的切分位置都要计算一遍,所以时间复杂度是O(#data). 而LightGBM则是将样本离散化为直方 ...

  8. Ps操作技巧(快捷键大全)

    一.工具箱(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取) 矩形.椭圆选框工具 [M] 移动工具 [V] 套索.多边形套索.磁性套索 [L] 魔棒工具 [W] 裁剪工具 [C] 切片工 ...

  9. SDL播放音频的时候发现SDL_OpenAudioDevice打开一直失败

    1:在使用SDL播放音频的时候发现SDL_OpenAudioDevice打开一直失败,导致SDL不能进入回调函数. 使用SDL_GetError()打印错误提示XAudio2: XAudio2Crea ...

  10. Windows Event 事件

    事件对象就像一个开关:它只有两种状态(开和关). 开状态:我们称其为“有信号” 关状态:我们称其为“无信号” 可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是“无信号”就让该线程睡 ...