一 Ansible的安装部署
1.1 PIP方式
- 安装PIP
略,可参考《001.Pip简介及使用》。
提示:建议将PIP升级到最新:pip install --upgrade pip。
- 安装依赖
1 [root@manage ~]# yum -y install gcc glibc-devel zlib-devel rpm-build openssl-devel
- 安装Ansible
1 [root@manage ~]# pip install ansible
1 [root@manage ~]# ansible --version #查看版本
1.2 YUM方式
- 安装epel源
1 [root@manage ~]# sudo yum install -y epel-release 2 [root@manage ~]# sudo sed -e 's!^mirrorlist=!#mirrorlist=!g' \ 3 -e 's!^#baseurl=!baseurl=!g' \ 4 -e 's!//download\.fedoraproject\.org/pub!//mirrors.ustc.edu.cn!g' \ 5 -e 's!http://mirrors\.ustc!https://mirrors.ustc!g' \ 6 -i /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel-testing.repo
- 安装依赖
1 [root@manage ~]# yum -y install gcc glibc-devel zlib-devel rpm-build openssl-devel
- 安装Ansible
1 [root@manage ~]# yum -y install ansible 2 [root@manage ~]# ansible --version #查看版本
二 Ansible目录及配置
2.1 Ansible目录结构
1 # rpm -ql ansible
配置文件目录:/etc/ansible
主要功能:Inventory主机信息配置、Ansible工具功能配置,所有Ansible配置均存放在该目录下;
执行文件目录:/usr/bin
主要功能:Ansible系列命令默认存放目录,Ansible所有可执行文件均存放在该目录下。
Lib库文件目录:/usr/lib/pythonX.X/site-packages/ansible
主要功能:系统当前默认的Python路径。
Help帮助文档目录:/usr/share/doc/ansble-X.X.X/
主要功能:Ansible所有相关帮助文件存放目录。
Man文档目录:/usr/share/man/man1/
2.2 Ansible配置文件解析
Ansible配置文件ansible.cfg默认位于/etc/ansible/目录下。
提示:ansible.cfg配置文件可以位于多个目录下,Ansible读取配置文件的顺序为:当前命令执行目录——>用户家目录下的.ansible.cfg——>/etc/ansible/ansible.cfg.其ansible.cfg配置的所有内容均可在命令行通过参数的形式传递或定义在Playbook中。
1 #…… 2 #inventory = /etc/ansible/hosts #定义Inventory 3 #library = /usr/share/my_modules/ #自定义lib库存放目录 4 #module_utils = /usr/share/my_module_utils/ 5 #remote_tmp = ~/.ansible/tmp #临时文件远程主机存放目录 6 #local_tmp = ~/.ansible/tmp #临时文件本地存放目录 7 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml 8 #forks = 5 #默认开启的并发数 9 #poll_interval = 15 #默认轮询时间间隔 10 #sudo_user = root #默认sudo用户 11 #ask_sudo_pass = True #是否需要sudo密码 12 #ask_pass = True #是否需要密码 13 #transport = smart #通信机制.默认值为’smart’
提示:如果本地系统支持 ControlPersist技术的话,将会使用(基于OpenSSH)‘ssh’,如果不支持将使用‘paramiko’.其他传输选项包括‘local’, ‘chroot’,’jail’等。
1 #remote_port = 22 #远程SSH端口,默认是22 2 #module_lang = C #模块和系统之间通信的计算机语言,默认是C语言 3 #module_set_locale = False 4 #gathering = implicit 5 #控制默认facts收集(远程系统变量),默认值为’implicit’, 每一次play,facts都会被收集 6 #gather_subset = all #定义获取fact的子集,默认全部 7 # gather_timeout = 10 8 #roles_path = /etc/ansible/roles #默认下载的Roles存放的目录 9 #host_key_checking = False #首次连接是否需要检查key认证,建议设置为False 10 #stdout_callback = skippy 11 #callback_whitelist = timer, mail 12 #task_includes_static = False 13 #handler_includes_static = False 14 #error_on_missing_handler = True 15 #sudo_exe = sudo 16 #如果在其他远程主机上使用另一种方式执sudu操作.可以使用该参数进行更换 17 #sudo_flags = -H -S -n #传递sudo之外的参数 18 #timeout = 10 #默认超时时间 19 #remote_user = root 20 #使用/usr/bin/ansible-playbook链接的默认用户名,如果不指定,会使用当前登录的用户名 21 #log_path = /var/log/ansible.log #执行日志存放目录 22 #module_name = command #默认执行模块 23 #executable = /bin/sh #用于执行脚本得解释器 24 #在sudo环境下产生一个shell交互接口. 用户只在/bin/bash的或者sudo限制的一些场景中需要修改 25 #hash_behaviour = replace #特定的优先级覆盖变量 26 #private_role_vars = yes
提示:默认情况下,角色中的变量将在全局变量范围中可见。为了防止这种情况,可以启用以上选项,只有tasks的任务和handlers得任务可以看到角色变量。
1 #jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n #允许开启Jinja2拓展模块 2 #private_key_file = /path/to/file #私钥文件存储位置 3 #vault_password_file = /path/to/vault_password_file #指定vault密码文件路径 4 #ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host} 5 #定义一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中 6 #ansible_managed = Ansible managed 7 #display_skipped_hosts = True #显示任何跳过任务的状态,默认是显示 8 #display_args_to_stdout = False 9 #error_on_undefined_vars = False 10 #如果所引用的变量名称错误的话, 是否让ansible在执行步骤上失败 11 #system_warnings = True 12 #允许禁用系统运行ansible相关的潜在问题警告 13 #deprecation_warnings = True 14 #允许在ansible-playbook输出结果中禁用“不建议使用”警告 15 # setting or adding warn=yes or warn=no to the end of the command line 16 # command_warnings = False 17 #当shell和命令行模块被默认模块简化的时,Ansible将默认发出警告 18 #nocolor = 1 #输出带上颜色区别, 开启/关闭:0/1 19 #action_plugins = /usr/share/ansible/plugins/action #action插件存放目录 20 #cache_plugins = /usr/share/ansible/plugins/cache #cache插件存放目录 21 #callback_plugins = /usr/share/ansible/plugins/callback #callback插件存放目录 22 #connection_plugins = /usr/share/ansible/plugins/connection #connection插件存放目录 23 #lookup_plugins = /usr/share/ansible/plugins/lookup #lookup插件存放目录 24 #inventory_plugins = /usr/share/ansible/plugins/inventory #Inventory插件存放目录 25 #vars_plugins = /usr/share/ansible/plugins/vars #vars插件存放目录 26 #filter_plugins = /usr/share/ansible/plugins/filter #filter插件存放目录 27 #test_plugins = /usr/share/ansible/plugins/test 28 [privilege_escalation] 29 #become=True #是否sudo 30 #become_metrod=sudo #sudo方式 31 #become_user=root #sudo后变为root用户 32 #become_ask_pass=False #sudo后是否验证密码
提示:出于安全考虑,可能需要以普通用户权限并赋予sudo来执行,以上部分配置主要针对sudo用户提权配置。
1 [paramiko_connection] 2 #record_host_keys=False #不记录新主机的key以提升效率 3 #pty=False #禁用sudo功能 4 [ssh_connection] 5 #scp_if_ssh = True #若连接类型是ssh,使ansible使用scp 6 #pipelining=False #管道加速,需配合requiretty使用方可生效
提示:Ansible默认使用SSH协议连接对端主机,SSH pipelining 是一个加速Ansible执行速度的简单方法。ssh pipelining 默认关闭,之所以默认关闭是为了兼容不同的sudo配置,主要是requiretty选项。若不使用sudo,建议开启。打开此选项可以减少ansible执行没有传输时ssh在被控机器上执行任务的连接数。不过,若使用sudo,必须关闭requiretty选项。
1 [accelerate] 2 #accelerate_port=5099 #加速连接端口 3 #accelerate_timeout=30 #命令执行超时时间,单位为秒 4 #accelerate_connect_timeout=5.0 #连接超时时间,单位为秒 5 #accelerate_daemon_timeout=30 #上一个活动连接的时候,单位为分钟 6 #accelerate_multi_key=yes
提示:以上部分为提升Ansible连接速度配置,多数保持默认即可。
1 [selinux] 2 #libvirt_lxc_noseclabel=yes 3 #将此设置为yes,以允许libvirt_lxc连接在没有SELinux的情况下工作。 4 [colors] 5 #highlight = white 6 #verbose = blue 7 #warn = bright purple 8 #error = red 9 #debug = dark gray 10 #deprecate = purple 11 #skip = cyan 12 #unreachable = red 13 #ok = green 14 #changed = yellow 15 #diff_add = green 16 #diff_remove = red 17 #diff_lines = cyan
参考文档:https://www.jianshu.com/p/443f612c3d5c