E-mail: 1226032602@qq.com
https://docs.ansible.com/
自动化运维工具ansible
ansible基于python开发的自动化运维工具
其功能实现基于SSH远程连接服务
批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
1、不需要单独安装客户端,基于sshd服务
2、不需要服务端
3、依靠大量的模块实现
- user
- inventory
- modules (core modules, custom modules)
- playbook
- plugin
- connection plugin
- public/private
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#ansible-configuration-settings
- ANSIBLE_ConFIG (如果设置了环境变量)
- ansible.cfg (工作目录中)
- ~/.ansible.cfg (家目录中)
- /etc/ansible/ansible.cfg
/opt/ansible-project1
ansible.cfg
vim /etc/ansible/hosts
ansible及客户端都添加sudo授权用户
/etc/ansible/ansible.cfg
/etc/ansible/ansible.cfg
- 绿色: 表示查看信息,对远程主机未做改动的命令
- 红色: 批量管理产生错误信息
- 黄色: 对远程主机做了相应改动
- 粉色: 对操作提出建议或忠告
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
/etc/ansible/hosts
In INI:
In YAML:
In INI:
In YAML:
vim ansible.cfg
cat inventory/part1
cat inventory/part2
group_vars/和host_vars/目录可以存在于playbooks目录或inventory目录中。如果两个路径都存在,则playbook目录中的变量将覆盖inventory目录中设置的变量。
相关的Host和Group变量可以放在/etc/ansible/host_vars/和/etc/ansible/group_vars/下的主机同名目录中的文件,也支持’.yml’、‘.yaml’和’.json’为后缀的YMAL和JSON文件
group_vars目录下的文件定义Roles中调用的变量
文件名为all的文件定义的变量针对所有Roles生效
tree inventory
cat inventory/part1
cat inventory/part2
cat inventory/group_vars/nginx
cat inventory/group_vars/all
cat inventory/hosts_vars/127.0.0.1
cat playbooks/nginx.yml
oldboy为主机组的名字
-m 后边是模块名
-m MODULE_NAME, --module-name=MODULE_NAME
module name to execute (default=command)
默认的模块是command
-a 后面是要执行的命令,也可以写一个ip,针对一台机器来执行命令
-a MODULE_ARGS, --args=MODULE_ARGS
module arguments
cat iplist
http://docs.ansible.com/ansible/latest/shell_module.html
https://docs.ansible.com/ansible/latest/modules/ping_module.html#ping-module
https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module
copy模块将文件从本地复制到远程计算机上的某个位置
ansible copy模块 会自动创建多级目录
目标目录都存在的情况下,可以传输过去同时修改文件名
backup=yes 备份
remote_src
https://docs.ansible.com/ansible/latest/modules/template_module.html#template-module
从远程节点获取文件
https://docs.ansible.com/ansible/latest/modules/script_module.html
https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module
disabled=yes 注释定时任务
https://docs.ansible.com/ansible/latest/modules/mount_module.html#mount-module
https://docs.ansible.com/ansible/latest/modules/file_module.html
https://docs.ansible.com/ansible/latest/modules/setup_module.html#setup-module
https://docs.ansible.com/ansible/latest/modules/yum_module.html
https://docs.ansible.com/ansible/latest/modules/service_module.html
https://docs.ansible.com/ansible/latest/modules/systemd_module.html#systemd-module
https://docs.ansible.com/ansible/latest/modules/user_module.html#user-module
生成密码
创建带密码的用户
https://docs.ansible.com/ansible/latest/modules/archive_module.html#archive-module
https://docs.ansible.com/ansible/latest/modules/unarchive_module.html#unarchive-module
默认解压方式 /usr/bin/gtar /usr/bin/unzip
1.修改配置文件
2.分发公钥
cat authkey.yml
添加或删除数据库
ansible及远程主机安装
state
present
absent
dump
import
mode
getslave
getmaster
changemaster
stopslave
startslave
resetslave
resetslaveall
确保”某一行文本”存在于指定的文件中,或者确保从文件中删除指定的”文本”
插入/更新/删除由标记线包围的文本块
使用反向引用的正则表达式替换文件中特定字符串的所有实例
https://docs.ansible.com/ansible/latest/user_guide/playbooks.html
关键字
https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html
key value
列表
字典
cat /etc/ansible/test.yml
web.yaml
block
块允许对任务进行逻辑分组以及进行中的错误处理。您可以应用于单个任务的大多数内容(循环除外)都可以应用于块级,这也使设置任务通用的数据或指令变得更加容易
- 任务block将正常执行
- 如果有任何错误,则该rescue部分将执行您需要执行的操作以从上一个错误中恢复过来。
- always无论block和rescue部分中以前发生过或没有发生任何错误,此部分都将运行。
应当注意的是,如果某个rescue部分成功完成,则它会继续播放,因为它“擦除”了错误状态(但不是报告),这意味着它既不会触发max_fail_percentage也不会any_errors_fatal配置,而是会出现在剧本统计信息中
Ansible还为rescue块部分中的任务提供了几个变量:
-
ansible_failed_task
返回“失败”并触发救援的任务。例如,要使用名称ansible_failed_task.name -
ansible_failed_result
触发救援的失败任务的捕获返回结果。这将等于在register关键字中使用了此var
定义Ansible一次应管理多少个主机
达到某个故障阈值时中止执行
10台服务器中有3台以上发生故障,则其余的播放将被中止
仅为一批主机运行一次任务
包括一个文件,其中包含要在当前剧本中执行的剧本或任务的列表
加载并执行角色
- 动态加载并执行指定角色作为任务。
- 仅可以使用其中Ansible任务被允许-内部pre_tasks,tasks或post_tasks剧本的对象,或作为一个角色里的任务
包括一个文件,其中包含要在当前剧本中执行的任务列表
import a playbook
import a role into a play
import a task list
https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html
命令行 > 剧本 > 主机清单
cat var.yml
- role defaults
- dynamic inventory variables
- inventory variables
- inventory group_vars
- inventory host_vars
- playbook group_vars
- playbook host_vars
- host facts
- registered variables
- set_facts
- play variables
- play vars_prompt
- play vars_files
- role variables and include variables
- block variables
- task variables
- extra variables
- group_vars/all
- group_vars/boston
- host_vars/xyz.boston.example.com
- roles/x/vars/main.yml
/vars/external_vars.yml
https://docs.ansible.com/ansible/latest/user_guide/playbooks_tags.html
指定位置添加标签,可以指定标签执行剧本
nfs.yml
cat rsync.yml
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html
cat judge.yml
cat judge.yml
查看一个列表是否包含另一个列表或包含另一个列表,可以使用“子集”和“超集”:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html
遍历inventory
cat with_items.yml
roles/x/tasks/main.yml
- group_vars目录下的文件定义Roles中调用的变量
- 文件名为all的文件定义的变量针对所有Roles生效
角色期望文件位于某些目录名称中。角色必须至少包含其中一个目录,但是排除任何未使用的目录是完全正确的。在使用时,每个目录必须包含一个main.yml文件,其中包含相关内容
tasks - 包含角色要执行的主要任务列表
handlers - 包含处理程序,可以由此角色使用,甚至可以在此角色之外的任何位置使用
defaults - 角色的默认变量
vars - 角色的其他变量
files - 包含可以通过此角色部署的文件
templates - 包含可以通过此角色部署的模板
meta - 为此角色定义一些元数据
其他YAML文件可能包含在某些目录中。例如,通常的做法是从tasks/main.yml文件中包含特定于平台的任务
创建目录
[root@m01 roles]# cat nfs/vars/main.yml
vars/main.yml中的变量是role变量,优先级比较高,放置一些不想被覆盖的变量,所以变量在命名的时候一般都加入role的名字作为前缀,防止不小心被Playbook中定义的变量覆盖
defaults/main.yml中的变量是默认变量。优先级在所有的变量中是最低的,用于放置一些需要被覆盖的变量
[root@m01 roles]# cat nfs/tasks/main.yml
[root@m01 roles]# cat nfs/handlers/main.yml
cat roles/nginx/templates/default.conf.j2
cat roles/nginx/templates/nginx.conf.j2
roles/myapp/meta/main.yml
roles/nginx/meta/main.yml
roles/common/tasks/main.yml
cat site.yml
https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html
[root@m01 roles]# cat rsync/templates/rsyncd.conf.j2
[root@m01 roles]# cat rsync/vars/main.yml
[root@m01 roles]# cat rsync/tasks/main.yml
[root@m01 roles]# cat site.yml
https://jinja.palletsprojects.com/en/2.10.x/
http://jinja.pocoo.org/
编辑file.yml,定义nginxconf role的一个功能集(一个文件一个功能集)。
编辑main.yml,定义任务功能集合、nginxconf role功能集入口
该变量文件需要关注的是nginx_proxies定义的变量组,其下的变量列表通过for循环读取后可以通过“. ”来引用,即如下proxy.name这样的引用方式
-
pre_tasks戏剧中定义的任何内容
到目前为止,所有已触发的处理程序都将运行 -
列出的每个角色roles将依次执行。角色中定义的任何角色依赖关系meta/main.yml都将首先运行,但要遵循标签过滤和条件
-
tasks戏剧中定义的任何内容
到目前为止,所有已触发的处理程序都将运行 -
post_tasks戏剧中定义的任何内容
到目前为止,所有已触发的处理程序都将运行
共享Ansible内容的中心
https://galaxy.ansible.com/docs/
https://galaxy.ansible.com/
ansible-galaxy --help
ansible-galaxy collection --help
ansible-galaxy role --help
初始化新role
ansible-galaxy init --help
下载role
Galaxy上的Roles命名规范遵循user-name.rolename
https://galaxy.ansible.com/
下载多个roles
roles.txt
install_roles.yml