Ansible笔记

news/2024/9/28 20:13:45

1、Ansible基本介绍

Ansible是一个自动化的管理IT资源的工具。

1)Ansible基本介绍

Ansible功能 Ansbile优点 Ansible缺点
系统环境配置 无客户的 效率低、易挂起
安装仁济 推送式
持续集成 丰富的module
热回滚 基于YAML的Playbook

2)Ansible与其他软件的对比

对比项目 Puppet Chef Salt Ansible
客户端
通讯方式 socket ssh Rabbitmq ssh
Web页面
效率 一般 一般
易用
实现语言 ruby python python python
API
开源社区 4219 4479 6998 19504

3)Ansible安装

环境准备:python+setuptools+pip(可选)

(1)快速安装
安装pip:easy_install pip
安装Ansible:pip install ansible
(2)源码安装
github获取源码。。。
(3)系统源安装

  • centos(推荐)
yum install epel-release -y
yum install ansible
  • ubuntu
apt-get install software-properties-common
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get install ansible

安装完成使用ansible --version查看版本

[root@localhost ~]# ansible --version
ansible 2.9.27config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

安装完成查看/etc/ansible目录

[root@localhost etc]# tree ansible/
ansible/
├── ansible.cfg
├── hosts
└── roles1 directory, 2 files

4)Ansible架构&运行

  • 架构
    image
  • 运行
    image

5)Ansible配置文件路径搜索策略

搜索策略:

  • 检查环境变量export ANSIBLE_CONFIG指向的路径文件
  • ./ansible.cfg检查当前目录下的ansible.cfg配置文件
  • ~/.ansible.cfg检查当前用户目录下的ansible.cfg配置文件
  • /etc/ansible/ansible.cfg检查etc目录的配置文件

6)Ansible两种认证方式

关于指纹(known_hosts):

可以手动确认指纹(ssh登录后确认),或者直接忽略指纹确认(修改ansible配置文件,修改如下参数host_key_checking = False打开忽略指纹确认的参数即可)

  • 指纹提示实例
[root@localhost .ssh]# ssh root@192.168.44.134
The authenticity of host '192.168.44.134 (192.168.44.134)' can't be established.
ECDSA key fingerprint is SHA256:xMmum9QKAwyNpUaSnUpIN8vgGehttG6522tcJUdoTmA.
ECDSA key fingerprint is MD5:7b:3c:09:08:b0:6a:80:86:3e:bf:6a:b1:98:3c:8a:bb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.44.134' (ECDSA) to the list of known hosts.
root@192.168.44.134's password:
Last login: Tue Jun 18 14:59:36 2024 from 192.168.44.1

⚠️指纹(known_hosts)在ansible服务端
(1)密码认证
需要在/etc/ansible/hosts中进行配置:

[centos]
192.168.44.135 ansible_user=root ansible_password=xroot

(2)公钥认证
请见:SSH无密码(密钥验证)登录的配置

7)Ansible-variables变量详解

通过inventory在主机组或单个主机中设置变量:

  • 主机变量
[centos]
192.168.44.135 myid=1
  • 主机组变量
[centos:vars]
port=80
[centos]
192.168.44.135

8)Ansible执行命令结果(状态颜色)

绿色:命令以用户期望的执行了,但是状态没有发生改变;
黄色:命令以用户期望的执行了,并且状态发生了改变;
紫色:警告信息,说明ansible提示你有更合适的用法;
红色:命令错误,执行失败;
蓝色: 详细的执行过程;

2、Ansible配置文件-ansible.cfg

1)Ansible配置文件

  ansible 的配置文件为/etc/ansible/ansible.cfg,ansible 有许多参数,下面我们列出一些常见的参数:

inventory = /etc/ansible/hosts		#这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible		#指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5		#并发连接数,默认为5
sudo_user = root		#设置默认执行命令的用户
remote_port = 22		#指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False		#设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60		#设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log		#指定一个存储ansible日志的文件(默认不记录日志)

2)Ansible配置项说明

(1)defaults默认配置项

点击查看代码
- ask_pass & ask_sudo_pass
>ask_pass:可以控制Ansible剧本playbook是否会自动默认弹出密码
ask_subo_pass:用户使用的系统平台开启了sudo密码的话,应该开绿这一参数
- gather_subset
>设置收集的内容:包括all、network、hardware、virtual、facter、ohai
- remote_port & remote_tmp & remote_user
>客户机的设置,分别对登录的用户和端口,以及临时目录
- sudo_exe & sudo_flags & sudo_user
>sudo命令相关设置,分别是sudo命令路径、sudo参数、能够使用sudo的user- action_plugins & callback_plugins & connection_plugins & filter_plugins & lookup_plugins & vars_plugins
>开发者中心的插件相关功能,开发者可以开发相应的插件,来完成自己的功能。分别对应的功能为:激活事件、回调、连接、过滤器、加载路径、任何地方加载- forks
>最大开辟的进程数,这个数不易过大,过大性能耗费高,不易过小,过小的话,并发性能低,一般的设置方法是cpu核数*2- module_name
>这个是/usr/bin/ansible的默认模块名(-m)。默认是‘command’模块,command模块不支持shell变量、管道、配额,所以也许你希望把这个参数改为‘shell’- vault_password_file
>这个文件也可以称为一个脚本的形式,如果你使用脚本而不是单纯文件的话,请确保它可以执行并且密码可以在标准输出上打印出来。如果你的脚本需要提示请求数据,请求将会发到标准错误输出中。- pattern
>如果没有提供“hosts”节点,这是playbook要通信的默认主机组。默认值是对所有主机通信,如果不想被惊吓到,最好还是设置个选项。- inventory & library
>分别为存放可以通信主机的目录和Ansible默认搜寻模块路径。

(2)privilege_escalation执行命令的用户权限设置
(3)paramiko_connection paramika插件设置
(4)ssh_connection ssh连接设置
(5)accelerate
(6)selinux & colors

3、Ansible主机清单文件-hosts

如何添加一台机器:

编辑Ansible服务端的主机清单文件(Inventory):/etc/ansible/hosts
确认指纹即添加目标机器指纹到Ansible服务端的known_hosts
添加Ansible服务端的公钥到目标机器的authorized_keys
运行ansible all -m ping测试是否添加成功

HostInventory:记录由Ansible管理的主机信息,包括端口、密码、ip等

1)Inventory分组

通过Ansible Inventory文件(作用是分组)可同时操作属于一个组的多台主机,多台主机之间的通过inventory文件配置,默认的文件路径为/etc/ansible/hosts,方括号[]中是组名,一个主机可以属于不同的组。

one.example.com
[webservers]
two.example.com
three.example.com

(1)自定义连接端口
在编写hosts文件时,在域名或者ip后,加上冒号端口号。

192.168.1.1:5000
one.example.com:7999

(2)别名

[jumper]
jumperx ansible_ssh_port=5555 ansible_ssh_host=192.168.1.50

查看所有主机:ansible all --list-hosts
(3)指定登录用户

[jumper]
jumpery ansible_ssh_port=5555 ansible_ssh_host=192.168.1.1 ansible_ssh_user=papa

(4)ip连续

[vim]
vim[1:50].example.com
vim[a-f].example.com

2)Inventory参数选项

点击查看代码
ansible_host
ansible_port
ansible_user
ansible_password
ansible_sudo_pass
ansible_sudo_exe
ansible_connection 与主机的连接类型,比如:local、ssh或者paramiko
ansible_ssh_private_key_file
ansible_shell_type 目标系统的shell类型
ansible_python_interpreter

3)inventory的升级用法:

/etc/ansible/hosts是ansible中默认的被管理节点的IP存放的文件路径,如果想自己定义,或者想把不同类型的主机存在不同的文件中,可以在/etc/ansible/ansible.cfg中更改配置文件即可。

[root@localhost ~]# vim /etc/ansible/ansible.cfg
inventory      = /root/myhosts/
[root@localhost ~]# tree /root/myhosts/
/root/myhosts/
├── dbserver
└── httpd

4、Ansible命令

1)Ansible命令集

/usr/bin/ansible  Ansible AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault  Ansible 文件加密工具
/usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具

2)Ansible命令详解

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

点击查看代码
-a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k,--ask-pass #ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass #ask for su password。su切换密码
-K,--ask-sudo-pass #ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass #ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS #后台运行超时时间
-C #模拟运行环境并进行预运行,可以进行查错测试
-c CONNECTION #连接类型使用
-f FORKS #并行任务数,默认为5
-i INVENTORY #指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts #查看有哪些主机组
-m MODULE_NAME #执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-o #压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S #用 su 命令
-R SU_USER #指定 su 的用户,默认为 root 用户
-s #用 sudo 命令
-U SUDO_USER #指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT #指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u REMOTE_USER #远程用户,默认为 root 用户
-v #查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

  • ansible all -a 'ls' -v
    ansible all -m command -a 'ls' -v

3)Ansible-doc 命令

ansible-doc 命令常用于获取模块信息及其使用帮助,一般用法如下:

ansible-doc -l				#获取全部模块的信息
ansible-doc -s MOD_NAME		#获取指定模块的使用帮助

4)Ansible两种命令执行方式

Ansible实现批量管理主机的模式主要有:

利用ansible命令实现批量管理(ad-hoc)模式:ansible
利用ansible剧本实现批量管理(playbook)模式:ansible-playbook

ad-hoc和playbook的关系就好比shell命令与shell scripts的关系

5、Ansible常用模块(module)

1)调试-ping 模块

主机连通性测试:

ansible命令主体:ansible/ansible-playbook
被操作的目标机器的正则表达式:all
指定要使用的模块:-m ping

ansible all -m ping

2)命令脚本-command 模块

这个模块可以直接在远程主机上执行命令,并将结果返回本主机。
ansible centos -m command -a 'ss -ntl'

命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行。它不会通过shell进行处理,比如$HOME和操作如"<",">","|",";","&" 工作(需要使用(shell)模块实现这些功能)。注意,该命令不支持|管道命令。

下面来看一看该模块下常用的几个命令:

参数 说明
chdir 在执行命令之前,先切换到该目录
executable 切换shell来执行命令,需要使用命令的绝对路径
free_form 要执行的Linux指令,一般使用Ansible的-a参数代替
creates 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
removes 一个文件名,这个文件不存在,则该命令不执行
#先切换到/data/ 目录,再执行“ls”命令
ansible centos -m command -a 'chdir=/data/ ls'
#如果/data/aaa.jpg存在,则不执行“ls”命令`
ansible centos -m command -a 'creates=/data/aaa.jpg ls'
#如果/data/aaa.jpg存在,则执行“cat /data/a”命令
ansible centos -m command -a 'removes=/data/aaa.jpg cat /data/a'

free_form参数 :必须参数,指定需要远程执行的命令,需要说明一点,free_form参数与其他参数并不相同,free_form并不是一个”实际存在”的参数名,比如,当我们想要在远程主机上执行ls命令时,我们并不需要写成free_form=ls ,这样写反而是错误的,因为并没有任何参数的名字是free_form,当我们想要在远程主机中执行ls命令时,直接写成ls即可,这就是free_form参数的含义,因为command模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为free_form。

3)命令脚本-shell 模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。

ansible centos -m shell -a 'cat /etc/passwd |grep "keer"'

4)命令脚本-script 模块

该模块用于将本机的脚本在被管理端的机器上运行。该模块直接指定脚本的路径即可,我们通过例子来看一看到底如何使用的:

点击查看代码
# 先生成一个本地的script脚本:df.sh,并给其加上执行权限(chmod +x df.sh)
#!/bin/bashdate >> /applications/disk_total.log
df -lh >> /applications/disk_total.log# ansible运行
ansible centos -m script -a '/applications/df.sh'
# 查看运行结果
ansible centos -m shell -a 'cat /applications/disk_total.log'

5)文件管理-copy 模块

这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。
其相关选项如下:

参数 说明
src 被复制到远程主机的本地文件。可以是绝对路径,也可以是相对路径。如果路径是一个目录,则会递归复制,用法类似于"rsync"
content 用于替换"src",可以直接指定文件的值
dest 必选项,将源文件复制到的远程主机的绝对路径
backup 当文件内容发生改变后,=yes在覆盖之前把源文件备份,备份文件包含时间信息
directory_mode 递归设定目录的权限,默认为系统默认权限
force 当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;设为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
others 所有的 file 模块中的选项可以在这里使用
# 复制文件
ansible centos -m copy -a 'src=/applications/test dest=/applications'
# 给定内容生成文件,并制定权限
ansible centos -m copy -a 'content="test from content\n" dest=/applications/test/test.txt mode=777'
# 给定内容生成文件,并制定权限+如果目标文件存在,则备份
ansible centos -m copy -a 'content="test from content2\n" dest=/applications/test/test.txt mode=777 backup=yes'

6)文件管理-file 模块

该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。
下面是一些常见的命令:

参数 说明
force 需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes
group 定义文件/目录的属组。后面可以加上mode:定义文件/目录的权限
owner 定义文件/目录的属主。后面必须跟上path:定义文件/目录的路径
recurse 递归设置文件的属性,只对目录有效,后面跟上src:被链接的源文件路径,只应用于state=link的情况
dest 被链接到的路径,只应用于state=link的情况
state 状态,有以下选项

状态 选项
directory 如果目录不存在,就创建目录
file 即使文件不存在,也不会被创建
link 创建软链接
hard 创建硬链接
touch 如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent 删除目录、文件或者取消链接文件
# 创建目录
ansible centos -m file -a 'path=/applications/testfile state=directory'
# 创建链接文件-软(删除源文件有影响)
ansible centos -m file -a 'path=/applications/testfile/testb.txt src=/applications/test/test.txt state=link'
# 创建链接文件-硬链(删除源文件无影响)
ansible centos -m file -a 'path=/applications/testfile/testc.txt src=/applications/test/test.txt state=hard'
# 删除文件
ansible centos -m file -a 'path=/applications/test/test.txt state=absent'

7)文件管理-fetch 模块

该模块用于从远程某主机获取(复制)文件到本地。
有两个选项:

参数 说明
dest 用来存放文件的目录
src 在远程拉取的文件,并且必须是一个file,不能是目录
ansible centos -m fetch -a 'src=/applications/testfile/testc.txt dest=/applications/test'

要注意,文件保存的路径是我们设置的接收目录下的被管制主机ip(192.168.44.135)目录下

[root@localhost test]# tree
.
├── 192.168.44.135
│   └── applications
│       └── testfile
│           └── testc.txt

8)系统管理-cron 模块

该模块适用于管理cron计划任务的。
其使用的语法跟我们的crontab文件中的语法一致,同时,可以指定以下选项:

参数 说明
day= 日应该运行的工作( 1-31, *, */2, )
hour= 小时 ( 0-23, *, */2, )
minute= 分钟( 0-59, *, */2, )
month= 月( 1-12, *, /2, )
weekday= 周 ( 0-6 for Sunday-Saturday,, )
job= 指明运行的命令是什么
name= 定时任务描述
reboot 任务在重启时运行,不建议使用,建议使用special_time
special_time 特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state 指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
user 以哪个用户的身份执行
# 添加计划任务
ansible centos -m cron -a 'name="ntp update every 5 hour" hour=*/6 job="/sbin/ntpdate ntpdate ntp.aliyun.com &> /dev/null"'
# 删除计划任务 (根据name进行删除,删除之前可以先查看看定时任务)
ansible centos -m cron -a 'name="ntp update every 5 hour" state=absent'

9)软件包管理-yum 模块

顾名思义,该模块主要用于软件的安装。
其选项如下:

参数 说明
name 所安装的包的名称或路径(一个或多个)
state installed、present:安装(不更新), latest:安装最新的(更新), removed、absent:卸载软件
update_cache 强制更新yum的缓存
conf_file 指定远程yum安装时所依赖的配置文件(安装本地已有的包)
disable_pgp_check 是否禁止GPG checking,只用于presentor latest
disablerepo 临时禁止使用yum库。 只用于安装或更新时
enablerepo 临时使用的yum库。只用于安装或更新时
validate_certs 如果下载地址是https,需要设置为no
ansible centos -m yum -a 'name=boxes state=present'

10)软件包管理-get_url模块

参数 说明
url 指定下载地址
dest 下载到(目录已存在)

11)用户管理-user 模块

该模块主要是用来管理用户账号。
其主要选项如下:

参数 说明
comment 用户的描述信息
createhome 是否创建家目录
force 在使用state=absent时, 行为与userdel –force一致
group 指定基本组
groups 指定附加组,如果指定为(groups=)表示删除所有组
home 指定用户家目录
move_home 如果设置为home=时, 试图将用户主目录移动到指定的目录
name 指定用户名
non_unique 该选项允许改变非唯一的用户ID值
password 指定用户密码
remove 在使用state=absent时, 行为是与userdel –remove一致
shell 指定默认shell
state 设置帐号状态,不指定为创建,指定值为absent表示删除
system 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid 指定用户的uid
ansible centos -m user -a 'name=hacker home=/home/hacker'

12)service 模块

该模块用于服务程序的管理。
其主要选项如下:

参数 说明
arguments 命令行提供额外的参数
enabled 设置开机启动
name= 服务名称
runlevel 开机启动的级别,一般不用指定
sleep 在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。(定义在剧本中。)
state 有四种状态,分别为:started:启动服务, stopped:停止服务, restarted:重启服务, reloaded:重载配置
ansible centos -m service  -a 'name=nginx state=started enabled=true'
ansible centos -m service -a 'name=nginx state=stopped'

13)用户管理-group 模块

该模块主要用于添加或删除组。
常用的选项如下:

命令 说明
gid= 设置组的GID号
name= 指定组的名称
state= 指定组的状态,默认为创建,设置值为absent为删除
system= 设置值为yes,表示创建为系统组

-例

ansible centos -m group -a 'name=centos'

13)setup 模块

该模块主要用于收集信息,是通过调用facts组件来实现的。

facts组件是Ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。

(1)查看信息
我们可以直接用命令获取到变量的值

# 查看内存
ansible centos -m setup -a 'filter="*mem*"'
# 通过命令查看
ansible centos -m shell -a 'free -m'

(2)保存信息
我们的setup模块还有一个很好用的功能就是可以保存我们所筛选的信息至我们的主机上,同时,文件名为我们被管制的主机的IP,这样方便我们知道是哪台机器出的问题。

ansible centos -m setup -a 'filter="*mem*"' --tree /applications

6、Ansible ad-hoc模式

Ansible的ad-hoc模式也就是ansible的命令行模式,该模式通常用来临时处理一些任务。例如

临时批量查看所有被管控机器的内存、负载、磁盘
临时批量分发某个特定文件

7、Ansible playbook模式

1)Ansible playbook 简介

  playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。
通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的一系列 to-do-list ,而被控节点必须要完成。
也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

2)Ansible playbook使用场景

  执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。
就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。
使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。

3)Ansible playbook格式

playbook由YMAL语言编写。
以下为playbook常用到的YMAL格式:
①文件的第一行应该以 "---" (三个连字符)开始,表明YMAL文件的开始。
②在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
③YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。
④同一个列表中的元素应该保持相同的缩进(2个空格,不要用tab键)。否则会被当做错误处理。
⑤play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以":"分隔表示,":"后面还要增加一个空格。

点击查看代码
---
#安装与运行nginx服务
- hosts: centosremote_user: roottasks:- name: install nginx packageyum: name=nginx state=present- name: starting nginx serviceservice: name=nginx state=started

我们的文件名称应该以.yml结尾,其中,有三个部分组成:

hosts:使用 hosts 指示使用哪个主机或主机组来运行下面的 tasks ,每个 playbook 都必须指定 hosts ,hosts也可以使用通配符格式。主机或主机组在 inventory 清单中指定,可以使用系统默认的/etc/ansible/hosts,也可以自己编辑,在运行的时候加上-i选项,指定清单的位置即可。在运行清单文件的时候,–list-hosts选项会显示那些主机将会参与执行 task 的过程中。
remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行 task 的用户,可以任意指定,也可以使用 sudo,但是用户必须要有执行相应 task 的权限。
tasks:指定远端主机将要执行的一系列动作。tasks 的核心为 ansible 的模块,前面已经提到模块的用法。tasks 包含 name 和要执行的模块,name 是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。

4)Ansible playbook命令:ansible-playbook

ansible-playbook命令参数
-i 指定主机清单文件
-C 模拟运行剧本,检查是否有问题
--syntax-check 仅仅检查剧本格式是否有误

ansible-playbook -C createuser.yml

5)Playbook的核心元素

Hosts:主机组;
Tasks:任务列表;
Variables:变量,设置方式有四种;
Templates:包含了模板语法的文本文件;
Handlers:由特定条件触发的任务;

6)Paybooks配置文件的基础组件

Hosts:运行指定任务的目标主机
remoute_user:在远程主机上执行任务的用户;
sudo_user
tasks:任务列表

image
格式:

tasks:– name: TASK_NAMEmodule: argumentsnotify: HANDLER_NAME
handlers:– name: HANDLER_NAMEmodule: arguments

模块,模块参数

格式:
(1) module: arguments
(2) action: module arguments

注意:shell和command模块后面直接跟命令(使用:),而非key=value类的参数列表;

handlers:任务,在特定条件下触发;接收到其它任务的通知时被触发;

(1) 某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;
(2) 任务可以通过“tags“打标签,而后可在ansible-playbook命令上使用-t指定进行调用;

8、Ansible-role角色

参考:https://www.cnblogs.com/keerya/p/7987886.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/47178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

使用宝塔面板反向代理openai

创建站点 配置反向代理 openai的特殊配置:proxy_set_header X-Error-Message $upstream_http_x_error_message; proxy_buffering off; proxy_ssl_server_name on; proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 反向代理完整配置:#PROXY-START/location ^~ / {proxy_pass ht…

模拟集成电路设计系列博客——7.2.3 每阶段k-bit流水线ADC

7.2.3 每阶段k-bit流水线ADC 通过增加中间级增益和每级的比较器可以在每级解析多于1比特。信号流图类似之前介绍的每次迭代2比特的逐次逼近型ADC。一个通用的k比特级如下图所示:k比特副ADC的非线性可以通过增加额外的比较器通过数字方式来校正,类似于每级1.5比特架构[Lewis, …

安装metasploitable2

一、介绍 Metasploitable2 虚拟系统是一个特别制作的ubuntu操作系统 二、安装virtualbox 三、下载 metasploitable2,网址 https://sourceforge.net/projects/metasploitable/files/Metasploitable2/ ,解压如下 四、打开virtualbox 1 新建虚拟机2 选择虚拟硬盘3 选择注册4 选…

Python 遍历文件每一行判断是否只有一个换行符详解

前言 在文件处理过程中,判断文件每一行是否只有一个换行符是一个常见需求。作为测试工程师,我们经常需要对文件的格式进行验证,确保数据的完整性和规范性。本文将详细介绍如何使用 Python 遍历文件的每一行,并判断每一行是否只有一个换行符。 需求分析 我们需要编写一个 Py…

Python 抽奖程序限定次数详解

前言 在开发抽奖程序时,限定用户的抽奖次数是一个常见需求。Python 提供了灵活的工具和数据结构,可以轻松实现这个功能。本文将详细介绍如何编写一个限定抽奖次数的 Python 程序,包括设置抽奖次数限制、记录用户抽奖次数以及实现抽奖逻辑。 需求分析 我们需要一个抽奖程序,…

Typora行内公式识别不了

Typora行内公式识别不了,主要是因为行内公式属于LaTeX扩展语法,并非Markdown的通用标准需要在Typora的“文件”-“偏好设置”-“Markdown扩展语法”中,勾选“内联公式”一项,Typora才会予以解析。成功效果

Postman 自定义变量使用详解

前言 Postman 是一款强大的API测试工具,广泛应用于API开发和测试中。自定义变量是 Postman 中的重要功能,能够让测试过程更加灵活和高效。本文将详细介绍如何定义、使用和管理 Postman 中的自定义变量,包括全局变量、环境变量、集合变量和本地变量。 自定义变量类型全局变量…

快速掌握 WinRAR:详细安装与使用指南

前言 WinRAR 是一款广受欢迎的文件压缩和解压工具,支持多种压缩格式,如RAR、ZIP、CAB、ARJ、LZH、TAR、GZ、ACE、UUE、BZ2、JAR 和 ISO。本文将详细介绍如何下载、安装和配置 WinRAR,以帮助用户轻松完成软件的安装和使用。 WinRAR 下载访问官网:打开浏览器,访问 WinRAR 官…