自动化_Ansible学习笔记
文章目录
- Ansible 介绍
- 配置文件
- 主配置文件优先级
- 常用命令
- ansible-playbook
- ad-hoc
- inventory 主机清单
- Playbook 剧本
- YAML格式
- ansible 模块
- 介绍
- 模块对应功能
- Commands modules(命令模块)
- command (命令)
- shell (外壳)
- 官方帮助文档 模块索引
- playbook 开头示例
- 系统类
- setup (收集远程主机的一些基本信息)
- group (组)
- user (用户)
- service (服务)
- systemd (服务)
- cron (计划任务)
- hostname (修改主机名)
- service (服务管理)
- mount 挂载点
- 文件类
- synchronize(文件同步)
- unarchive (解压缩)
- script (脚本)
- file (文件)
- copy (复制到远程主机)
- fetch (复制到ansible端)
- find (查找)
- replace (替换文件内容)
- lineinfile (修改文件内容)
- blockinfile (插入文本块)
- template (根据模板生成文件)
- 包管理
- yum (软件包)
- package (通用包管理)
- pacman (ArchLinux)
- yum_repository (yum仓库)
- 网络安全类
- Net Tools 网络工具
- get_url (下载文件)
- firewalld (防火墙)
- Utilities (实用工具)
- debug (调试信息)
- fail (失败,停止后续)
- Source Control modules(源代码控制模块)
- git
- playbook示例
- lineinfile 替换文件内容
- Ansible 常见问题
- 指定客户端Python的位置
Ansible 介绍
- 官网
- galaxy
- 最新版模块索引
- 2.9版模块索引
- 安装
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum -y install ansible
配置文件
- 配置文件
文件 位置 配置文件 主配置文件 /etc/ansible/ansible.cfg 主机清单 /etc/ansible/hosts 存放角色目录 /etc/ansible/roles/ 执行文件 主程序 /usr/bin/ansible 功能查看 /usr/bin/ansible-doc 上传下载优秀代码 /usr/bin/ansible-galaxy 自动化任务 /usr/bin/ansible-playbook 文件加密 /usr/bin/ansible-vault 用户交互 /usr/bin/ansible-console - 主配置文件介绍
参数 解释 inventory 主机清单文件 library 库位置 module_utils 模块位置 remote_tmp 远程临时目录 local_tmp 本地临时目录 plugin_filters_cfg forks 并发操作主机数 poll_interval 拉数据间隔 sudo_user 以sudo身份执行命令 remote_port 默认远程主机ssh端口 host_key_checking 检查远程主机的host_key,建议取消即"False" private_key_file 私钥文件 log_path 日志文件,建议允许,即取消注释 - 如果使用普通用户则sudo到root,vim /etc/ansible/ansible.cfg开启下列选项
[privilege_escalation] ##这一部分为提升权限的参数,如果使用普通用户需要开启。 become=True become_method=sudo become_user=root become_ask_pass=False
- 主机清单文件inventory默认
/etc/ansible/hosts
用法 解释 ansible_ssh_host 指定IP地址 ansible_connection=ssh 指定通过ssh连接 ansible_ssh_port=22 指定SSH端口 ansible_ssh_user=osboxes 指定ssh用户 ansible_ssh_pass=China123 指定ssh密码 node[1:3] node1-3,共3台主机 var=user 定义变量’var’的值为’user’ [web:vars] 下面的变量为web组的变量 - inventory文件示例
#表示一台主机 test1 ansible_ssh_host=10.0.0.1 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=password #表示一个主机组 [test] 10.0.0.1 ansible_connection=ssh ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=password
主配置文件优先级
优先级 | 位置 | 说明 |
---|---|---|
1 | ANSIBLE_CONFIG环境变量指定 | |
2 | ./ansible.cfg | 推荐的,当前目录下的ansible.cfg |
3 | ~/.ansible.cfg | 用户家目录下的.ansible.cfg |
4 | /etc/ansible/ansible.cfg |
常用命令
- 主要命令选项
选项 解释 ansible 语法 ansible <主机清单> [-m 模块名] [-a 参数] –version 显示版本 -m 指定模块 -v 详细模式 –list 显示主机列表 -k 密码验证 -u 指定连接使用的用户 -b 在远程上使用sudo -K sudo密码 ansible-doc -a 显示所有模块的文档 -l 显示可用模块 -s 简洁帮助信息
ansible-playbook
-
剧本文件以
yml
或yaml
为扩展名 -
使用方法
ansible-playbook 命令选项 文件名
-
可以调用的变量
#安装命令查看,可以调用的变量 yum install -y facter facter -p
-
ansible-playbook 命令选项
选项 解释 -C,–check 检查语法,模拟执行过程 –syntax-check 检查语法 –list-hosts 列出主机 –list-tasks 列出所有任务 –list-tags 列出标签 –step 一次执行一步 -t 仅执行指定的标签 -e 直接传递变量 -
文件示例
--- - hosts: 主机remote_user: 远程用户sudo_user: 使用的用户身份#任务列表tasks:- name: 名称#模块:yum: name=httpd state=latest notify: 调用的Handlerswhen: 当满足条件时(使用jinja2语法格式)才运行此taskignore_errors: True(当此模块错误时忽略错误,继续执行其他)tags: test(打上标签,使用-t只运行指定标签的task)- name: start httpdservice: name=httpd state=started#定义变量vars:- host: localhost#包含了模板语法的文本文件Templates:#由特定条件触发的任务Handlers: - hosts: db
-
playbook 示例
示例 解释 ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
当操作系统为CentOS7是才运行此task
ad-hoc
inventory 主机清单
Playbook 剧本
YAML格式
- 用三个-号开头,用于标记文档的开始,可以省略
- 注释符号为:#
- 一般情况字符串不需要用引号引起来,即使中间有空格
- 变量引用{{ 变量名 }}
- 布尔类型
- True,yes
- False,no
- 列表
- 使用"-"作为定界符,如
- My Fair Lady - OK lahoma - The Pirates of Penzance
- 使用"-"作为定界符,如
- 字典
1.
ansible 模块
介绍
- [2.9版模块索引](https://docs.ansible.com/ansible/2.9/modules
模块对应功能
- 功能对应表
模块|功能
-|-|-
parted|硬盘分区|
filesystem|分区格式化
copy|复制文件
mount|挂载点
file|文件软链接
script|在远程主机上运行shell脚本
Commands modules(命令模块)
command (命令)
- 参数
参数 解释 <free_form>
指定远程命令,直接使用命令,不含free_form chdir 执行命令前进入的目录 creates 当指定的文件存在时,就不执行命令 removes 当指定文件不存在时,就不执行命令 - 示例
- name: testhosts: temp2gather_facts: nobecome: yestasks:- name: cat hostscommand: cat /etc/hostsregister: hosts_value- debug: var=hosts_value.stdout_lines
shell (外壳)
- 官方文档
- 参数
参数 解释 free_form 指定命令 chdir 指定执行命令前先进入的目录 creates 指定文件存在,就不执行命令 removes 指定文件不存在,就不执行命令 executable /bin/sh(默认),指定使用的shell - 示例
- name: Change the working directory to somedir/ before executing the command.shell: somescript.sh >> somelog.txtargs:chdir: somedir/
官方帮助文档 模块索引
模块索引
playbook 开头示例
- name: testhosts: temp2gather_facts: nobecome: yes
系统类
setup (收集远程主机的一些基本信息)
1. 选项 | 解释 |
---|---|
filter | 过滤 |
变量 | 解释 |
ansible_devices | 仅显示磁盘设备信息。 |
ansible_default_ipv4.interface | 默认IPv4接口 |
ansible_default_ipv4.address | 默认IPv4地址 |
ansible_default_ipv4.gateway | 默认IPv4网关 |
ansible_interfaces | 所有接口 |
ansible_distribution | 显示是什么系统,例:centos,suse等。 |
ansible_distribution_major_version | 显示是系统主版本。 |
ansible_distribution_version | 仅显示系统版本。 |
ansible_machine | 显示系统类型,例:32位,还是64位。 |
ansible_eth0 | 仅显示eth0的信息。 |
ansible_hostname | 仅显示主机名。 |
ansible_kernel | 仅显示内核版本。 |
ansible_lvm | 显示lvm相关信息。 |
ansible_memtotal_mb | 显示系统总内存。 |
ansible_memfree_mb | 显示可用系统内存。 |
ansible_memory_mb | 详细显示内存情况。 |
ansible_swaptotal_mb | 显示总的swap内存。 |
ansible_swapfree_mb | 显示swap内存的可用内存。 |
ansible_mounts | 显示系统磁盘挂载情况。 |
ansible_processor | 显示cpu个数(具体显示每个cpu的型号)。 |
ansible_processor_vcpus | 显示cpu个数(只显示总的个数)。 |
ansible_pkg_mgr | 安装包管理器,如:yum,apt |
group (组)
- 参数
参数 解释 <name>
指定要操作的组名称 state present(默认);absent:删除 - 示例
tasks:- name: Ensure group "somegroup" existsgroup:name: somegroupstate: presentgid: 2000
user (用户)
- 官方说明
- 参数
参数 解释 <name>
指定用户 group 指定基本组 gourps 指定附加组 append 追加附加组,而不覆盖附加组 shell 指定用户默认shell uid 指定UID expires 指定过期时间,值为unix时间戳获取命令:date -d 2018-12-31 +%s comment 注释 state present(默认):存在;absent:删除 remove 是否删除家目录 password 指定加密后的密码.加密命令:import crypt; crypt.crypt(‘明文密码’) update_password always(默认):如果 password 参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码.on_create:如果 password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定。如果是新创建的用户,即使此参数设置为 on_create,也会将用户的密码设置为 password 参数对应的值。 generate_ssh_key no(默认):生成 ssh 密钥对,如果已有则不操作 ssh_key_file 自定义生成 ssh 私钥的路径和名称 ssh_key_comment 注释信息,默认的注释信息为”ansible-generated on 远程主机的主机名” ssh_key_passphrase 在创建证书时,使用此参数设置私钥的密码 ssh_key_type 设置密钥对的类型。默认密钥类型为 rsa - 示例
--- - name: Added a consultant whose account you want to expireuser:name: tftpgroup: ftpstate: presentremove: yesshell: /usr/sbin/nologinuid: 1800comment: FTP userpassword: $1$hLGoLIZR$vmyUeES3TTHNgGgawgIw7/
- 安装passlib后可使用明文密码
- 安装passlib
pip install passlib
- 示例
- name: Added a consultant whose account you want to expireuser:name: user1#group: user1state: presentremove: yesshell: /usr/bin/bashuid: 1800comment: userpassword: "{{'password' | password_hash('sha512')}}"
service (服务)
- 参数
参数 解释 <name>
服务名 state started:启动;stopped:停止;restarted:重启;reloaded:刷新 enabled 是否开机自启 - 示例
- name: redhat | Ensuring DNSMasq Service is Enabled and Startedservice:name: dnsmasqstate: startedenabled: truebecome: true
systemd (服务)
- 官方文档
- 参数
参数 选项 默认 解释 daemon_reexec 可选 no 重排序列 daemon_reload 可选 no 重载配置 enabled 可选 开机自启 name 必选 服务名称 state 可选 服务状态:reloaded,restarted,started,stopped) - 示例
- name: httpdsystemd:name: httpdstate: restarteddaemon_reload: yesenabled: yes- name: restart service cron on centos, in all cases, also issue daemon-reload to pick up config changessystemd:state: restarteddaemon_reload: yesname: crond
cron (计划任务)
- 参数
参数 解释 minute 分钟,默认* hour 小时,默认* day 天,默认* month 月,默认* weekday 周,默认* special_time @+值.reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时) 注意 以上全为默认时表示每秒执行一次 user 用户,默认root job 执行的脚本或命令 name 指定名称 state 对name操作,absent表示删除 disabled 是否禁用 backup 是否备份
hostname (修改主机名)
- 官方说明
- 参数
参数 解释 name 定义主机名 use 策略,如果未指定使用自动;generic,debian,sles,redhat,alpine,systemd,openrc,openbsd,solaris,freebsd - 示例
- hostname:name: web01
service (服务管理)
- 官方文档
- 参数
参数 解释 name 必选,服务名称 enabled 可选, state 可选,reloaded,restarted,started,stopped
mount 挂载点
- 官方文档
- 参数
参数 取值 解释 backup 布尔,默认:no 创建一个包含时间戳信息的备份文件 boot 布尔,默认:yes 确定文件系统是否应在引导时挂载,仅适用于 Solaris 系统 fstab 字符串 fstype 字符串 文件系统类型 opts 字符串 挂载选项 path 路径 挂载点的路径 src 路径 要安装在path上的设备 state 字符串,absent/mounted/present/unmounted/remounted - 解释
- state
- mounted 在/etc/fstab中加入,并挂载,如果挂载点不存在就创建
- present 在/etc/fstab中加入,不触发挂载
- absent 在/etc/fstab中删除,解除挂载
- unmounted 不修改/etc/fstab,仅仅卸载
- state
- 示例
# Before 2.3, option 'name' was used instead of 'path' - name: Mount DVD read-only mount:path: /mnt/dvdsrc: /dev/sr0fstype: iso9660opts: ro,noautostate: present- name: Mount up device by label mount:path: /srv/disksrc: LABEL=SOME_LABELfstype: ext4state: present- name: Mount up device by UUID mount:path: /homesrc: UUID=b3e48f45-f933-4c8e-a700-22a159ec9077fstype: xfsopts: noatimestate: present- name: Unmount a mounted volume mount:path: /tmp/mnt-pntstate: unmounted- name: Mount and bind a volume mount:path: /system/new_volume/bootsrc: /bootopts: bindstate: mountedfstype: none
文件类
- 官方文档
synchronize(文件同步)
-
官方文档
-
参数
参数 解释 src 必选,源文件,可以是绝对或相对路径 dest 必选,目标文件,可以是绝对或相对路径 delete 可选,删除源是不存在的文件 mode 可选,默认是push,push模式本地是源,pull模式远程是源 -
示例
- name: sync filessynchronize:src: /usr/local/srcdest: /usr/local/srcdelete: yesmode: push
unarchive (解压缩)
- 官方文档
- 参数
参数 解释 src 必选,可以是本地路径,也可以是远程路径,如果是远程路径需要设置’copy=no’ dest 必选,远程主机的目标路径 copy 可选,yes:本地解压后传到远程主机;no:在远程主机上操作 mode 可选,解压后的文件权限如0644 remote_src boolean
可选,yes表示文件在远程主机上 - 示例
- name: Unarchive a file that is already on the remote machineunarchive:src: "{{ aria2_dest }}"dest: /usr/local/srcremote_src: yes- name: Unarchive a file that needs to be downloaded (added in 2.0)unarchive:src: https://example.com/example.zipdest: /usr/local/binremote_src: yes
script (脚本)
- 参数
参数 解释 free_form 指定ansible端脚本 chdir 执行脚本前,先进入的远程目录 creates 指定文件存在就不执行脚本 removes 指定文件不存在就不执行脚本
file (文件)
- 官方文档
- 参数
参数 解释 <path/dest/name>
指定文件 state directory:目录;touch:文件;link:软连接;hard:硬连接;absent:删除 src 指定软硬链接源 force yes:强制创建连接 owner 指定属主 group 指定属组 mode 权限,如775.suid:4700 recurse yes:递规目录 - 示例
- name: soft_linktags: linkfile:name: /usr/bin/aria2cstate: linksrc: /home/program/aria2/bin/aria2c- name: Create a directory if it does not existfile:path: /etc/some_directorystate: directorymode: '0755'
copy (复制到远程主机)
- 官方文档_2.9版
- 官方文档_最新版
- 目录如果不存在会报错
- 源目录中最后使用/表示复制目录和目录下的文件
- 参数
参数 解释 src 指定ansible端文件 dest 远程主机端文件 content 文件内容,与src参数冲突 force 强制覆盖 backup 文件内容不同时是否备份 owner 属主 group 属组 mode 权限.如:0644,u+x - 示例
- name: Copy file with owner and permissions ansible.builtin.copy:src: /srv/myfiles/foo.confdest: /etc/foo.confowner: foogroup: foomode: '0644'- name: Copy file with owner and permission, using symbolic representation ansible.builtin.copy:src: /srv/myfiles/foo.confdest: /etc/foo.confowner: foogroup: foomode: u=rw,g=r,o=r- name: Another symbolic mode example, adding some permissions and removing others ansible.builtin.copy:src: /srv/myfiles/foo.confdest: /etc/foo.confowner: foogroup: foomode: u+rw,g-wx,o-rwx- name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version ansible.builtin.copy:src: /mine/ntp.confdest: /etc/ntp.confowner: rootgroup: rootmode: '0644'backup: yes- name: Copy a new "sudoers" file into place, after passing validation with visudo ansible.builtin.copy:src: /mine/sudoersdest: /etc/sudoersvalidate: /usr/sbin/visudo -csf %s- name: Copy a "sudoers" file on the remote machine for editing ansible.builtin.copy:src: /etc/sudoersdest: /etc/sudoers.editremote_src: yesvalidate: /usr/sbin/visudo -csf %s- name: Copy using inline content ansible.builtin.copy:content: '# This file was moved to /etc/other.conf'dest: /etc/mine.conf- name: If follow=yes, /path/to/file will be overwritten by contents of foo.conf ansible.builtin.copy:src: /etc/foo.confdest: /path/to/link # link to /path/to/filefollow: yes- name: If follow=no, /path/to/link will become a file and be overwritten by contents of foo.conf ansible.builtin.copy:src: /etc/foo.confdest: /path/to/link # link to /path/to/filefollow: no
fetch (复制到ansible端)
- 官方文档_2,9版
- 官方文档_最新版
- 参数
参数 解释 src 远程主机文件 dest ansible端文件
find (查找)
- 参数
参数 解释 <paths/path/name>
指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开 recurse no(默认),不递规目录;yes:递规 hidden no(默认),不含隐藏文件;yes:含隐藏文件 file_type file(默认)文件;directory:目录;link:软连接;any:所有 patterns 指定文件名称,支持通配符,正则需要下面参数 use_regex 使patterns 参数支持正则表达式 contains 根据文章内容查找文件,此参数的值为一个正则表达式 age 根据时间范围查找文件,默认以文件的 mtime 为准与指定的时间进行对比.3d:3天前;-3d:3天内.可以使用的单位有秒(s)、分(m)、时(h)、天(d)、星期(w)。 age_stamp mtime(默认),atime、ctime size 文件大小,3m:大于3M;-50k:小于50K;可以使用的单位有 t、g、m、k、b get_checksum 同时返回对应文件的 sha1校验码
replace (替换文件内容)
- 参数
参数 解释 <path>
指定要操作的文件 regexp 指定python 正则表达式,文件中与正则匹配的字符串将会被替换。 replace 指定最终要替换成的字符串 backup 是否备份
lineinfile (修改文件内容)
- 官方文档
- 可以借助lineinfile模块,确保"某一行文本"存在于指定的文件中,或者确保从文件中删除指定的"文本" (即确保指定的文本不存在于文件中) ,还可以根据正则表达式,替换"某一行文本"。
- 参数
参数 解释 指定要操作的文件 line 指定文本内容 regexp 指定正则表达式,如果不止一行能够匹配正则,那么只有最后一个匹配正则的行才会被替换,但是如果指定的表达式没有匹配到任何一行,则插入到末尾 state absent:删除;present:默认 backrefs =yes时:line参数中就能对regexp参数中的分组进行后向引用,当正则没有匹配到任何的行时,则不会对文件进行任何操作 insertafter EOF(默认):插入到末尾;值设置为正则表达式,表示将文本插入到匹配到正则的行之后,,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略 insertbefore BOF(默认):插入到开头;值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。 backup 是否在修改文件之前对文件进行备份 create 当要操作的文件并不存在时,是否创建对应的文件 - 示例
- name: Configure Apache.lineinfile:dest: "{{ apache_server_root }}/conf/{{ apache_daemon }}.conf"regexp: "{{ item.regexp }}"line: "{{ item.line }}"state: presentwith_items: "{{ apache_ports_configuration_items }}"notify: restart apache
blockinfile (插入文本块)
- 官方文档
- blockinfile 模块可以帮助我们在指定的文件中插入”一段文本”,这段文本是被标记过的,也就是,我们在这段文本上做了记号,以便在以后的操作中可以通过”标记”找到这段文本,然后修改或者删除它
- 参数
参数 解释 <path>
指定要操作的文件 block/content 指定我们想要操作的那”一段文本” marker 指定标记.ANSIBLE MANAGED BLOCK(默认);#{mark}test:表示# BEGIN test和# END test state present(默认):更新;absent:表示从文件中删除对应标记的段落 insertafter EOF(默认):在末尾插入;使用正则表达式(python正则),表示将文本插入在符合正则表达式的行的前面;如果有多行文本都能够匹配对应的正则表达式,则以最后一个满足正则的行为准 backup 是否备份 create 文件不存在时是否创建 - 实例
- 在文件末尾添加
- name: modify source for Chinablockinfile:path: /etc/pacman.d/mirrorlistblock: |#清华大学源Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
- 在文件开头添加 增加如下
- name: modify source for Chinablockinfile:path: /etc/pacman.d/mirrorlistinsertbefore: BOFblock: |#清华大学源Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
template (根据模板生成文件)
-
官方文档
-
参数
参数 解释 src 必选,源路径 dest 必选,目标路径 -
示例
- name: Add apache vhosts configuration.template:src: "{{ apache_vhosts_template }}"dest: "{{ apache_conf_path }}/{{ apache_vhosts_filename }}"owner: rootgroup: rootmode: 0644notify: restart apachewhen: apache_create_vhosts | bool
包管理
yum (软件包)
- 官方说明
- 参数
参数 解释 <name>
需要管理的软件包 state present(installed):如果装了就不装,如果没装就安装;latest:安装最新版;absent(removed):删除 disable_gpg_check 禁用公钥gpg验证,默认值是no,即验证 enablerepo 指定临时启用的软件源 disablerepo 指定临时禁用的软件源 - 示例
tasks:- name: install git yum:name: gitstate: present
- 安装多个软件示例
tasks:- name: install git httpdyum:name: "git,httpd,fping"state: present
- 安装多个软件示例2
tasks:- name: ensure a list of packages installedyum:name: "{{ packages }}"vars:packages:- httpd- httpd-tools
package (通用包管理)
- 官方说明
- 参数
参数 解释 name 必选,软件包名称 state 必选,状态,present,absent,latest use 可选,默认:auto - 示例
- name: ensure a list of packages installedpackage:name: "{{ packages }}"state: presentvars:packages:- httpd- httpd-tools- name: install the latest version of Apache and MariaDBpackage:name:- httpd- mariadb-serverstate: latest
pacman (ArchLinux)
- 官方说明
- 参数
参数 解释 name 软件包名称 state 状态,present,absent,latest upgrade 是否升级 - 示例
- pacman -Syu
- name: Run the equivalent of "pacman -Syu" as a separate steppacman:update_cache: yesupgrade: yes
- 安装软件包
- name: install Archlinux packagespacman:name:- sudo- archlinuxcn-keyring- xorg-server
yum_repository (yum仓库)
- 参数
参数 解释 <name>
仓库ID baseurl 仓库的 baseurl description 注释 file 配置文件名称即.repo的前缀,默认为仓库ID enabled 是否启用,默认启用 gpgcheck gpg验证,默认为no即不验证 gpgcakey 指定gpg验证的公钥 state present(默认),absent表示删除
网络安全类
Net Tools 网络工具
get_url (下载文件)
-
官方文档
-
参数
参数 解释 dest path
必选,将文件下载到的绝对路径,如果dest是目录,则将使用服务器提供的文件名 url string
必选,`HTTP, HTTPS, or FTP URL in the form (http backup boolean
可选,创建备份文件 checksum string
可选,校验 force boolean
可选,强制覆盖 group string
可选,属组 owner string
可选,属主 mode string
可选,权限码如0644 -
示例
- name: Download file with check (md5)get_url:url: http://example.com/path/file.confdest: /etc/foo.confchecksum: md5:66dffb5228a211e61d6d7ef4a86f5758
firewalld (防火墙)
- 官方文档
- 参数
参数 解释 state 必选,absent,disabled,enabled,present interface 可选,从一个zone中增加或删除的接口 immediate 可选,默认no,如果设置为永久,应立即应用此配置 masquerade 可选,允许或禁用从一个zones中 permanent 可选,no,yes. port 可选 rich_rule 可选,富规则 service 可选, source 可选, timeout 可选, zone 可选, - 示例
- firewalld:port: 161-162/udppermanent: yesstate: enabled
Utilities (实用工具)
debug (调试信息)
- 官方2.9文档
- 参数
参数 解释 msg string
可选,显示定义的信息 var string
verbosity int - 示例
# Example that prints the loopback address and gateway for each host - debug:msg: System {{ inventory_hostname }} has uuid {{ ansible_product_uuid }}- debug:msg: System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }} when: ansible_default_ipv4.gateway is defined# Example that prints return information from the previous task - shell: /usr/bin/uptime register: result- debug:var: resultverbosity: 2- name: Display all variables/facts known for a hostdebug:var: hostvars[inventory_hostname]verbosity: 4# Example that prints two lines of messages, but only if there is an environment value set - debug:msg:- "Provisioning based on YOUR_KEY which is: {{ lookup('env', 'YOUR_KEY') }}"- "These servers were built using the password of '{{ password_used }}'. Please retain this for later use."
fail (失败,停止后续)
- 官方文档
- 参数
参数 解释 msg string
可选,显示定义的信息 - 示例
- name: "fail if Operating System is not CentOS-7.x"fail: msg="Operating System {{ ansible_distribution }}-{{ ansible_distribution_version }} not supported"when: (ansible_distribution != "CentOS" and ansible_distribution != "RedHat") or ansible_distribution_major_version != "7"
Source Control modules(源代码控制模块)
git
- 官方文档
- 参数
参数 解释 dest 必选,目的路径 repo 必选,源地址 - 示例
# Example read-write git checkout from github - git:repo: git@github.com:mylogin/hello.gitdest: /home/mylogin/hello
playbook示例
lineinfile 替换文件内容
---
- hosts: tempremote_user: rootsudo_user: roottasks:- name:lineinfile:dest: "/etc/pam.d/vsftpd"regexp: 'pam_shells.so'line: '#auth required pam_shells.so'backup: yes
Ansible 常见问题
指定客户端Python的位置
- 全局设置:修改 ansible.cfg
interpreter_python = /usr/bin/python3 <<< 在 [defaults] 部分添加选项,指定 Python 解释器
- 针对设备(组)单独设置:修改 hosts 文件
ansible_python_interpreter=/usr/bin/python3 <<< 在 [xxx:vars] 部分添加属性,指定 Python 解释器
- 手工指定:-e 选项
ansible ASA -m ping -o -e 'ansible_python_interpreter=/usr/bin/python3'
相关文章:

自动化_Ansible学习笔记
文章目录 Ansible 介绍配置文件主配置文件优先级 常用命令ansible-playbook ad-hocinventory 主机清单Playbook 剧本YAML格式 ansible 模块介绍模块对应功能Commands modules(命令模块)command (命令)shell (外壳) 官方帮助文档 模块索引playbook 开头示例系统类setup (收集远程…...

用于密集视觉冲击的紧凑三维高斯散射Compact 3D Gaussian Splatting For Dense Visual SLAM
Compact 3D Gaussian Splatting For Dense Visual SLAM 用于密集视觉冲击的紧凑三维高斯散射 Tianchen Deng 邓天辰11Yaohui Chen 陈耀辉11Leyan Zhang 张乐妍11Jianfei Yang 杨健飞22Shenghai Yuan 圣海元22Danwei Wang 王丹伟22Weidong Chen 陈卫东11 Abstract 摘要 …...

ChatGPT揭秘:高效论文写作的秘籍
ChatGPT无限次数:点击直达 ChatGPT揭秘:高效论文写作的秘籍 引言 在当今信息爆炸的时代,高效撰写论文对于研究者和学术工作者至关重要。随着人工智能技术的不断发展,ChatGPT等自然语言处理工具的出现为论文写作提供了全新的思路和工具。本文…...

电脑不能上网,宽带调制解调器出现问题如何处理
目录 一、问题说明 二、解决方案 一、问题说明 内网的设备能互联,内网的各个设备无法连外网。 电脑在检测网络时,出现以下提示: 二、解决方案 首先重启光猫(我们是电信宽带)。 如果还是有问题,再重启…...

云计算: OVN 集群 部署分布式交换机
目录 一、实验 1.环境 2.OVN 集群 部署云主机 3.中心端添加DVS分布式大二层交换机 二、问题 1.南向控制器查看主机名只显示localhost 2.中心端如何添加DVR分布式⼤三层路由器 一、实验 1.环境 (1) 主机 表1 宿主机 主机架构软件主要服务IP备注ovn_central中心端 ovn…...

electron+Vue3构建桌面应用之IPC通讯
最近在做一个C/S架构的项目预研 过程中遇到 Electron 与 Vue3 通讯的问题,费劲巴力的在网上找方案,发现都不理想,最终攻克之后,计划将过程写下来,供有需求的同学白嫖! 开始之前,先说一件重要的…...

html球体涨水
简单 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>div…...

ubuntu手动编译opencv 4.9.0遇到的问题汇总
ubuntu手动编译opencv 4.9.0遇到的问题汇总 编译流程 以4.9.0版本为例,可参考:https://docs.opencv.org/4.9.0/d2/de6/tutorial_py_setup_in_ubuntu.html 编译加速 https://blog.csdn.net/tfb760/article/details/104030841 ippicv_2021.10.0_lnx_i…...

SEO之搜索引擎的工作原理(三)
初创企业需要建站的朋友看这篇文章,谢谢支持:我给不会敲代码又想搭建网站的人建议 (接上一篇。。。) 排名 经过搜索引擎蜘蛛抓取页面,索引程序计算得到倒排索引后,搜索引擎就准备好可以随时处理用户搜索了…...

开发语言漫谈-python
python的语法和C完全不同,但是它也是C写的。也就是想成为高手,C是必备武功。不是每个人都想成为武林高手。所以客观上需要个简单上手开发效率高的语言,就这样python诞生了。python的发明人其实不喜欢蟒蛇,但是不知道为啥选这个名字…...

JVM指令收集
1. 栈和局部变量操作 1.1 将常量压入栈的指令aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入…...

小程序解析二维码:jsQR
1.了解jsQR jsQR是一个纯javascript脚本实现的二维码识别库,不仅可以在浏览器端使用,而且支持后端node.js环境。jsQR使用较为简单,有着不错的识别率。 2.效果图 3.二维码 4.下载jsqr包 npm i -d jsqr5.代码 <!-- index.wxml --> &l…...

【verilog 设计】 reg有没有必要全部赋初值?
一、前言 在知乎发现“reg有没有必要全部赋初值”这个问题,与自己近期对Verilog reg的进一步学习相契合,此文对这个问题进行总结。 二、reg的初值赋值方式 就语法意义赋初值而言,就是在声明reg时对其赋值。在工程中,对于数字系…...

NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
目录 一、说明 二、Deepset SQUAD是个啥? 三、问答系统(QA系统),QA系统在各行业的应用及基本原理 3.1 医疗 3.2 金融 3.3 顾客服务 3.4 教育 3.5 制造业 3.6 法律 3.7 媒体 3.8 政府 四、在不同行业使用QA系统的基本原理 五、关于…...

php开发中如何防止抓包工具伪造请求
要防止抓包工具伪造请求,采取一系列的技术和策略来增强应用程序的安全性。以下是一些关键步骤和最佳实践: 1. 使用HTTPS 确保应用程序使用HTTPS协议进行通信。HTTPS通过TLS/SSL加密客户端和服务器之间的数据传输,这使得抓包工具捕获到的数据…...
密码学 | 椭圆曲线数字签名方法 ECDSA(下)
目录 10 ECDSA 算法 11 创建签名 12 验证签名 13 ECDSA 的安全性 14 随机 k 值的重要性 15 结语 ⚠️ 原文:Understanding How ECDSA Protects Your Data. ⚠️ 写在前面:本文属于搬运博客,自己留着学习。同时,经过几…...

拟态个人主页UI源码
拟态个人主页 效果图源代码领取源码 效果图 PC端 移动端 源代码 index.php <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>孤客 |佩恩</title><meta name"keywords" co…...

移动硬盘无法打开?别慌!这里有救星!
移动硬盘作为现代生活中重要的数据存储工具,承载着我们大量的文件和数据。然而,有时我们会遇到移动硬盘无法打开的情况,这往往让人焦虑不已。那么,当移动硬盘无法打开时,我们应该如何应对呢? 移动硬盘无法打…...

windows下已经创建好了虚拟环境,但是切换不了的解决方法
用得多Ubuntu,今天用Windows重新更新anaconda出问题,重新安装之后,打开pycharm发现打开终端之后,刚开始是ps的状态,后面试了网上改cmd的方法,终端变成c盘开头了 切换到虚拟环境如下:目前的shell…...

Java反序列化基础-类的动态加载
类加载器&双亲委派 什么是类加载器 类加载器是一个负责加载器类的对象,用于实现类加载的过程中的加载这一步。每个Java类都有一个引用指向加载它的ClassLoader。而数组类是由JVM直接生成的(数组类没有对应的二进制字节流) 类加载器有哪…...

课堂行为动作识别数据集
一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片,没有网络爬虫滥竽充数的图片,可直接用来训练。以上图片均一一手工标注,标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…...

【数据库】MVCC
MVCC是一种用来解决读写冲突的无锁并发控制,也就是为事务分配单项增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照 MVCC,全称Multi-Version Concurrency Control&am…...

快速排序题目SelectK问题
力扣75.颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sor…...

es6解构赋值
ES6解构赋值是一种简洁的为变量赋值的方式,它允许我们从数组或对象中提取值并赋给对应的变量。 解构赋值在ES6中被引入,主要目的是为了简化代码,提高代码的可读性。以下是解构赋值的基本用法: 数组解构:当我们需要从数…...

Jenkins上面使用pnpm打包
问题 前端也想用Jenkins的CI/CD工作流。 步骤 Jenkins安装NodeJS插件 安装完成,记得重启Jenkins。 全局配置nodejs Jenksinfile pipeline {agent anytools {nodejs "18.15.0"}stages {stage(Check tool version) {steps {sh node -vnpm -vnpm config…...

设计编程网站集:动物,昆虫,蚂蚁养殖笔记
入门指南 区分白蚁与蚂蚁 日常生活中,人们常常会把白蚁与蚂蚁搞混淆,其实这两者是有很大区别的,养殖方式差别也很大。白蚁主要食用木质纤维,会给家庭房屋带来较大危害,而蚂蚁主要采食甜食和蛋白质类食物,不…...

面经学习(众智宏图实习)
个人评价 难度还是有的,中等难度吧,可能是因为项目使用的是物流项目,该项目本来就比较庞大难度比较高,流的八股文我真的是一点不会,还需要加强,reidis的多路io复用模型没有深问,要是问了就寄了&…...

DataGrip2024安装包(亲测可用)
目录 一、软件简介 二、软件下载 一、软件简介 DataGrip是由JetBrains公司开发的一款强大的关系数据库集成开发环境(IDE),专为数据库开发人员和数据库管理员设计。它提供了一个统一的界面,用于管理和开发各种关系型数据库&#x…...

【InternLM 实战营第二期-笔记4】XTuner 微调个人小助手认知
书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,很高兴能参与本次第二期训练营,我也将会通过笔记博客的方式记录学习的过程与遇到的问题,并为代码添加注释,希望可以帮助到你们。 记得点赞哟(๑ゝω╹๑) XTuner 微调个人小助手…...

<计算机网络自顶向下> CDN
视频服务挑战 规模性异构性:不同用户有不同的能力(比如有线接入和移动用户;贷款丰富和受限用户)解决方法是:分布式的应用层面的基础设施CDN 多媒体:视频 视频是固定速度显示的一系列图像的序列ÿ…...