Ansible安装好以后的配置文件有以下两种:
一、yum安装,配置文件默认路径为:
/etc/ansible/ansible.cfg
二、源码包安装,配置文件路径须要从软件包里面拷贝,以下:html
[root@Ansible ~]# mkdir /etc/ansible --建立ansible目录 [root@Ansible ~]# cp /usr/src/ansible-2.5.0/examples/* /etc/ansible/ --拷贝文件 *
该配置文件中定义了Ansible的主机的默认配置部分,如默认是否须要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。python
如下是配置文件的内容和详细说明:linux
[root@Ansible ~]# vim /etc/ansible/ansible.cfg 10 [defaults] --通用默认配置 14 #inventory = /etc/ansible/hosts --这个是默认库文件位置,脚本,或者存放可通讯主机的目录 15 #library = /usr/share/my_modules/ --Ansible默认搜寻模块的位置 16 #module_utils = /usr/share/my_module_utils/ 17 #remote_tmp = ~/.ansible/tmp --Ansible经过远程传输模块到远程主机,而后远程执行,执行后在清理现场.在有些场景下,你也许想使用默认路径但愿像更换补丁同样使用 18 #local_tmp = ~/.ansible/tmp 19 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml 20 #forks = 5 --在与主机通讯时的默认并行进程数 ,默认是5d 21 #poll_interval = 15 --当具体的poll interval没有定义时,多少时间回查一下这些任务的状态, 默认值是5秒 22 #sudo_user = root --sudo使用的默认用户 ,默认是root 23 #ask_sudo_pass = True --用来控制Ansible playbook 在执行sudo以前是否询问sudo密码.默认为no 24 #ask_pass = True --控制Ansible playbook 是否会自动默认弹出密码 25 #transport = smart --通讯机制.默认 值为’smart’。若是本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,若是不支持讲使用‘paramiko’.其余传输选项包括‘local’, ‘chroot’,’jail’等等 26 #remote_port = 22 --远程SSH端口。 默认是22 27 #module_lang = C --模块和系统之间通讯的计算机语言,默认是C语言 28 #module_set_locale = False 36 #gathering = implicit --控制默认facts收集(远程系统变量). 默认值为’implicit’, 每一次play,facts都会被收集 59 #roles_path = /etc/ansible/roles -- roles 路径指的是’roles/’下的额外目录,用于playbook搜索Ansible roles 62 #host_key_checking = False --检查主机密钥 87 #sudo_exe = sudo --若是在其余远程主机上使用另外一种方式执sudu操做.可使用该参数进行更换 89 # What flags to pass to sudo --传递sudo以外的参数 91 #sudo_flags = -H -S –n 94 #timeout = 10 --ssh超时时间 98 #remote_user = root --使用/usr/bin/ansible-playbook连接的默认用户名,若是不指定,会使用当前登陆的用户名 102 #log_path = /var/log/ansible.log --日志文件存放路径 105 #module_name = command --ansible命令执行默认的模块 110 #executable = /bin/sh --在sudo环境下产生一个shell交互接口. 用户只在/bin/bash的或者sudo限制的一些场景中须要修改 115 #hash_behaviour = replace --特定的优先级覆盖变量 123 #jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n --容许开启Jinja2拓展模块 127 #private_key_file = /path/to/file --私钥文件存储位置 131 #vault_password_file = /path/to/vault_password_file --设置密码文件,也能够经过命令行指定“–vault-password-file” 136 #ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H: %M:%S by {uid} on {host} --这个设置能够告知用户,Ansible修改了一个文件,而且手动写入的内容可能已经被覆盖 145 #display_skipped_hosts = True --显示任何跳过任务的状态 ,默认是显示 160 #error_on_undefined_vars = False -- 若是所引用的变量名称错误的话, 将会致使ansible在执行步骤上失败 166 #system_warnings = True --容许禁用系统运行ansible相关的潜在问题警告 171 #deprecation_warnings = True --容许在ansible-playbook输出结果中禁用“不建议使用”警告 179 # command_warnings = False --当shell和命令行模块被默认模块简化的时,Ansible 将默认发出警告 203 #bin_ansible_callbacks = False --用来控制callback插件是否在运行 /usr/bin/ansible 的时候被加载. 这个模块将用于命令行的日志系统,发出通知等特性 208 #nocows = 1 --默认ansible能够调用一些cowsay的特性 开启/禁用:0/1 226 #nocolor = 1 --输出带上颜色区别, 开启/关闭:0/1
Ansible官方配置文件
http://www.ansible.com.cn/docs/intro_configuration.html#environmental-configurationgit
Ansible默认的配置都是注释掉的(#),能够经过去掉#来进行开启相应的配置服务。好比启用日志,更改相应的hosts文件的路径等等。如查看日志,当再次操做Ansible的时候就能够查看生成的日志了。github
[root@Ansible ~]# vim /etc/ansible/ansible.cfg 102 log_path = /var/log/ansible.log --把注释(#)去掉 [root@Ansible ~]# ansible web -m ping --执行Ansible命令 192.168.8.55 | SUCCESS => { "changed": false, "ping": "pong" } [root@Ansible ~]# cat /var/log/ansible.log --查看日志 2018-04-19 15:22:05,533 p=80580 u=root | 192.168.8.55 | SUCCESS => { "changed": false, "ping": "pong" }
安装完Ansible后,发现Ansible一共为咱们提供了十个指令:ansible、ansible-console、ansible-inventory、ansible-vault、ansible-config、ansible-doc、ansible-playbook、ansible-connection、ansible-galaxy、ansible-pull。web
[root@Ansible ~]# ansible -h Usage: ansible <host-pattern> [选项]
ansible是指令核心部分,其主要用于执行ad-hoc命令,即单条命令。默认后面须要跟主机和选项部分,默认不指定模块时,使用的是command模块。如:docker
[root@Ansible ~]# ansible 192.168.8.66 -a 'uptime' 192.168.8.66 | SUCCESS | rc=0 >> 15:27:24 up 1 day, 1:39, 4 users, load average: 0.07, 0.05, 0.05 [root@Ansible ~]# ansible –help Usage: ansible <host-pattern> [options] **命令选项:** -a MODULE_ARGS, --args=MODULE_ARGS # 模块的参数 --ask-vault-pass # vault 密码 -B SECONDS, --background=SECONDS # 异步运行时,多长时间超时 -C, --check # 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化 -D, --diff # 当更改文件和模板时,显示这些文件得差别,比--check效果好 -e EXTRA_VARS, --extra-vars=EXTRA_VARS # 添加附加变量,好比key=value,yaml,json格式 -f FORKS, --forks=FORKS # 指定定要使用的并行进程数,默认为5个 -h, --help # 显示此帮助信息并退出 -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY # 指定主机清单文件或逗号分隔的主机,默认为/etc/ansible/hosts(或者从源码包拷贝) -l SUBSET, --limit=SUBSET # 进一步限制所选主机/组模式,只执行-l 后的主机和组。 也能够这样使用-l @retry_hosts.txt --list-hosts # 输出匹配主机的列表,不执行其余任何操做 -m MODULE_NAME, --module-name=MODULE_NAME # 要执行的模块,默认为command -M MODULE_PATH, --module-path=MODULE_PATH # 要执行的模块的路径,默认为/usr/share/ansible/ -o, --one-line # 压缩输出,摘要输出.尝试一切都在一行上输出 --playbook-dir=BASEDIR # 因为此工具不使用剧本,所以将其用做替代剧本目录。这为不少功能设置了相对路径,包括roles/ group_vars/etc等 -P POLL_INTERVAL, --poll=POLL_INTERVAL # 若是使用-B,则设置轮询间隔,默认为15秒 --syntax-check # 对playbook进行语法检查,且不执行playbook -t TREE, --tree=TREE # 日志输出到该目录,日志文件名会以主机名命名 --vault-id=VAULT_IDS # 要使用的vault标识 --vault-password-file=VAULT_PASSWORD_FILES # vault密码文件 -v, --verbose # 输出执行的详细信息,使用-vvv得到更多,-vvvv 启用链接调试 --version # 显示程序的版本号并退出 **链接选项:** -k, --ask-pass # 要求用户输入请求链接密码 --private-key=PRIVATE_KEY_FILE, --key-file=PRIVATE_KEY_FILE # 私钥路径,使用这个文件来验证链接 -u REMOTE_USER, --user=REMOTE_USER # 链接远程用户,默认为空 -c CONNECTION, --connection=CONNECTION # 链接类型,默认smart,支持local ssh 和 paramiko -T TIMEOUT, --timeout=TIMEOUT # 指定默认超时时间,默认是10S --ssh-common-args=SSH_COMMON_ARGS # 指定要传递给sftp/scp/ssh的常见参数 (例如 ProxyCommand) --sftp-extra-args=SFTP_EXTRA_ARGS # 指定要传递给sftp,例如-f -l --scp-extra-args=SCP_EXTRA_ARGS # 指定要传递给scp,例如 -l --ssh-extra-args=SSH_EXTRA_ARGS # 指定要传递给ssh,例如 -R **特权升级选项:** -s, --sudo # 使用sudo (nopasswd)运行操做(不推荐使用) -U SUDO_USER, --sudo-user=SUDO_USER # sudo 用户,默认为root(不推荐使用) -S, --su # 使用su运行操做(不推荐使用) -R SU_USER, --su-user=SU_USER # su 用户,默认为root(不推荐使用) -b, --become # 运行操做(不暗示密码提示) --become-method=BECOME_METHOD # 权限升级方法使用,默认为sudo,有效选择:sudo 、su、pbrun、pfexec、doas、dzdo、ksu、runas、pmrun、enable --become-user=BECOME_USER # 使用哪一个用户运行(默认为root) --ask-su-pass # 要求输入su密码(不推荐使用) -K, --ask-become-pass # 请求特权升级密码
[root@Ansible ~]# ansible-playbook -h Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
相对于ansible,增长了下列选项:shell
--flush-cache # 清除fact缓存
--syntax-check # 语法检查
--force-handlers # 若是任务失败,也要运行handlers
--list-tags # 列出全部可用的标签
--list-tasks # 列出将要执行的全部任务
--skip-tags=SKIP_TAGS # 跳过运行标记此标签的任务
--start-at-task=START_AT_TASK # 在此任务处开始运行
--step # 一步一步:在运行以前确认每一个任务
-t TAGS, --tags=TAGS # 只运行标记此标签的任务json
该指令对于需反复执行的、较为复杂的任务,咱们能够经过定义 Playbook 来搞定。它容许使用变量、条件、循环、以及模板,也能经过角色及包含指令来重用既有内容。其经过读取playbook 文件后,执行相应的动做,这个后面会详细讲到。vim
[root@Ansible ~]# ansible-doc -h Usage: ansible-doc [-l|-F|-s] [选项] [-t <插件类型> ] [插件]
该指令用于查看模块信息,经常使用参数有两个-l 和 -s ,具体以下:
--# 列出全部已安装的模块 [root@Ansible ~]# ansible-doc -l --# 查看具体某模块的用法,这里查看command模块 [root@Ansible ~]# ansible-doc -s command
[root@Ansible ~]# ansible-pull -h Usage: ansible-pull -U <库> [选项] [<playbook.yml>]
该指令使用须要谈到ansible的另外一种模式---pull 模式,这和咱们日常常常用的push模式恰好相反,其适用于如下场景:你有数量巨大的机器须要配置,即便使用很是高的线程仍是要花费不少时间;你要在一个没有网络链接的机器上运行Anisble,好比在启动以后安装。
[root@Ansible ~]# ansible-config -h Usage: ansible-config [view|dump|list] [--help] [选项] [ansible.cfg]
该指令是一个配置命令行类。查看、编辑、管理Ansible配置。
[root@Ansible ~]# ansible-galaxy -h Usage: ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
ansible-galaxy 该指令用于共享和下载roles的工具,方便的从https://galaxy.ansible.com/ 站点下载第三方扩展模块,咱们能够形象的理解其相似于centos下的yum、python下的pip或easy_install 。以下示例:
[root@Ansible ~]# ansible-galaxy install aeriscloud.docker - downloading role 'docker', owned by aeriscloud - downloading role from https://github.com/AerisCloud/ansible-docker/archive/v1.2.1.tar.gz - extracting aeriscloud.docker to /etc/ansible/roles/aeriscloud.docker - aeriscloud.docker was installed successfully
这个安装了一个aeriscloud.docker组件,前面aeriscloud是galaxy上建立该模块的用户名,后面对应的是其模块。在实际应用中也能够指定txt或yml 文件进行多个组件的下载安装。这部分能够参看官方文档。
[root@Ansible ~]# ansible-vault -h Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml]
该指令是一个文件加解密工具,应用于配置文件中含有敏感信息,又不但愿他能被人看到,vault能够帮你加密/解密这个配置文件,属高级用法。主要对于playbooks里好比涉及到配置密码或其余变量时,能够经过该指令加密,这样咱们经过cat看到的会是一个密码串类的文件,编辑的时候须要输入事先设定的密码才能打开。这种playbook文件在执行时,须要加上 –ask-vault-pass参数,一样须要输入密码后才能正常执行。具体该部分能够参查官方博客。
[root@Ansible ~]# ansible-inventory -h Usage: ansible-inventory [options] [host|group]
该指令用于在Ansible看到它时显示或转储配置的清单信息。
[root@Ansible ~]# ansible-console -h Usage: ansible-console [<host-pattern>] [options]
该指令是一个REPL控制台容许执行Ansible任务(基于dominis’ansible-shell)。
该指令是一个链接类型,能够是 local、ssh 或 paramiko,ansible1.2 以前默认为 paramiko。
Ansible官方文档:
http://docs.ansible.com/ansible/latest/search.html?q=ansible-doc&check_keywords=yes&area=default
以上就是Ansible经常使用的命令格式及参数,在接下来的学习中会逐步运用的。
所谓 ad-hoc 命令是什么呢?
这实际上是一个概念性的名字,是相对于写 Ansible playbook 来讲的。相似于在命令行敲入shell命令和写shell scripts二者之间的关系。
若是咱们敲入一些命令去比较快的完成一些事情,而不须要将这些执行的命令特别保存下来,这样的命令就叫作 ad-hoc 命令。
Ansible提供两种方式去完成任务
(1)ad-hoc命令
执行shell命令,或shell脚本。能够执行一些简单的命令,不须要将这些执行的命令特别保存下来。适合执行简单的命令。
(2)Ansible playbook
能够解决比较复杂的任务,能够将命令保存下来。适合执行配置管理或部署客户机。
Ad-Hoc是指Ansible下临时执行的一条命令,而且不须要保存的命令,对于复杂的命令会使用playbook。Ad-hoc的执行依赖于模块,Ansible官方提供了大量的模块。如:command、raw、shell、file、cron等,具体能够经过ansible-doc -l 进行查看。可使用ansible-doc -s module来查看某个模块的参数,也可使用ansible-doc help module来查看该模块更详细的信息。
接下来咱们详细讲解该命令的用法:
(1)命令说明
ansible [主机或组] -m [模块名] -a ['模块参数'] [ansible参数]
主机和组,是在/etc/ansible/hosts 里进行指定的部分,固然动态Inventory 使用的是脚本从外部应用里获取的主机;
模块名,能够经过ansible-doc -l 查看目前安装的模块,默认不指定时,使用的是command模块,具体能够查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默认模块能够在该配置文件中进行修改;
模块参数,能够经过 “ansible-doc -s 模块名” 查看具体的用法及后面的参数;
ansible参数,能够经过ansible命令的帮助信息里查看到,这里有不少参数能够供选择,如是否须要输入密码、是否sudo等。
(2)后台执行
当命令执行时间比较长时,也能够放到后台执行,使用-B、-P参数,以下:
ansible all -B 3600 -a "/usr/bin/long_running_operation --do-stuff" # 后台执行命令3600s,-B 表示后台执行的时间 ansible all -m async_status -a "jid=123456789" # 检查任务的状态 ansible all -B 1800 -P 60 -a "/usr/bin/long_running_operation --do-stuff" # 后台执行命令最大时间是1800s即30分钟,-P 每60s检查下状态,默认15s
(3)命令执行模块
命令执行模块包含以下4个模块:
说明:raw模块和comand、shell 模块不一样的是其没有chdir、creates、removes参数,chdir参数的做用就是先切到chdir指定的目录后,再执行后面的命令,这在后面不少模块里都会有该参数 。接下来会进行详细的介绍:
command模块包含以下选项:
例1 使用chdir的示例
[root@Ansible ~]# ansible 192.168.8.66 -m command -a 'chdir=/tmp touch test.txt' 192.168.8.66 | SUCCESS | rc=0 >> --# 结果显示:进入tmp目录而后建立test.txt文件 [root@Ansible ~]# ansible 192.168.8.66 -m shell -a 'chdir=/tmp touch test.txt' 192.168.8.66 | SUCCESS | rc=0 >> --# 结果显示:进入tmp目录而后建立test.txt文件 [root@Ansible ~]# ansible 192.168.8.66 -m raw -a 'chdir=/tmp touch test.txt' 192.168.8.66 | SUCCESS | rc=0 >> Shared connection to 192.168.8.66 closed. --# 结果显示:进入当前执行用户的家目录而后建立test.txt文件
说明:三个命令都会返回执行成功的状态。不过实际上只有前两个文件会被建立成功。使用raw模块执行的结果文件事实上也被正常建立了,不过不是在chdir指定的目录,而是在当前执行用户的家目录。
例2 使用creates与removes示例
--# 当/tmp/test.txt文件存在时,则不执行who指令;则反之 [root@Ansible ~]# ansible 192.168.8.66 -m command -a 'creates=/tmp/test.txt who' 192.168.8.66 | SUCCESS | rc=0 >> skipped, since /tmp/test.txt exists --# 当/tmp/test.txt文件存在时,则执行who指令;则反之 [root@Ansible ~]# ansible 192.168.8.66 -m command -a 'removes=/tmp/test.txt who' 192.168.8.66 | SUCCESS | rc=0 >> root tty1 2018-04-17 17:07 root pts/0 2018-04-19 16:51 (192.168.8.1) root pts/1 2018-04-19 17:16 (192.168.8.55)
例3 script模块实例
首先在Ansible服务器上建立一个脚本并赋予可执行权限
[root@Ansible ~]# vim script.sh #/bin/bash ifconfig ens33 df -h [root@Ansible ~]# chmod +x script.sh [root@Ansible ~]# ansible 192.168.8.66 -m script -a 'script.sh' 192.168.8.66 | SUCCESS => { "changed": true, "rc": 0, "stderr": "Shared connection to 192.168.8.66 closed.\r\n", "stdout": …… "stdout_lines": [ "ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500", " inet 192.168.8.66 netmask 255.255.255.0 broadcast 192.168.8.255", …… "", "文件系统 容量 已用 可用 已用% 挂载点", "/dev/sda3 28G 1.7G 26G 7% /", "devtmpfs 983M 0 983M 0% /dev", "tmpfs 993M 0 993M 0% /dev/shm", "tmpfs 993M 8.7M 984M 1% /run", "tmpfs 993M 0 993M 0% /sys/fs/cgroup", "/dev/sda1 497M 109M 389M 22% /boot", "tmpfs 199M 0 199M 0% /run/user/0" ] }