Ansible 经常使用模块

一、ping模块 :python

检查指定节点机器是否还能连通,用法很简单,不涉及参数
命令行敲:ansible erp -m pingmysql

二、raw : nginx

模块 执行原始的命令,而不是经过模块子系统。在任何状况下,使用shell或命令模块是合适的。给定原始的参数直接经过配置的远程shell运行。可返回标准输出、错误输出和返回代码。此模块没有变动处理程序支持。
这个模块不须要远程系统上的Python,就像脚本模块同样。此模块也支持Windows目标。git

三、yum模块 :sql

这个模块是RedHat / CentOS做为远端节点的OS的时候,用的最多的。 RedHat / CentOS包管理工具
使用`yum’软件包管理器管理软件包,其选项有:
– config_file:yum的配置文件 (optional)
– disable_gpg_check:关闭gpg_check (optional)
– disablerepo:不启用某个源 (optional)
– enablerepo:启用某个源(optional)
– name:要进行操做的软件包的名字,默认最新的程序包,指明要安装的程序包,能够带上版本号,也能够传递一个url或者一个本地的rpm包的路径
– state:状态(present,absent,latest),表示是安装还卸载
present:默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除shell

四、apt模块 :ubuntu

这个模块是ubuntu做为远端节点的OS的时候,用的最多的。 Ubuntu/Debian的包管理工具。
– deb: 用于安装远程机器上的.deb后缀的软件包(optional)
– install_recommends:这个参数能够控制远程电脑上是否只是下载软件包,仍是下载后安装,默认参数为true,设置为false的时候只下载软件包,不安装
– update_cache: 当这个参数为yes的时候等于apt-get update(optional)
– name: apt要下载的软件包名字,支持name=git=1.6 这种制定版本的模式
– state:状态(present,absent,latest),表示是安装还卸载
   present:默认的,表示为安装
   lastest: 安装为最新的版本
   absent:表示删除数组

在安装foo软件包前更新而后安装foo
  • apt: name=foo update_cache=yes
    移除foo软件包
  • apt: name=foo state=absent
    安装foo软件包
  • apt: name=foo state=present
    安装foo 1.0软件包
  • apt: name=foo=1.00 state=present
    安装nginx最新的名字为squeeze-backport发布包,而且安装前执行更新
  • apt: name=nginx state=latest default_release=squeeze-backports update_cache=yes
    只下载openjdk-6-jdk最新的软件包,不安装
  • apt: name=openjdk-6-jdk state=latest install_recommends=no
    安装全部软件包到最新版本
  • apt: upgrade=dist
    更新apt-get的list
  • apt: update_cache=yes
    3600秒后中止update_cache
  • apt: update_cache=yes cache_valid_time=3600
    安装远程节点上的/tmp/mypackage.deb软件包
  • apt: deb=/tmp/mypackage.deb

五、pip模块 :bash

用于管理Python库依赖项,为了使用pip模块,必须提供参数name或者requirements
– chdir: 执行pip命令前cd进入的目录
– name:要安装的Python库的名称或远程包的URL。
– requirements:一个pip requirements.txt文件的路径,它应该是远程系统的本地文件,若是使用chdir选项,则能够将文件指定为相对路径。
– version:指定的Python库的安装版本。
– extra_args:额外的参数传递给pip。
– executable:显式可执行文件或可执行文件的路径名,用于为系统中安装的特定版本的Python运行pip。
– virtualenv:要安装到的virtualenv目录的可选路径。 它不能与’executable’参数一块儿指定(在2.1中添加)。 若是virtualenv不存在,则将在安装软件包以前建立它。 可选的virtualenv_site_packages,virtualenv_command和virtualenv_python选项会影响virtualenv的建立。
– virtualenv_command:用于建立虚拟环境的命令或路径名。 例如pyvenv,virtualenv,virtualenv2,~/bin /virtualenv,/usr/local/bin/virtualenv。
– virtualenv_python:用于建立虚拟环境的Python可执行文件。 例如python3.5,python2.7。 未指定时,将使用用于运行ansible模块的Python版本。 当virtualenv_command使用pyvenv或-m venv模块时,不该使用此参数。
– state:状态(present,absent,latest, forcereinstall),表示是安装还卸载
   present:默认的,表示为安装
   lastest: 安装为最新的版本
   absent:表示删除
   forcereinstall:“forcereinstall”选项仅适用于可ansible 2.1及更高版本。服务器

安装bottle python包。
  • pip:
    name: bottle
在0.11版安装bottle python包。
  • pip:
    name: bottle
    version: 0.11
使用远程协议(bzr +,hg +,git +,svn +)安装MyApp。 您没必要在extra_args中提供'-e'选项。
使用远程协议(bzr +,hg +,git +)安装MyApp。
从本地压缩包安装MyApp
  • pip:
    name: file:///path/to/MyApp.tar.gz
将bottle安装到指定的virtualenv中,继承全局安装的模块
  • pip:
    name: bottle
    virtualenv: /my_app/venv
    virtualenv_site_packages: yes
使用Python 2.7将bottle安装到指定的virtualenv中
  • pip:
    name: bottle
    virtualenv: /my_app/venv
    virtualenv_command: virtualenv-2.7
在用户主目录中安装bottle。
  • pip:
    name: bottle
    extra_args: --user
安装指定的python requirements
  • pip:
    requirements: /my_app/requirements.txt
在指定的virtualenv中安装指定的python requirements。
  • pip:
    requirements: /my_app/requirements.txt
    virtualenv: /my_app/venv
安装指定的python requirements和自定义pip源URL
专门为Python 3.3安装bottle,使用'pip-3.3'可执行文件。
  • pip:
    name: bottle
    executable: pip-3.3
安装 bottle,若是已安装,强制从新安装
  • pip:
    name: bottle
    state: forcereinstall

六、synchronize模块 :

– 使用rsync同步文件,将主控方目录推送到指定节点的目录下,其参数以下:
– delete: 删除不存在的文件,delete=yes 使两边的内容同样(即以推送方为主),默认no
– src: 要同步到目的地的源主机上的路径; 路径能够是绝对的或相对的。若是路径使用”/”来结尾,则只复制目录里的内容,若是没有使用”/”来结尾,则包含目录在内的整个内容所有复制
– dest:目的地主机上将与源同步的路径; 路径能够是绝对的或相对的。
– dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议。
– mode: push或pull,默认push,通常用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件。
– rsync_opts:经过传递数组来指定其余rsync选项。

将控制机器上的src同步到远程主机上
  • synchronize:
    src: some/relative/path
    dest: /some/absolute/path
同步传递额外的rsync选项
  • synchronize:
    src: /tmp/helloworld
    dest: /var/www/helloworld
    rsync_opts:
    • "--no-motd"
    • "--exclude=.git"

七、template模块 :

基于模板方式生成一个文件复制到远程主机(template使用Jinjia2格式做为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。)
– backup: 若是原目标文件存在,则先备份目标文件
– src:在ansible控制器上的Jinja2格式化模板的路径。 这能够是相对或绝对的路径。
– dest:将模板渲染到远程机器上的位置。
force:是否强制覆盖,默认为yes
– owner:目标文件属主
– group:目标文件属组
– mode:目标文件的权限模式,模式能够被指定为符号模式(例如,u + rwx或u = rw,g = r,o = r)。

Example from Ansible Playbooks
  • template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: 0644
一样的例子,但使用等效于0644的符号模式
  • template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: "u=rw,g=r,o=r"

八、copy模块 :

在远程主机执行复制操做文件。
– src:要复制到远程主机的文件在本地的地址,能够是绝对路径,也能够是相对路径。若是路径是一个目录,它将递归复制。在这种状况下,若是路径使用”/”来结尾,则只复制目录里的内容,若是没有使用”/”来结尾,则包含目录在内的整个内容所有复制,相似于rsync。
– content:用于替代”src”,能够直接设定指定文件的值
– dest:必选项。要将源文件复制到的远程主机的绝对路径,若是源文件是一个目录,那么该路径也必须是个目录
– directory_mode:递归的设定目录的权限,默认为系统默认权限
– force:若是目标主机包含该文件,但内容不一样,若是设置为yes,则强制覆盖,若是为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
– others:全部的file模块里的选项均可以在这里使用

Example from Ansible Playbooks
  • copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644
与上述一样的例子,可是使用等价于0644的符号模式
  • copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u=rw,g=r,o=r
另外一个符号模式示例,添加一些权限并删除其余
  • copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u+rw,g-wx,o-rwx

九、user 模块与group模块 :

user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令。
1:user模块:
– home:指定用户的家目录,须要与createhome配合使用。
– groups:指定用户的属组。
– uid:指定用的uid。
– password:指定用户的密码。
注意:指定password参数时,不能使用明文密码,由于后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,因此须要先将密码字符串进行加密处理。而后将获得的字符串放到password中便可
– name:指定用户名。
– createhome:是否建立家目录 yes|no。
– system:是否为系统用户。
– remove:当state=absent时,remove=yes则表示连同家目录一块儿删除,等价于userdel -r。
– state:是建立仍是删除。(present,absent)
– shell:指定用户的shell环境。
– generate_ssh_key:是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。
– ssh_key_bits:可选择指定要建立的SSH密钥中的位数。
– ssh_key_passphrase:设置SSH密钥的密码。 若是没有提供密码,SSH密钥将默认没有密码。
– ssh_key_file:指定SSH密钥文件名(可选)。 若是这是一个相对的文件名,那么它将是相对于用户的主目录。
– ssh_key_type:指定要生成的SSH密钥的类型(可选)。 可用的SSH密钥类型将取决于目标主机上的实现。

使用bash shell添加用户“james”,将组“管理员”和“开发人员”附加到用户组
  • user:
    name: james
    shell: /bin/bash
    groups: admins,developers
    append: yes
删除用户'johns'
  • user:
    name: johnd
    state: absent
    remove: yes
在~/.ssh/id_rsa中为用户jsmith建立一个2048位的SSH密钥
  • user:
    name: jsmith
    generate_ssh_key: yes
    ssh_key_bits: 2048
    ssh_key_file: .ssh/id_rsa

2.group模块 :
– gid:指定用的gid。
– name:指定用户名。
– state:是建立仍是删除。(present,absent)
– system:若是是,则表示建立的组是系统组。

Example group command from Ansible Playbooks
  • group:
    name: somegroup
    state: present

十、service 模块 :

用于管理服务,记得针对Centos7就不要使用这个模块了。
– arguments:给命令行提供一些选项
– enabled:是否开机启动 yes|no, 要求状态(state)和启用(enabled)中至少有一个。
– name:必选项,服务名称
– runlevel:运行级别
– sleep:若是执行了restarted,在则stop和start之间沉睡几秒钟
– state:对当前服务执行启动,中止、重启、从新加载等操做(started,stopped,restarted,reloaded)

启动服务httpd,若是不运行
  • service:
    name: httpd
    state: started
中止服务httpd,若是运行
  • service:
    name: httpd
    state: stopped
启用服务httpd的示例操做,而不使用运行状态
  • service:
    name: httpd
    enabled: yes

十一、get_url 模块 :

该模块主要用于从http、ftp、https服务器上下载文件(相似于wget),主要有以下选项:
– sha256sum:下载完成后进行sha256 check;
– timeout:下载超时时间,默认10s
– url:下载的URL
– url_password、url_username:主要用于须要用户名密码进行验证的状况
– dest:将文件下载到哪里的绝对路径。若是dest是目录,则使用服务器提供的文件名,或者若是没有提供,将使用远程服务器上的URL的基本名称。
– headers:以格式“key:value,key:value”为请求添加自定义HTTP标头。

十二、fetch模块 :

它用于从远程机器获取文件,并将其本地存储在由主机名组织的文件树中。
– src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。 后续版本可能会支持递归提取。
– dest:保存文件的目录。 例如,若是dest目录是/backup,在主机host.example.com上命名为/ etc/profile的src文件将被保存到/backup/host.example.com/etc/profile。
– flat:容许您覆盖将目标文件添加到主机名/ path / to / file的默认行为。

将文件存储到/tmp/fetched/host.example.com/tmp/somefile中
  • fetch:
    src: /tmp/somefile
    dest: /tmp/fetched
直接指定路径
  • fetch:
    src: /tmp/somefile
    dest: /tmp/prefix-{{ inventory_hostname }}
    flat: yes
指定目标路径
  • fetch:
    src: /tmp/uniquefile
    dest: /tmp/special/
    flat: yes

1三、file模块 :

file模块主要用于远程主机上的文件操做,file模块包含以下选项:
– force:须要在两种状况下强制建立软连接,一种是源文件不存在但以后会创建的状况下;另外一种是目标软连接已存在,须要先取消以前的软链,而后建立新的软链,有两个选项:yes|no
– group:定义文件/目录的属组
– mode:定义文件/目录的权限
– owner:定义文件/目录的属主
– path:必选项,定义文件/目录的路径
– recurse:递归的设置文件的属性,只对目录有效
– src:要被连接的源文件的路径,只应用于state=link的状况
– dest:被连接到的路径,只应用于state=link的状况
– state:
   directory:若是目录不存在,建立目录
   file:即便文件不存在,也不会被建立
   link:建立软连接
   hard:建立硬连接
   touch:若是文件不存在,则会建立一个新的文件,若是文件或目录已存在,则更新其最后修改时间
   absent:删除目录、文件或者取消连接文件

更改文件全部权,组和模式。 当使用八进制数指定模式时,第一个数字应始终为0。
  • file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644
touch建立文件,使用符号模式设置权限(至关于0644)
  • file:
    path: /etc/foo.conf
    state: touch
    mode: "u=rw,g=r,o=r"
touch建立文件,添加/删除一些权限
  • file:
    path: /etc/foo.conf
    state: touch
    mode: "u+rw,g-wx,o-rwx"

建立一个目录,若是它不存在

  • file:
    path: /etc/some_directory
    state: directory
    mode: 0755

1四、unarchive模块 :

用于解压文件,模块包含以下选项:
– copy:在解压文件以前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
– creates:指定一个文件名,当该文件存在时,则解压指令不执行
– dest:远程主机上的一个路径,即文件解压的绝对路径。
– group:解压后的目录或文件的属组
– list_files:若是为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
– mode:解压后文件的权限
– src:若是copy为yes,则须要指定压缩文件的源路径
– owner:解压后文件或目录的属主

  • name: 将foo.tgz解压缩到/var/lib/foo中
    unarchive:
    src: foo.tgz
    dest: /var/lib/foo

  • name: 解压远程计算机上已存在的文件
    unarchive:
    src: /tmp/foo.zip
    dest: /usr/local/bin
    remote_src: yes

  • name: 解压文档须要下载的文件(2.0中添加)
    unarchive:
    src: https://example.com/example.zip
    dest: /usr/local/bin
    remote_src: yes

1五、command 模块和shell :

用于在各被管理节点运行指定的命令
shell和command的区别:shell模块能够特殊字符,而command是不支持

1.command 模块
– chdir:在运行命令以前,切换到此目录。

  • name: return motd to registered var
    command: cat /etc/motd
    register: mymotd

  • name: Run the command if the specified file does not exist.
    command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

您还可使用“args”表单提供选项。

  • name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.
    command: /usr/bin/make_database.sh arg1 arg2
    args:
    chdir: somedir/
    creates: /path/to/database

2.shell 模块 :
– chdir:在运行命令以前,切换到此目录。
– executable:更改用于执行命令的shell(bash,sh)。 应该是可执行文件的绝对路径。

  • name: Execute the command in remote shell; stdout goes to the specified file on the remote.
    shell: somescript.sh >> somelog.txt

  • name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
    shell: cat < /tmp/*txt
    args:
    executable: /bin/bash

16.setup模块 :

该模块主要用于收集信息,是经过调用facts组件来实现的。
facts组件是Ansible用于采集被管机器设备信息的一个功能,咱们可使用setup模块查机器的全部facts信息,可使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
ansible-doc -s setup
ansible mysql -m setup #查看mysql服务器上全部信息

17.script模块 :

该模块用于将本机的脚本在被管理端的机器上运行
在本身服务器设置脚本,其余服务器去执行
ansible-doc -s script
#!/bin/bash
echo "this is test script" > /opt/script.txt
chmod 666 /opt/script.txt #设置权限
chmod +x shell.sh #为脚本添加执行权限
ansible all -m script -a 'shell.sh'

18.cron模块 :

该模块适用于管理cron计划任务的。
两种状态(state):present表示添加 absent 表示移除
ansible-doc -s cron #查看cron模块信息
ansible all -m cron -a 'minute="/1" job="/usr/bin/echo heihei >> /opt/test.txt" name="test cron"' #-a: 指定添加参数 /1:每分钟执行 job:执行内容

相关文章
相关标签/搜索