http://www.web008.net

挑选和常用模块

Ansible种类小说:http://www.cnblogs.com/f-ck-need-u/p/7576137.html**

目录:
1.1 ansible命令解释
1.2 ansible常用模块
  1.2.1 shell和command
  1.2.2 复制模块copy
  1.2.3 template模块
  1.2.4 文件模块file
  1.2.5 包管理模块yum
  1.2.6 yum源计划模块yum_repository
  1.2.7 服务管理模块service
  1.2.8 客商处理模块user
  1.2.9 authorized_key模块
  1.2.10 debug模块
  1.2.11 准时职分模块cron
  1.2.12 归档模块archive
  1.2.13 解包模块unarchive
  1.2.14 下载模块get_url
  1.2.15 wait_for模块
  1.2.16 script模块



1.1 ansible命令解释

透过ansible命令施行的任务称为ad-hoc命令(任务卡塔尔国,其实它是周旋playbook来讲的。平日,命令行用来落到实处ansible的批量关押效果,playbook用来促成批量自动化功效。

【以下为平日选项:】
-a MODULE_ARGS
--args=MODULE_ARGS
传送参数给模块

--ask-vault-pass
询问vault的密码

-B SECONDS
--background=SECONDS
异步后台格局进行职责,并在钦命的秒数后超时,超时会杀死任务的经过。默许是联合,即维持长连接,它会等待全数实施完结(即阻塞情势)。但有的时候是没要求那样的,比方一些命令的实行时间比ssh的晚点时间还长。若是不钦点超时秒数,将以协同方式运营任务

-P POLL_INTERVAL
--poll=POLL_INTERVAL
异步形式下轮流培训义务的年月间距,暗许10秒

-C
--check
不对长途主机做出一些转移,而是预测有些恐怕发生的改变

-D
--diff
当文件或模板产生了改动,展现出不一致的地方,和-C选项合营使用更佳

-e EXTRA_VARS
--extra-vars=EXTRA_VARS
配备额外的配备变量(key=value或然YAML/JSON格式卡塔尔国

-f FORKS
--forks=FORKS
内定并行管理的经过数量,默以为5个

-h
--help
来得辅助消息

-i INVENTORY
--inventory-file=INVENTORY
点名inventory文件,多少个文本使用逗号分隔。默以为/etc/ansible/hosts

-l SUBSET
--limit=SUBSET
行使额外的卓越方式来筛选指标主机列表。此处的同盟形式是在原来就有特出情势下进行的,所以是更严厉的筛选。举例钦赐了主机组的情状下,使用-l选项从当中只选生龙活虎台主机进行调节

--list-hosts
不会试行其余操作,而是列出相配到的主机列表

-m MODULE_NAME
--module-name=MODULE_NAME
点名要试行的模块名,默许的模块为"command"

-M MODULE_PATH
--module-path=MODULE_PATH
点有名的模特块目录,暗中认可未设置

--new-vault-password-file=NEW_VAULT_PASSWORD_FILE
new vault password file for rekey

-o
--one-line
简化输出(大器晚成行输出情势卡塔尔

--output=OUTPUT_FILE
output file name for encrypt or decrypt; use - for stdout

--syntax-check
检查playbook的语法,不会实行

-t TREE
--tree=TREE
笔录输出到此目录中(测验时以各个host名如IP地址为文件名记录,结果记录到对应的文书中)。
此选项在ansible巨慢的时候(如弹指间应有回到的指令还须要10多秒才水到渠成卡塔尔(英语:State of Qatar)有奇用,可能将ansible的结果重定向到有个别文件中也能减轻,为何这么,作者也不明了(表面看来和输出形式有提到卡塔尔国,数十次亲测有效。

--vault-password-file=VAULT_PASSWORD_FILE
钦点vault密码文件

-v
--verbose
出口详细音信,-vvv和-vvvv会输出越多新

--version
显示ansible的版本

【以下是连接选项,用于调节何人以致怎么着连接主机:】
-k
--ask-pass
打探连接时的密码

--private-key=KEY_FILE
--key-file=KEY_FILE
行使文件来验证SSH连接进程。

-u REMOTE_USER
--user=REMOTE_USER
使用钦点的顾客名打开三番五次

-c CONNECTION
--connection=CONNECTION
接连类型,默感觉ssh。paramiko (SSH卡塔尔国, ssh, winrm and local. local is mostly useful for crontab or kickstarts.

-T TIMEOUT, --timeout=TIMEOUT
接连几天的过期时间,单位为秒,默感到10

--ssh-common-args=SSH_COMMON_ARGS
钦赐传递给sftp/scp/ssh等工具的通用额外参数

--sftp-extra-args=SFTP_EXTRA_ARGS
点名只传递给sftp的附加参数,如-f

--scp-extra-args=SCP_EXTRA_ARGS
内定只传递给scp的额外参数,如-l

--ssh-extra-args=SSH_EXTRA_ARGS
点名只传递给ssh的附加参数,如-Sportage

【以下是权力调节选项:调控在对象主机上以怎么样地点和权限运营职责:】
-s
--sudo
为运转ansible命令的客户进级权限为sudo_user的权杖,此命令已放任,使用become替代

-U SUDO_USER
--sudo-user=SUDO_USER
期望的sudo_user,默认为root,已废弃,使用become替代

-S
--su
运用su的方法实行操作,已抛弃,使用become取代

-R SU_USER
--su-user=SU_USER
利用此user的su实行操作,默以为root,已放任,使用become代替

-b
--become
使用become的法子升级权限

--become-method=BECOME_METHOD
钦赐进步权限的议程,可选以下二种:sudo/su/pbrun/pfexec/doas/dzdo/ksu/runas值

--become-user=BECOME_USER
要提高为哪个user的权限,默以为root

--ask-sudo-pass
询问sudo密码,已废弃,使用become替代

--ask-su-pass
询问su的密码,已废弃,使用become替代

-K
--ask-become-pass
打听become提高权限期的密码

1.1 ansible命令解释

经过ansible命令实行的任务称为ad-hoc命令(任务卡塔尔国,其实它是相对playbook来讲的。经常,命令行用来兑现ansible的批量管理职能,playbook用来贯彻批量自动化功效。

【以下为日常选项:】
-a MODULE_ARGS
--args=MODULE_ARGS
传递参数给模块

--ask-vault-pass
询问vault的密码

-B SECONDS
--background=SECONDS
异步后台格局履行职责,并在内定的秒数后超时,超时会杀死任务的长河。私下认可是一块,即维持长连接,它会等待全数施行实现(即拥塞形式)。但偶然是没须求这么的,例如一些命令的进行时间比ssh的超时时间还长。借使不点名超时秒数,将以合作方式运转职务

-P POLL_INTERVAL
--poll=POLL_INTERVAL
异步格局下轮流培训职务的光阴世距,暗中同意10秒

-C
--check
不对长间距主机做出一些转移,而是预测某个或者产生的改观

-D
--diff
当文件或模板发生了转移,显示出分化之处,和-C选项合营使用更佳

-e EXTRA_VARS
--extra-vars=EXTRA_VARS
配备额外的配备变量(key=value大概YAML/JSON格式卡塔尔

-f FORKS
--forks=FORKS
内定并行管理的经过数量,默以为5个

-h
--help
来得支持消息

-i INVENTORY
--inventory-file=INVENTORY
钦赐inventory文件,多个文件使用逗号分隔。默感觉/etc/ansible/hosts

-l SUBSET
--limit=SUBSET
选拔额外的特出方式来筛选指标主机列表。此处的配合形式是在本来就有特别情势下张开的,所以是更严苛的筛选。比如钦命了主机组的事态下,使用-l选项从当中只选风度翩翩台主机举行支配

--list-hosts
不会实施其余操作,而是列出相称到的主机列表

-m MODULE_NAME
--module-name=MODULE_NAME
点名要实践的模块名,暗中认可的模块为"command"

-M MODULE_PATH
--module-path=MODULE_PATH
钦点模块目录,暗中认可未设置

--new-vault-password-file=NEW_VAULT_PASSWORD_FILE
new vault password file for rekey

-o
--one-line
简化输出(后生可畏行输出形式卡塔尔

--output=OUTPUT_FILE
output file name for encrypt or decrypt; use - for stdout

--syntax-check
反省playbook的语法,不会举办

-t TREE
--tree=TREE
笔录输出到此目录中(测量检验时以每一种host名如IP地址为文件名记录,结果记录到相应的文书中)。
此选项在ansible巨慢的时候(如瞬间理应回到的授命还须求10多秒才到位卡塔尔国有奇用,也许将ansible的结果重定向到有个别文件中也能缓和,为何这么,小编也不领悟(表面看来和出口方式有关联卡塔尔(英语:State of Qatar),数10回亲测有效。

--vault-password-file=VAULT_PASSWORD_FILE
点名vault密码文件

-v
--verbose
出口详细音讯,-vvv和-vvvv会输出更加多新

--version
显示ansible的版本

【以下是连接选项,用于调节何人以致怎么样连接主机:】
-k
--ask-pass
叩问连接时的密码

--private-key=KEY_FILE
--key-file=KEY_FILE
动用文件来申明SSH连接进度。

-u REMOTE_USER
--user=REMOTE_USER
选拔钦命的顾客名举办一而再再而三

-c CONNECTION
--connection=CONNECTION
三回九转类型,默以为ssh。paramiko (SSH卡塔尔(قطر‎, ssh, winrm and local. local is mostly useful for crontab or kickstarts.

-T TIMEOUT, --timeout=TIMEOUT
连年的超时时间,单位为秒,默感觉10

--ssh-common-args=SSH_COMMON_ARGS
点名传递给sftp/scp/ssh等工具的通用额外参数

--sftp-extra-args=SFTP_EXTRA_ARGS
钦命只传递给sftp的额外参数,如-f

--scp-extra-args=SCP_EXTRA_ARGS
点名只传递给scp的附加参数,如-l

--ssh-extra-args=SSH_EXTRA_ARGS
钦命只传递给ssh的额外参数,如-Haval

【以下是权力决定选项:调控在目的主机上以什么样身份和权杖运转任务:】
-s
--sudo
为运营ansible命令的客商进步权限为sudo_user的权力,此命令已抛弃,使用become替代

-U SUDO_USER
--sudo-user=SUDO_USER
期望的sudo_user,默认为root,已废弃,使用become替代

-S
--su
运用su的措施进行操作,已扬弃,使用become代替

-R SU_USER
--su-user=SU_USER
利用此user的su实行操作,默感到root,已废弃,使用become代替

-b
--become
使用become的艺术进级权限

--become-method=BECOME_METHOD
点名提高权限的办法,可选以下二种:sudo/su/pbrun/pfexec/doas/dzdo/ksu/runas值

--become-user=BECOME_USER
要升级为哪个user的权杖,默以为root

--ask-sudo-pass
询问sudo密码,已废弃,使用become替代

--ask-su-pass
询问su的密码,已废弃,使用become替代

-K
--ask-become-pass
问询become提高权限期的密码

1.2 常用模块

能够从ansible-doc -l | grep来搜索想要的模块。再利用ansible-doc -s module_name来查阅此模块的用法。官方模块列表和评释:https://docs.ansible.com/ansible/latest/modules_by_category.html

至于模块的接纳方法,供给注意的是"state"。超多模块都会有该选用,且其值大约都蕴涵有"present"和"absent",表示一定和否定的意趣。

ansible绝大好多模块都自发具备幂等美高梅163888,特点,独有极少数模块如shell和command模块不抱有幂等性。所谓的幂等性是指数十次奉行同二个操作不会影响最后结果。比如,ansible的yum模块安装rpm包时,即便待安装的包已经设置过了,则重复或频仍实践安装操作都不会真的的施行下去。再举例,copy模块拷贝文件时,假诺指标主机上大器晚成度有了完全雷同的文件,则一再实践copy模块不会真的的正片。ansible具备幂等性的模块在施行时,都会自行剖断是还是不是要推行。

1.7 常用模块

可以从ansible-doc -l | grep来找寻想要的模块。再使用ansible-doc -s module_name来查阅此模块的用法。官方模块列表和表达:https://docs.ansible.com/ansible/latest/modules_by_category.html

有关模块的运用办法,须求小心的是"state"。超多模块都会有该选取,且其值大概都包涵有"present"和"absent",表示鲜明和否定的乐趣。

ansible绝大许多模块都后天具备幂等特色,唯有极少数模块如shell和command模块不持有幂等性。所谓的幂等性是指多次推行同三个操作不会影响最终结果。举例,ansible的yum模块安装rpm包时,假若待安装的包已经设置过了,则再度或频仍施行安装操作都不会真的的进行下去。再比如说,copy模块拷贝文件时,倘诺指标主机上业本来就有了完全相符的文书,则一再实践copy模块不会真的的正片。ansible具备幂等性的模块在实行时,都会活动推断是或不是要推行。

1.2.1 shell和command

私下认可ansible使用的模块是command,即能够履行一些shell命令。shell和command的用法基本相仿,实际上shell模块实施命令的措施是在长途应用/bin/sh来实行的,如/bin/sh ping。

command无法深入分析变量(如$HOME卡塔尔和少数操作符("<", ">", "|", ";"以致"&"卡塔尔(英语:State of Qatar),所以肯定要动用这个不足分析的操作符时,使用shell模块来代表command。

ansible-doc -s shell
- name: Execute commands in nodes.
  action: shell
      chdir       # 在执行命令前,先cd到指定的目录下
      creates     # 用于判断命令是否要执行。如果指定的文件(可以使用通配符)存在,则不执行。
      removes     # 用于判断命令是否要执行。如果指定的文件(可以使用通配符)不存在,则不执行。

在ansible中动用shell或command模块必须要留心,它们暗许不满足幂等性,相当多操作会重复推行,但稍事操作是不准再一次实行的。比如mysql的初步化命令mysql_install_db,它只好在首先次配置的进度中起始化叁次,别的任几时候如非供给则不许实施。当时要贯彻幂等性,能够因此模块的creates和removes选项举行判别,但不论如何,在推行那七个模块的时候都亟待酌量要实践的授命是或不是应当达成幂等性。

1.2.1 shell和command

私下认可ansible使用的模块是command,就可以以推行一些shell命令。shell和command的用法基本等同,实际上shell模块试行命令的法门是在长途应用/bin/sh来推行的,如/bin/sh ping。

command不可能剖判变量(如$HOME卡塔尔国和有些操作符("<", ">", "|", ";"甚至"&"卡塔尔国,所以确定要运用那些不足深入解析的操作符时,使用shell模块来取代command。

ansible-doc -s shell
- name: Execute commands in nodes.
  action: shell
      chdir       # 在执行命令前,先cd到指定的目录下
      creates     # 用于判断命令是否要执行。如果指定的文件(可以使用通配符)存在,则不执行。
      removes     # 用于判断命令是否要执行。如果指定的文件(可以使用通配符)不存在,则不执行。

在ansible中动用shell或command模块一定要留神,它们私下认可不满意幂等性,很多操作会重复实施,但多少操作是不容许再一次实行的。比如mysql的初叶化命令mysql_install_db,它必须要在首先次配置的历程中开始化三遍,其余任何时候如非须求则不容许实践。此时要贯彻幂等性,能够透过模块的creates和removes选项实行决断,但无论怎样,在施行那四个模块的时候都急需构思要推行的授命是还是不是应该达成幂等性。

1.2.2 复制模块copy

ansible-doc -l | grep copy
copy                   Copies files to remote locations.
ec2_ami_copy           copies AMI between AWS regions, return new image id 
netapp_e_volume_copy   Create volume copy pairs 
nxos_file_copy         Copy a file to a remote NXOS device over SCP.
unarchive              Unpacks an archive after(optionally) copying it from the local machine.
vsphere_copy           Copy a file to a vCenter datastore 
win_copy               Copies files to remote locations on windows hosts.
win_robocopy           Synchronizes the contents of two directories using Robocopy.

利用方法:

ansible-doc -s copy
- name: Copies files to remote locations.
action: copy
    backup=[yes|no]   # 拷贝的同时也创建一个包含时间戳信息的备份文件,默认为no
    dest=             # 目标路径,只能是绝对路径,如果拷贝的文件是目录,则目标路径必须也是目录
    content           # 直接以content给定的字符串或变量值作为文件内容保存到远程主机上,它会替代src选项
    directory_mode    # 当对目录做递归拷贝时,设置了directory_mode将会使得只拷贝新建文件,
                      # 旧文件不会被拷贝。默认未设置
    follow=[yes|no]   # 是否追踪到链接的源文件。
    force=[yes|no]    # 设置为yes(默认)时,将覆盖远程同名文件。设置为no时,忽略同名文件的拷贝。
    group             # 设置远程文件的所属组
    owner             # 设置远程文件的所有者
    mode=             # 设置远程文件的权限。使用数值表示时不能省略第一位,如0644。
                      # 也可以使用'u+rwx'或'u=rw,g=r,o=r'等方式设置。
    src=              # 拷贝本地源文件到远程,可使用绝对路径或相对路径。如果路径是目录,且目录后加了
                      # 斜杠"/",则只会拷贝目录中的内容到远程,如果目录后不加斜杠,则拷贝目录本身和
                      # 目录内的内容到远程。

暗中同意意况下,ansible copy会检查文件md5查看是或不是须要拷贝,相似则不会拷贝,否则会拷贝。假设设置force=yes,则当文件md5分歧时(即文件内容各异卡塔尔(قطر‎才覆盖拷贝,设置force=no时,则只拷贝对方并未有的文本。

ansible centos -m copy -a "src=/tmp/copy.txt dest=/tmp mode=0770 owner=sshd group=sshd backup=yes" -o -f 6

ll /tmp
-rwxrwx--- 1 sshd sshd   24 May 28 16:45 copy.txt
-rwxrwx--- 1 root root   22 May 28 16:39 copy.txt.10915.2017-05-28@16:45:14~  #这是备份文件

假设拷贝的是目录,则指标路线必得是目录路线。假若利用"/"结尾,则拷贝的是目录中的文件,假设不以斜杠结尾,则拷贝的是目录加目录中的文件。

mkdir /tmp/a
touch /tmp/a/{1..10}.txt
ansible centos -m copy -a "src=/tmp/a dest=/tmp" -o -f 6

1.2.2 复制模块copy

ansible-doc -l | grep copy
copy                   Copies files to remote locations.
ec2_ami_copy           copies AMI between AWS regions, return new image id 
netapp_e_volume_copy   Create volume copy pairs 
nxos_file_copy         Copy a file to a remote NXOS device over SCP.
unarchive              Unpacks an archive after(optionally) copying it from the local machine.
vsphere_copy           Copy a file to a vCenter datastore 
win_copy               Copies files to remote locations on windows hosts.
win_robocopy           Synchronizes the contents of two directories using Robocopy.

选取办法:

ansible-doc -s copy
- name: Copies files to remote locations.
action: copy
    backup=[yes|no]   # 拷贝的同时也创建一个包含时间戳信息的备份文件,默认为no
    dest=             # 目标路径,只能是绝对路径,如果拷贝的文件是目录,则目标路径必须也是目录
    content           # 直接以content给定的字符串或变量值作为文件内容保存到远程主机上,它会替代src选项
    directory_mode    # 当对目录做递归拷贝时,设置了directory_mode将会使得只拷贝新建文件,
                      # 旧文件不会被拷贝。默认未设置
    follow=[yes|no]   # 是否追踪到链接的源文件。
    force=[yes|no]    # 设置为yes(默认)时,将覆盖远程同名文件。设置为no时,忽略同名文件的拷贝。
    group             # 设置远程文件的所属组
    owner             # 设置远程文件的所有者
    mode=             # 设置远程文件的权限。使用数值表示时不能省略第一位,如0644。
                      # 也可以使用'u+rwx'或'u=rw,g=r,o=r'等方式设置。
    src=              # 拷贝本地源文件到远程,可使用绝对路径或相对路径。如果路径是目录,且目录后加了
                      # 斜杠"/",则只会拷贝目录中的内容到远程,如果目录后不加斜杠,则拷贝目录本身和
                      # 目录内的内容到远程。

暗中认可意况下,ansible copy会检查文件md5翻看是或不是供给拷贝,相符则不会拷贝,不然会拷贝。要是设置force=yes,则当文件md5分歧一时间(即文件内容不相同卡塔尔国才覆盖拷贝,设置force=no时,则只拷贝对方并未有的公文。

ansible centos -m copy -a "src=/tmp/copy.txt dest=/tmp mode=0770 owner=sshd group=sshd backup=yes" -o -f 6

ll /tmp
-rwxrwx--- 1 sshd sshd   24 May 28 16:45 copy.txt
-rwxrwx--- 1 root root   22 May 28 16:39 copy.txt.10915.2017-05-28@16:45:14~  #这是备份文件

借使拷贝的是目录,则目的路线必需是目录路线。借使运用"/"结尾,则拷贝的是目录中的文件,假如不以斜杠结尾,则拷贝的是目录加目录中的文件。

mkdir /tmp/a
touch /tmp/a/{1..10}.txt
ansible centos -m copy -a "src=/tmp/a dest=/tmp" -o -f 6

1.2.3 template模块

template模块用法和copy模块用法基本生机勃勃致,它首要用于复制配置文件。

ansible-doc -s template
- name: Templates a file out to a remote server.
  action: template
      backup    # 拷贝的同时也创建一个包含时间戳信息的备份文件,默认为no
      dest=     # 目标路径
      force     # 设置为yes (默认)时,将覆盖远程同名文件。设置为no时,忽略同名文件的拷贝
      group     # 设置远程文件的所属组
      owner     # 设置远程文件的所有者
      mode      # 设置远程文件的权限。使用数值表示时不能省略第一位,如0644。
                # 也可以使用'u+rwx' or 'u=rw,g=r,o=r'等方式设置
      src=      # ansible控制器上Jinja2格式的模板所在位置,可以是相对或绝对路径
      validate  # 在复制到目标主机后但放到目标位置之前,执行此选项指定的命令。
                # 一般用于检查配置文件语法,语法正确则保存到目标位置。
                # 如果要引用目标文件名,则使用%s,下面的示例中的%s即表示目标机器上的/etc/nginx/nginx.conf。

ansible centos -m template -a "src=/tmp/nginx.conf.j2 dest=/etc/nginx/nginx.conf mode=0770 owner=root group=root backup=yes validate='nginx -t -c %s'" -o -f 6

纵然template模块能够按须要修改配置文件内容来复制模板到被控主机上,不过有后生可畏种状态它是不可能一举成功的:分裂被控节点所需的布置文件差距异常的大,并非纠正多少个变量就能够满足。举个例子在centos 6和centos 7上通过yum安装的nginx,它们的结构文件内容相差非常的大,且centos 6上的nginx的默许就有多个/etc/nginx/conf.d/default.conf。假诺一向复制同一个模板的nginx配置文件到centos 6和centos 7上,很恐怕以致某后生可畏版本的nginx不可能运营。

那时就有必不可缺在复制模板时精选对应发行版的模版文件实行配成对复制,比方要复制到centos 6上的源模板是nginx6.conf.j2,复制到centos 7上的源模板是nginx7.conf.j2。这种行为足以称为"基于变量接纳文件或模板"

---
 - tasks: 
     - name: template file based var
       template: src=/templates/nginx{{ ansible_distribution_major_version }}.conf.j2 dest=/etc/nginx/nginx.conf validate="/usr/sbin/nginx -t -c %s"

还是可以在文件内容中内定jinja2的代表变量,在ansible实行时首先会基于变量内容张开渲染,渲染后再执行相关模块。举例,此处的template模块,复制三个依据发行版本号的yum源配置文件。以下是有个别repo文件模板base.repo.j2的原委。

[epel]
name=epel
baseurl=http://mirrors.aliyun.com/epel/{{ ansible_distribution_major_version }}Server/x86_64/
enable=1
gpgcheck=0

再复制就可以。

---
 - tasks: 
     - template: src=my.repo.j2 dest=/etc/yum.repos.d/my.repo

1.2.3 template模块

template模块用法和copy模块用法基本生机勃勃致,它至关主要用来复制配置文件。

ansible-doc -s template
- name: Templates a file out to a remote server.
  action: template
      backup    # 拷贝的同时也创建一个包含时间戳信息的备份文件,默认为no
      dest=     # 目标路径
      force     # 设置为yes (默认)时,将覆盖远程同名文件。设置为no时,忽略同名文件的拷贝
      group     # 设置远程文件的所属组
      owner     # 设置远程文件的所有者
      mode      # 设置远程文件的权限。使用数值表示时不能省略第一位,如0644。
                # 也可以使用'u+rwx' or 'u=rw,g=r,o=r'等方式设置
      src=      # ansible控制器上Jinja2格式的模板所在位置,可以是相对或绝对路径
      validate  # 在复制到目标主机后但放到目标位置之前,执行此选项指定的命令。
                # 一般用于检查配置文件语法,语法正确则保存到目标位置。
                # 如果要引用目标文件名,则使用%s,下面的示例中的s%即表示目标机器上的/etc/nginx/nginx.conf。

ansible centos -m template -a "src=/tmp/nginx.conf.j2 dest=/etc/nginx/nginx.conf mode=0770 owner=root group=root backup=yes validate='nginx -t -c %s'" -o -f 6

就算如此template模块能够按须求订正配置文件内容来复制模板到被控主机上,不过有大器晚成种景况它是不能够缓和的:差别被控节点所需的布局文件差别相当大,并不是修正多少个变量就足以知足。举个例子在centos 6和centos 7上通过yum安装的nginx,它们的铺排文件内容相差别常的大,且centos 6上的nginx的暗中认可就有三个/etc/nginx/conf.d/default.conf。借使直接复制同叁个模板的nginx配置文件到centos 6和centos 7上,很可能招致某一本子的nginx不可能运维。

那时就有不能缺少在复制模板时精选对应发行版的模版文件举行配成对复制,比如要复制到centos 6上的源模板是nginx6.conf.j2,复制到centos 7上的源模板是nginx7.conf.j2。这种行为足以称呼"基于变量选用文件或模板"

---
 - tasks: 
     - name: template file based var
       template: src=/templates/nginx{{ ansible_distribution_major_version }}.conf.j2 dest=/etc/nginx/nginx.conf validate="/usr/sbin/nginx -t -c %s"

还可以够在文件内容中钦点jinja2的代表变量,在ansible推行时首先会基于变量内容进行渲染,渲染后再执行有关模块。举例,此处的template模块,复制三个基于发行版本号的yum源配置文件。以下是某些repo文件模板base.repo.j2的内容。

[epel]
name=epel
baseurl=http://mirrors.aliyun.com/epel/{{ ansible_distribution_major_version }}Server/x86_64/
enable=1
gpgcheck=0

再复制就可以。

---
 - tasks: 
     - template: src=my.repo.j2 dest=/etc/yum.repos.d/my.repo

1.2.4 文件模块file

管理文件、目录的品质,也得以创制文件或目录。

ansible-doc -s file
- name: Sets attributes of files
  action: file
      group       # file/directory的所属组
      owner       # file/directory的所有者
      mode        # 修改权限,格式可以是0644、'u+rwx'或'u=rw,g=r,o=r'等
      path=       # 指定待操作的文件,可使用别名'dest'或'name'来替代path
      recurse     # (默认no)递归修改文件的属性信息,要求state=directory
      src         # 创建链接时使用,指定链接的源文件
      state       # directory:如果目录不存在则递归创建
                  # file:文件不存在时,不会被创建(默认值)
                  # touch:touch由path指定的文件,即创建一个新文件,或修改其mtime和atime
                  # link:修改或创建软链接
                  # hard:修改或创建硬链接
                  # absent:目录和其中的文件会被递归删除,文件或链接将取消链接状态

必要小心的是,file模块能够递归创造目录,不过不可能在不真实的目录中创建文件,只可以先创建目录,再在这里目录中创建文件。

创制目录,并递归订正目录的属性。

ansible 192.168.100.63 -m file -a 'path=/tmp/xyz state=directory owner=root group=root mode=0755 recurse=yes'

改善目录中属性。

ansible 192.168.100.63 -m file -a 'path=/tmp/xyz state=touch mode=0644'

创制或修正文件属性。

ansible 192.168.100.63 -m file -a 'path=/tmp/xyz/a.txt state=touch mode=0644'

1.2.4 文件模块file

管理文件、目录的属性,也足以成立文件或目录。

ansible-doc -s file
- name: Sets attributes of files
  action: file
      group       # file/directory的所属组
      owner       # file/directory的所有者
      mode        # 修改权限,格式可以是0644、'u+rwx'或'u=rw,g=r,o=r'等
      path=       # 指定待操作的文件,可使用别名'dest'或'name'来替代path
      recurse     # (默认no)递归修改文件的属性信息,要求state=directory
      src         # 创建链接时使用,指定链接的源文件
      state       # directory:如果目录不存在则递归创建
                  # file:文件不存在时,不会被创建(默认值)
                  # touch:touch由path指定的文件,即创建一个新文件,或修改其mtime和atime
                  # link:修改或创建软链接
                  # hard:修改或创建硬链接
                  # absent:目录和其中的文件会被递归删除,文件或链接将取消链接状态

须要注意的是,file模块能够递归创建目录,可是不能够在不设有的目录中创建文件,只可以先创造目录,再在那目录中开创文件。

创制目录,并递归改革目录的性情。

ansible 192.168.100.63 -m file -a 'path=/tmp/xyz state=directory owner=root group=root mode=0755 recurse=yes'

矫正目录中属性。

ansible 192.168.100.63 -m file -a 'path=/tmp/xyz state=touch mode=0644'

开创或更改文件属性。

ansible 192.168.100.63 -m file -a 'path=/tmp/xyz/a.txt state=touch mode=0644'

1.2.5 包管理模块yum

ansible-doc -s yum
- name: Manages packages with the `yum' package manager
  action: yum
    disable_gpg_check   # 安装包时禁止gpgcheck,仅在state=present或latest时生效。
    disablerepo         # 禁用指定的repoid,多个repoid使用逗号分隔。
    enablerepo          # 明确使用该repoid
    exclude             # 排除哪些包不安装,仅在state=present或latest时生效。
    list                # 类似于yum list
    name=               # 指定安装的包名,可带上版本号.
    state               # 状态。('present'、'installed','latest')用于安装包,
                        # ('absent'、'removed')用于移除已安装包。
    update_cache        # 强制更新yum的cache。

name须要非常state来利用,假使state钦点为present/installed/latest将安装包,此中latest是设置新型包,默感到present。假如钦赐为absent/removed则用来卸载包。

在ansible中,超多地点都会并发present和absent的动静,它们日常都意味着指标是或不是应该存在如故不设有,也正是要开展的动作是创设和删除。

列出和ansible相关的包。

ansible centos -m yum -a "list=ansible" -f 6

安装包。

ansible centos -m yum -a "name=dos2unix state=installed" -o -f 6

安装当地的包,且清除有些包不安装。

ansible centos -m yum -a "name=/tmp/*.rpm exclude=*unix* state=present"

卸载包。

ansible centos -m yum -a "name=dos2unix state=removed" -o -f 6

1.2.5 包管理模块yum

ansible-doc -s yum
- name: Manages packages with the `yum' package manager
  action: yum
    disable_gpg_check   # 安装包时禁止gpgcheck,仅在state=present或latest时生效。
    disablerepo         # 禁用指定的repoid,多个repoid使用逗号分隔。
    enablerepo          # 明确使用该repoid
    exclude             # 排除哪些包不安装,仅在state=present或latest时生效。
    list                # 类似于yum list
    name=               # 指定安装的包名,可带上版本号.
    state               # 状态。('present'、'installed','latest')用于安装包,
                        # ('absent'、'removed')用于移除已安装包。
    update_cache        # 强制更新yum的cache。

name须要非常state来使用,就算state钦点为present/installed/latest将安装包,当中latest是安装新型包,默以为present。若是钦点为absent/removed则用于卸载包。

在ansible中,非常多地方都会出现present和absent的情景,它们平日都意味着目的是或不是相应存在依旧不设有,相当于要开展的动作是开创和删除。

列出和ansible相关的包。

ansible centos -m yum -a "list=ansible" -f 6

安装包。

ansible centos -m yum -a "name=dos2unix state=installed" -o -f 6

安装当地的包,且消弭有些包不安装。

ansible centos -m yum -a "name=/tmp/*.rpm exclude=*unix* state=present"

卸载包。

ansible centos -m yum -a "name=dos2unix state=removed" -o -f 6

1.2.6 配置yum源模块yum_repository

用来配置yum源。能够达成丰硕完整的yum饭店配置。可是经常只需轻巧的增添yum源就可以。所以,以下是轻巧版的用法和演示。

ansible-doc -s yum_repository
- name: Add or remove YUM repositories
  action: yum_repository
      baseurl      # 地址
      mirrorlist   # 设置mirrorlist地址
      description  # 描述信息
      enabled      # 是否启用该仓库,默认为yes
      file         # 保存此仓库的文件,不设置该项的话则默认以name选项中的名称命名,将自动以".repo"后缀结尾。
      gpgcheck     # 是否要进行gpgcheck
      name=        # 仓库的名称,要保证名称的唯一性
      reposdir     # 保存.repo文件的目录,默认/etc/yum.repos.d/
      state        # repo文件的状态,present/absent,默认present。

例如:

- name: Add repository
  yum_repository:
    name: aliyun_epel
    description: EPEL YUM repo
    baseurl: http://mirrors.aliyun.com/epel/7/$basearch/

- name: Add multiple repositories into a file
  yum_repository:
    name: epel
    description: EPEL YUM repo
    file: sohu_epel
    baseurl: http://mirrors.sohu.com/fedora-epel/7/$basearch/
    gpgcheck: no

ansible 192.168.100.63 -m yum_repository -a 'name=aliyun_epel description="epel repo" baseurl=http://mirrors.aliyun.com/epel/7/$basearch/ gpgcheck=no enabled=yes'

查看生成的repo文件。

[root@server2 ~]# ansible 192.168.100.63 -m shell -a "cat /etc/yum.repos.d/aliyun_epel.repo"      
192.168.100.63 | SUCCESS | rc=0 >>
[aliyun_epel]
baseurl = http://mirrors.aliyun.com/epel/7/$basearch/
enabled = 1
gpgcheck = 0
name = epel repo

1.2.6 配置yum源模块yum_repository

用以配置yum源。能够完成丰富完整的yum旅馆配置。可是通常只需轻巧的增添yum源就能够。所以,以下是回顾版的用法和示范。

ansible-doc -s yum_repository
- name: Add or remove YUM repositories
  action: yum_repository
      baseurl      # 地址
      mirrorlist   # 设置mirrorlist地址
      description  # 描述信息
      enabled      # 是否启用该仓库,默认为yes
      file         # 保存此仓库的文件,不设置该项的话则默认以name选项中的名称命名,将自动以".repo"后缀结尾。
      gpgcheck     # 是否要进行gpgcheck
      name=        # 仓库的名称,要保证名称的唯一性
      reposdir     # 保存.repo文件的目录,默认/etc/yum.repos.d/
      state        # repo文件的状态,present/absent,默认present。

例如:

- name: Add repository
  yum_repository:
    name: aliyun_epel
    description: EPEL YUM repo
    baseurl: http://mirrors.aliyun.com/epel/7/$basearch/

- name: Add multiple repositories into a file
  yum_repository:
    name: epel
    description: EPEL YUM repo
    file: sohu_epel
    baseurl: http://mirrors.sohu.com/fedora-epel/7/$basearch/
    gpgcheck: no

ansible 192.168.100.63 -m yum_repository -a 'name=aliyun_epel description="epel repo" baseurl=http://mirrors.aliyun.com/epel/7/$basearch/ gpgcheck=no enabled=yes'

查看生成的repo文件。

[root@server2 ~]# ansible 192.168.100.63 -m shell -a "cat /etc/yum.repos.d/aliyun_epel.repo"      
192.168.100.63 | SUCCESS | rc=0 >>
[aliyun_epel]
baseurl = http://mirrors.aliyun.com/epel/7/$basearch/
enabled = 1
gpgcheck = 0
name = epel repo

1.2.7 服务管理模块service

ansible-doc -s service
- name: Manage services.
  action: service
      enabled   # 设置服务为开机自启动,默认为no
      name=     # 服务名
      state     # 'started'和'stoped'分别启动和停止服务,它们是幂等操作,多次启动或停止服务的结果是一样的,
                # 也就是说对于运行中的服务不会再执行启动操作,同理停止也是一样。'restarted'总是重启服务,
                # 'reloaded'总是重读配置文件,如果服务是未运行状态,则'reloaded会启动服务。
                # (state和enabled两者至少要给一个)

设置httpd开机自运维。

ansible centos -m service -a 'name=httpd enabled=yes' -f 6 -o

启动httpd服务。

ansible centos -m service -a 'name=httpd state=started' -f 6 -o

1.2.7 服务管理模块service

ansible-doc -s service
- name: Manage services.
  action: service
      enabled   # 设置服务为开机自启动,默认为no
      name=     # 服务名
      state     # 'started'和'stoped'分别启动和停止服务,它们是幂等操作,多次启动或停止服务的结果是一样的,
                # 也就是说对于运行中的服务不会再执行启动操作,同理停止也是一样。'restarted'总是重启服务,
                # 'reloaded'总是重读配置文件,如果服务是未运行状态,则'reloaded会启动服务。
                # (state和enabled两者至少要给一个)

安装httpd开机自运营。

ansible centos -m service -a 'name=httpd enabled=yes' -f 6 -o

启动httpd服务。

ansible centos -m service -a 'name=httpd state=started' -f 6 -o

郑重声明:本文版权归美高梅163888所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。