先来看一下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. ShareMemory

    项目地址 :  https://github.com/kelin-xycs/ShareMemory ShareMemory 一个用 C# 实现的 No Sql 数据库 , 也可以说是 分布式 缓存 , ...

  2. RabbitMQ 知识点

    mac下 rabbitmq 安装: brew命令 brew install rabbitmq 注意: rabbitmq的安装目录: /usr/local/Cellar/rabbitmq/3.6.6 r ...

  3. java 设计模式:单例模式

    Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯 ...

  4. <<精通正在表达式>> 书评

     IT产业新技术日新月异,令人目不暇给,然而在这其中,真正称得上伟大东西的却寥寥无几.1998年,被誉为“软件世界的爱迪生”,发明了BSD. TCP/IP.csh.vi和NFS的SUN首席科学家Bil ...

  5. android开发常用组件【持续更新中。。。】

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

  6. 深入浅出 JIT 编译器

    转载 https://www.ibm.com/developerworks/cn/java/j-lo-just-in-time/ JIT 编译器在运行程序时有两种编译模式可以选择,并且其会在运行时决定 ...

  7. [UE4]计算机中的数据表示

    一.位:数据的最小单位,一个位仅有两种状态 一个电路,通或断:磁盘上的小磁铁,南极或北极: 使用Bit表示位,百兆带宽,一秒钟可以传输一百兆个bit 二.字节:8个位组成一个字节,一个字节有256种状 ...

  8. 3dsMax模型转UE4

    转自:http://blog.csdn.net/qq_24835213/article/details/68063344 一.模型设置: 1.将Vary材质转成标准材质 2.将模型减面 3.加一套UV ...

  9. Ubuntu16.04LTS中使用 apt-get install 出现错误 Could not get lock /var/lib/dpkg/lock 的解决方案

    背景 近期,在Ubuntu 16.04 LTS 的操作系统中,安装MySQL-python的时候出现缺少依赖包的情况: 当使用命令 # sudo apt-get install xxx 安装依赖包的时 ...

  10. Oracle 统计量NO_INVALIDATE参数配置(上)

    转载:http://blog.itpub.net/17203031/viewspace-1067312/ Oracle统计量对于CBO执行是至关重要的.RBO是建立在数据结构的基础上的,DDL结构.约 ...