ansible 入门学习(一)
一,ansible 目录结构
(来自于ansible权威指南)
二,ansible.cfg 配置项说明
/etc/ansible/ansible.cfg -->
————————————————————————————————————————————————————————————
- ANSIBLE_CFG 环境变量,可以定义配置文件的位置
- ansible.cfg 存在于当前工作目录
- ansible.cfg 存在与当前用户家目录
- /etc/ansible/ansible.cfg
ansible 配置文件默认存使用 /etc/ansible/ansible.cfg
hosts文件默认存使用 /etc/ansible/hosts
[defaults]
配置 | 说明 |
---|---|
#inventory = /etc/ansible/hosts | 指定主机清单文件 |
#library = /usr/share/my_modules/ | 指定模块地址 |
#remote_tmp = $HOME/.ansible/tmp | 指定远程执行的路径 |
#local_tmp = $HOME/.ansible/tmp | ansible 管理节点得执行路径 |
#forks = 5 | 置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理 |
#poll_interval = 15 | 轮询间隔 |
#sudo_user = root | sudo默认用户 |
#ask_sudo_pass = True | 是否需要用户输入sudo密码 |
#ask_pass = True | 是否需要用户输入连接密码 |
#transport = smart | |
#remote_port = 22 | 远程链接的端口 |
#module_lang = C | 这是默认模块和系统之间通信的计算机语言,默认为’C’语言. |
#module_set_locale = True | |
#gathering = implicit | |
#gather_subset = all | 定义获取fact的子集,默认全部 |
#roles_path = /etc/ansible/roles | 角色存储路径 |
#host_key_checking = False | 跳过ssh 首次连接提示验证部分,False表示跳过。 |
#stdout_callback = skippy | |
#callback_whitelist = timer, mail | |
#task_includes_static = True | |
#handler_includes_static = True | |
#sudo_exe = sudo | sudo的执行文件名 |
#sudo_flags = -H -S -n | sudo的参数 |
#timeout = 10 | 连接超时时间 |
#remote_user = root | 指定默认的远程连接用户 |
#log_path = /var/log/ansible.log | 指定日志文件 |
#module_name = command | 指定ansible默认的执行模块 |
#executable = /bin/sh | 用于执行脚本得解释器 |
#hash_behaviour = replace | 如果变量重叠,优先级更高的一个是替换优先级低得还是合并在一起,默认为替换 |
#private_role_vars = yes | 默认情况下,角色中的变量将在全局变量范围中可见。 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量。 |
#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n | jinja2的扩展应用 |
#private_key_file = /path/to/file | 指定私钥文件路径 |
#vault_password_file = /path/to/vault_password_file | 指定vault密码文件路径 |
#ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host} | 定义一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中 |
#display_skipped_hosts = True | 如果设置为False,ansible 将不会显示任何跳过任务的状态.默认选项是显示跳过任务的状态 |
#display_args_to_stdout = False | |
#error_on_undefined_vars = False | 如果所引用的变量名称错误的话, 是否让ansible在执行步骤上失败 |
#system_warnings = True | |
#deprecation_warnings = True | |
#command_warnings = False | |
#action_plugins = /usr/share/ansible/plugins/action | action模块的存放路径 |
#callback_plugins = /usr/share/ansible/plugins/callback | callback模块的存放路径 |
#connection_plugins = /usr/share/ansible/plugins/connection | connection模块的存放路径 |
#lookup_plugins = /usr/share/ansible/plugins/lookup | lookup模块的存放路径 |
#vars_plugins = /usr/share/ansible/plugins/vars | vars模块的存放路径 |
#test_plugins = /usr/share/ansible/plugins/test | test模块的存放路径 |
#strategy_plugins = /usr/share/ansible/plugins/strategy | strategy模块的存放路径 |
#bin_ansible_callbacks = False | |
#nocows = 1 | |
#cow_selection = default | |
#cow_selection = random | |
#cow_whitelist=bud-frogs,bunny,cheese,daemon,default,dragon,elephant-in-snake,elephant,eyes, | |
#nocolor = 1 | 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’: |
#fact_caching = memory | fact值默认存储在内存中,可以设置存储在redis中,用于持久化存储 |
#retry_files_enabled = False | 当playbook失败得情况下,一个重试文件将会创建,默认为开启此功能 |
#retry_files_save_path = ~/.ansible-retry | 重试文件的路径,默认为当前目录下.ansible-retry |
#squash_actions = apk,apt,dnf,package,pacman,pkgng,yum,zypper | Ansible可以优化在循环时使用列表参数调用模块的操作。 而不是每个with_项调用模块一次,该模块会一次调用所有项目一次。该参数记录哪些action是这样操作得。 |
#no_log = False | 任务数据的日志记录,默认情况下关闭 |
#no_target_syslog = False | 防止任务的日志记录,但只在目标上,数据仍然记录在主/控制器上 |
#allow_world_readable_tmpfiles = False | |
#var_compression_level = 9 | 控制发送到工作进程的变量的压缩级别。 默认值为0,不使用压缩。 此值必须是从0到9的整数。 |
#module_compression = 'ZIP_DEFLATED' | 指定压缩方法,默认使用zlib压缩,可以通过ansible_module_compression来为每个主机设置 |
#max_diff_size = 1048576 | 控制--diff文件上的截止点(以字节为单位),设置0则为无限制(可能对内存有影响) |
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
[paramiko_connection]
#record_host_keys=False
#pty=False
[ssh_connection]
配置 | 说明 |
---|---|
#ssh_args = -o ControlMaster=auto -o ControlPersist=60s | ssh连接时得参数 |
#control_path = %(directory)s/ansible-ssh-%%h-%%p-%%r | 保存ControlPath套接字的位置 |
#pipelining = False | SSH pipelining 是一个加速 Ansible 执行速度的简单方法。ssh pipelining 默认是关闭,之所以默认关闭是为了兼容不同的 sudo 配置,主要是 requiretty 选项。如果不使用 sudo,建议开启。打开此选项可以减少 ansible 执行没有传输时 ssh 在被控机器上执行任务的连接数。不过,如果使用 sudo,必须关闭 requiretty 选项。 |
#scp_if_ssh = True | 该项为True时,如果连接类型是ssh,使ansible使用scp,为False是,ansible使用sftp。默认为sftp |
#sftp_batch_mode = False | 该项为False时,sftp不会使用批处理模式传输文件。 这可能导致一些类型的文件传输失败而不可捕获,但应该只有在您的sftp版本在批处理模式上有问题时才应禁用 |
[accelerate]
加速配置
#accelerate_port = 5099
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0
#accelerate_daemon_timeout = 30
#accelerate_multi_key = yes
[selinux]
配置 | 说明 |
---|---|
#special_context_filesystems=nfs,vboxsf,fuse,ramfs | 文件系统在处理安全上下文时需要特殊处理,定义复制现有上下文的文件系统 |
#libvirt_lxc_noseclabel = yes | 将此设置为yes,以允许libvirt_lxc连接在没有SELinux的情况下工作。 |
[colors]
定义输出颜色
#highlight = white
#verbose = blue
#warn = bright purple
#error = red
#debug = dark gray
#deprecate = purple
#skip = cyan
#unreachable = red
#ok = green
#changed = yellow
#diff_add = green
#diff_remove = red
#diff_lines = cyan
三,ansible使用
01)配置host-----------》
02)参数说明
ansible <host-pattern> [options]
<host-pattern> 这个就是Inventroy中定义的主机或者主机组 <> 这个选项内容是必须要有的
[options]是Ansible参数选项 [ ]任选参数
-m NAME,--module-name=NAME:执行使用的模块
-u USERNAME,--user=USERNAME 指定远程主机以USERNAME执行
-s --sudo:相当于sudo
-U SUDO_USERNAME,--sudo-user=SUDO_USERNAME 使用sudo
ansible all -m ping ----->在这个之前看我expect文章配置ssh+key全网分发,本身是具有分发的,你可以试试
ok
三,ansible系列命令详解
01,ansible
临时性操作,二次开发接口的调用,没有规律的性的操作
如ansible all -m ping
复制文件到目标上
ansible all -m copy -a “src=/server/seript dest=/tmp/tset owner=root group=root mode=644 backup=yes”
返回颜色有三种:红色 绿色 橘黄色
红色:代表执行异常
绿色: 执行成功
橘黄色:执行成功但是目标存在状态变化
02,ansible-galaxy
这个功能可以理解为git与pip的功能,安装软件
命令格式
ansible-galaxy [ init | info | install | list | remove ] [ -- help ] [ option ]
001) [ init | info | install | list | remove ]
0001)init :初始化本地指定软件的配置
0002)info : 列表指定的详细信息
0003)install :下载并安装galaxy指定de软件到本地
0004)list : 列出本地已下载的指定软件
0005)remove :删除一下在的指定软件
002) [ -- help ]
前面的内容进行帮组
003)[ option ]
-f, --force Force overwriting an existing role
强制覆盖
-h, --help show this help message and exit
显示这个帮助信息和退出
-c, --ignore-certs Ignore SSL certificate validation errors.
忽略SSL证书验证错误。
--init-path=INIT_PATH
The path in which the skeleton role will be created.
The default is the current working directory.
默认值是当前工作目录。
--offline Don't query the galaxy API when creating roles
离线时,在创建角色时不要查询galaxy API
--role-skeleton=ROLE_SKELETON
The path to a role skeleton that the new role should be based upon.
03,Ansible-pull
pull工作模式(ansible默认使用push模式)
适合场景:1,机器数量巨大需要配置,效率高,
2,在刚刚启动的,没有网络上的主机运行
04,Ansible-doc
Ansible模块文档说明,相当于linux man
05,Ansible-playbook
使用率超级高的模块
工作机制:通过读写预编译的playbook文档实现批量管理
play具有编写简单,可定制性高,灵活方便,可以固话日常所有操作,
06,Ansible-vault
用于配置文件加密
格式:
ansible-vault [ create | decrypt | edit | encrypt | encrypt_string | rekey |view ] [ options ] [vaultfile.yml]
07,ansible-console
用户交互式工具
四,host
ansible的配置主机配置文件默认在/etc/ansible/hosts
在执行 的时候我们是可以指定文件读取的
- i 参数或者 --inventory-file
定义主机的内容配置
1)直接为IP
2)既可以有IP 也可以有hostname
3)支持多台一起写
4)可以是数据库
inventroy ssh 相关参数
ansible_ssh_host:指定连接的主机
ansible_ssh_port:指定ssh连接端口
ansible_ssh_user:指定ssh连接用户
ansible_ssh_pass:指定ssh连接密码
ansible_sudo_pass:指定连接的sudo密码
ansible_ssh_private_key_file:指定特有的私钥文件
五,ansible正则
1)匹配所有aLL
ansible all -m ping
-->两者是一样的表示所有主机
ansible “*” -m ping
ansible 10.0.0.* -m ping
扫描存活ip
2) 逻辑或(or)
ansible 中或使用 : 表示
3)逻辑非(!)
表示在这个组的但是不再另一个组的主机
4)逻辑与(&)
表示两个组同时存在的主机
5)模糊匹配
* 匹配0个或多个任意字符
6)域切割
python切割方式差不多
【server】
10.0.0.0
10.0.0.1
10.0.0.1
server[0] ==>10.0.0.0
server[-1] ==>10.0.0.2
server0:1] ==>10.0.0.0,10.0.0.1
server[1:] ==>10.0.0.1,10.0.0.2
7)正则
对主机进行正则匹配
六,Ansible AD-Hoc命令集用法
及命令行执行
- -v,--verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
- -i PATH,--inventory=PATH:指定inventory信息,默认/etc/absible/hosts。
- -f NUM,--forks=NUM:并发线程数,默认5个线程。
- --private-key=PRIVATE_KEY_FILE:指定密钥文件。
- -m NAME,--module-name=NAME:指定执行使用的模块。
- -M DIRECTORY,--module-path=DIRECTORY:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
- -a 'ARGUMENTS',--args='ARGUMENTS':模块参数。
- -k,--ask-pass SSH:认证密码。
- -K,--ask-sudo-pass sudo:用户的密码(--sudo时使用)。
- -o,--one-line:标准输出至一行。
- -s,--sudo:相当于Linux系统下的sudo命令。
- -t DIRECTORY,--tree=DIRECTORY:输出信息至DIRECTORY目录下,结果文件以远程主机名命名。
- -T SECONDS,--timeout=SECONDS:指定连接远程主机的最大超时,单位是秒。
- -B NUM,--background=NUM:后台执行命令,超NUM秒后中止正在执行的任务。
- -P NUM,--poll=NUM:定期返回后台任务进度。
- -u USERNAME,--user=USERNAME:指定远程主机以USERNAME运行命令。
- -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME:使用sudo,相当于Linux下的sudo命令。
- -c CONNECTION,--connection=CONNECTION:指定连接方式,可用选项paramiko(SSH)、ssh、local,local方式常用于crontab和kickstarts。
- -l SUBSET,--limit=SUBSET:指定运行主机。
- -l ~REGEX,--limit=~REGEX:指定运行主机(正则)。
- --list-hosts:列出符合条件的主机列表,不执行任何命令
ping
hostname执行过程信息
ansible执行流程介绍
列出组的主机列表
对10.0.0.71的服务器以root执行sleep20,设置最大连接超时时长为2S,设置为后台运行
执行没2s输出一次进度,5s未执行完则退出
通过命令查看系统设置
shell模块使用
七,ansiable-doc
ansible-doc -l 查看能用的模块
yum 实战:
给一台主机安装一个软件
查看命令是否成功
显示的信息:
changed :主机是否有变更,true为有,false 为没有,第一次安装一般都是ture 否则false
msg:安装过程
rc:0 结果返回码
给负载均衡服务器安装nginx
linux 用户管理
user模块介绍[转]
ansible创建用户
ansible server -m user -a "name=test shell=/bin/bash groups=root append=yes home=/home/test state=present"
修改属主:
ansible server -m user -a "name=test groups=test append=no"
更改用户属性
设置用户登入过期时间
删除用户
ansible server -m user -a "name=test state=absent remove=yes"
没有了
更改用户密码
下一期见。。。。。。