简介
基于Python开源的自动化工具,用于配置管理、部署、编排和远程执行任务,它使用SSH协议进行通信,由Paramiko(Python库)、 PyYAML和Jinja2 ( 模板化 ) 三个关键模块实现,并使用基于YAML的描述文件来定义任务和配置
特性
- 模块化
- 无客户端
- 主从模式
- 幂等性
关键参数
-
主机清单(Inventory):主机清单是一个YAML或INI格式的文件,用于定义受管理的主机和主机组,它指定了Ansible将在哪些主机上执行任务
-
模块(Module):模块是Ansible的基本执行单元,用于在目标主机上执行特定的任务,Ansible提供了丰富的模块库,包括文件操作、软件包管理、用户管理等各种功能
-
Playbook(剧本):Playbook是一个YAML格式的文件,用于定义一系列任务和配置的顺序,它描述了Ansible在目标主机上执行的操作流程,包括主机选择、任务执行和变量设置等
-
角色(Role):角色是一种组织和复用任务和配置的方法,它将相关的任务、变量和文件组织在一起,以便在多个Playbook中重复使用
-
变量(Variable):变量用于存储和传递数据,在Playbook中可以使用变量来实现灵活的配置,变量可以在主机清单、Playbook和角色中定义,并可以通过模板或命令行参数进行动态设置
-
Handlers:Handlers是一种特殊的任务,它用于响应其他任务的状态变化,当某个任务发生变化时,Handlers可以触发相应的操作,如重新启动服务、重新加载配置等
-
模板(Template):模板是一种用于生成配置文件的机制,Ansible使用jinja2模板引擎,可以在模板中使用变量和条件语句来动态生成配置文件
-
Vault:Vault用于安全地存储敏感信息,如密码和密钥,它可以加密和解密Ansible的变量文件,以防止敏感信息泄露
开始
Ad-Hoc
简短地指令,指令操作模式
Ad-Hoc commands 一次只能处理一件事情,这即是它与 Playbooks 最大的差异
Playbook
Ansible 剧本,可以通过事先写好的剧本 (Playbooks)来让各个被控节点进行指定的动作 (Plays) 和任务 (Tasks)
[root@localhost ansible]# ansible-playbook playbooks/main.yml
PLAY [Test] *************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************
ok: [10.191.101.254]
TASK [Hello world] ******************************************************************************************************************************
changed: [10.191.101.254]
TASK [Print stdout] *****************************************************************************************************************************
ok: [10.191.101.254] => {
"msg": ""
}
PLAY RECAP **************************************************************************************************************************************
10.191.101.254 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Play、Task与Module
- Play:通常为某个特定的目的,例如:
Setup a official website with Drupal
(借由 Drupal 建置官网)Restart the API service
(重开 API 服务)
- Task:是要实行 Play 这个目地所需做的每个步骤,例如:
Install the Nginx
(安裝 Nginx)Kill the djnago process
(强制停止 django 的行程)
- Module:Ansible 所提供的各种操作方法,例如:
apt: name=vim state=present
(使用 apt 套件安装 vim)command: /sbin/shutdown -r now
(使用 shutdown 的指令重新开机)
Ansible inventory
用于动态生成Ansible inventory的命令行工具,Ansible inventory用于定义Ansible可以管理的主机和主机组,以及与这些主机相关的变量,通过使用ansible-inventory
命令,可以根据不同的数据源生成动态的Ansible inventory
- 查看当前主机和主机组
- 使用静态文件生成inventory,使用静态的INI格式文件来定义主机和主机组
- 使用动态脚本来生成更灵活的inventory,创建一个Python脚本,并实现必要的逻辑来动态生成inventory
- 使用外部数据源生成inventory,
ansible-inventory
可以与外部数据源集成,如AWS EC2、OpenStack,使用相关插件来配置和指定数据源
ansible hosts
/etc/ansible/hosts 是主机清单配置文件,由 ansible.cfg文件中的 inventory 变量配置,默认值为/etc/ansible/hosts,在使用ansible命令前,需要对hosts文件进行相关主机清单配置
参数名称 | 作用说明 | 举例 |
---|---|---|
ansible_ssh_host | # 用于指定被管理的主机的真实IP | ansible_ssh_host=192.168.1.1 |
ansible_ssh_port | # 用于指定连接到被管理主机的ssh端口号,默认是22 | ansible_ssh_port=2000 |
ansible_ssh_user | # ssh连接时默认使用的用户名 | ansible_ssh_user=dba |
ansible_ssh_pass | # ssh连接时的密码 | ansible_ssh_pass=test1234 |
ansible_sudo | # sudo用户 | ansible_sudo=dba |
ansible_sudo_pass | # 使用sudo连接用户时的密码 | ansible_ssh_pass=test1234 |
ansible_sudo_exec | # 如果sudo命令不在默认路径,需要指定sudo命令路径 | ansible_sudo_exec=/usr/bin/sudo |
ansible_ssh_private_key_file | # 秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项 | ansible_ssh_private_key_file=/root/key |
ansible_shell_type | # 目标系统的shell的类型,默认sh | ansible_shell_type=bash |
ansible_connection | SSH 连接的类型: local , ssh , paramiko,在 ansible 1.2 之前默认是 paramiko ,后来智能选择,优先使用基于 ControlPersist 的 ssh (支持的前提) | ansible_connection=local |
ansible_python_interpreter | # 用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl 的路径 | ansible_python_interpreter=/usr/bin/python2.7 |
ansible_*_interpreter | # 其他解释器路径,用法和ansible_python_interpreter类似,这里”*“可以是ruby或才perl等其他语言 | ansible_*_interpreter=/usr/bin/ruby |
指定python版本
指定受控端python版本
在受控端使用指定版本的python安装对应ansible module
Ansible Galaxy
Ansible Galaxy是一个用于共享和管理Ansible角色的平台,当使用Ansible Galaxy创建或安装角色时,它会生成一种常见的目录结构,以便更好地组织和管理角色
创建角色:使用ansible-galaxy init
命令创建角色,并指定角色的名称,创建一个名为”my_role”的角色
ansible-galaxy init my_role
典型目录结构
role_name/
├── defaults/
│ └── main.yml
├── files/
│ └── some_file.txt
├── handlers/
│ └── main.yml
├── meta/
│ └── main.yml
├── tasks/
│ └── main.yml
├── templates/
│ └── some_template.j2
├── vars/
│ └── main.yml
└── README.md
defaults/
:包含角色的默认变量,这些变量会被其他任务和角色使用files/
:包含角色使用的静态文件,如配置文件或脚本handlers/
:包含角色的处理程序,用于处理特定的事件或触发器meta/
:包含角色的元数据,如作者、依赖项和支持的平台tasks/
:包含角色的主要任务,即要执行的操作templates/
:包含角色使用的模板文件,这些文件可以根据变量动态生成内容vars/
:包含角色的变量文件,用于定义角色的变量值README.md
:角色的说明和文档
Ansible Galaxy
- 搜索角色,使用
ansible-galaxy search
命令搜索Ansible Galaxy上的角色
搜索名为”nginx”的角色
- 查看角色详情,使用
ansible-galaxy info
命令查看角色的详细信息
查看名为”nginx”的角色的详细信息
- 安装角色,使用
ansible-galaxy install
命令安装角色,可以通过指定角色名称和可选的版本号来安装角色
安装名为”nginx”的最新版本角色
安装特定版本的角色
- 使用角色,一旦安装了角色,可以使用
roles
关键字来指定要使用的角色
- 管理角色,使用
ansible-galaxy
命令来管理已安装的角色
ansible-galaxy list
命令列出已安装的角色ansible-galaxy remove
命令卸载角色ansible-galaxy update
命令更新角色
关键字
Ansible 是一个非常强大的自动化运维工具,它使用 YAML 格式的 Playbooks 来描述配置和任务,使得自动化任务变得清晰和易于管理。在 Ansible 中,有一些关键词和概念是经常使用的,下面列出了一些常见的关键词及其简单介绍:
- hosts: 定义目标主机,可以是单个主机名、IP 地址,也可以是主机组。例如,
all
,webservers
,db_servers
。 - tasks: Playbook 中的基本构建单元,用来执行具体的操作,如安装软件包、修改配置文件、重启服务等。
- playbooks: YAML 文件,包含一系列的任务,用于描述一组主机上的自动化操作序列。Playbooks 是 Ansible 的主要配置文件。
- modules: Ansible 提供的可执行代码片段,用于执行特定的任务。例如,
apt
,yum
,file
,command
,shell
等模块。 - handlers: 用于响应事件的特殊任务,比如在配置文件改变后重启服务。只有当被触发时,handler 才会被执行。
- roles: 将相关的任务、文件、模板和变量组织在一起的目录结构,用于实现模块化和重用。
- facts: Ansible 收集的关于远程主机的信息,如操作系统、内核版本、网络接口等。可以通过变量访问这些信息,例如
ansible_os_family
,ansible_distribution
,ansible_all_ipv4_addresses
。 - variables: 用于存储和传递信息的容器,可以在 Playbooks 和 Tasks 中使用。例如,
my_var
,ansible_ssh_host
。 - tags: 用于标记 Playbook 中的 tasks 或 plays,可以用于控制哪些任务在执行时被包含或跳过。
- when: 控制条件,用于指定某个 task 在满足特定条件下才执行。
- become: 用于执行需要更高权限的任务,相当于 sudo 或 su 的功能。可以通过
become: yes
或sudo: yes
来启用。 - include_tasks: 用于在 Playbook 中包含另一个任务列表文件,实现任务的复用和模块化。
- import_playbook: 在当前 Playbook 中导入并执行另一个 Playbook。
- delegate_to: 用于将任务委托给另一台主机执行,而不是当前主机。
- rescue: 当一个任务失败时,执行 rescue 模块中的任务,用于错误处理。
- always: 无论前面的任务是否成功,总是执行 always 模块中的任务,常用于清理操作。
- loop: 用于迭代执行任务,可以基于列表或其他可迭代对象。
- block: 将多个任务组合在一起,用于一起应用 when, rescue, always 控制语句。
- register: 将任务输出注册到一个变量中,以便后续任务使用。
- with_items: 旧的迭代语法,已经被
loop
替换,但在一些老的 Playbooks 中仍然可见。
Module
command
command
模块是个可以在远端上执行指令的指令模组(Commands Modules),但它不支持变数(变量)和 <
, >
, |
, ;
和 &
等运算,若有这类请需求改用shell
模块
- chdir:指定要在远程主机上执行命令的工作目录
- creates:指定一个文件路径,如果该文件存在,则命令将不会执行
- executable:指定要执行的命令的可执行文件路径,例如/bin/bash
- removes:指定一个文件路径,如果该文件不存在,则命令将不会执行
- warn:默认为yes,如果设置为no,则不会在命令失败时发出警告
- stdin:将命令的标准输入设置为指定的字符串
- stdin_add_newline:默认为yes,如果设置为no,则不会在stdin末尾添加换行符
- strip_empty_ends:默认为yes,如果设置为no,则不会去掉命令输出中的空行
- cmd:要在远程主机上执行的命令
shell
shell模块用于在远程主机上执行Shell命令
chdir
:指定要在远程主机上执行命令的工作目录creates
:指定一个文件路径,如果该文件存在,则命令将不会执行executable
:指定要执行的命令的可执行文件路径,例如/bin/bash
removes
:指定一个文件路径,如果该文件不存在,则命令将不会执行warn
:默认为yes
,如果设置为no
,则不会在命令失败时发出警告stdin
:将命令的标准输入设置为指定的字符串stdin_add_newline
:默认为yes
,如果设置为no
,则不会在stdin末尾添加换行符strip_empty_ends
:默认为yes
,如果设置为no
,则不会去掉命令输出中的空行cmd
:要在远程主机上执行的Shell命令
> 和 | 有什么异同
在 Ansible 中,shell
模块和其他模块一样,可以接受多行字符串作为参数值。当需要传递一个多行的命令或者脚本时,可以使用 >
或 |
来定义这些多行字符串。这两种方式的主要区别在于如何处理空白字符(空格、制表符)和如何对文本进行折叠。
使用 |
(Pipe) 符号
当使用 |
符号时,Ansible 会将下一行开始的文本作为多行字符串,直到下一个 |
符号出现或 YAML 文件结束。使用 |
时,所有缩进都会被忽略,只保留相对缩进。这意味着在 |
下方写的任何文本都将保持原样,除了最左侧的缩进会被移除。例如:
在这个例子中,echo
命令后面的空白字符会被保留,而最左侧的缩进(通常是两个空格或一个制表符)会被移除。
使用 >
符号
当使用 >
符号时,Ansible 会像使用 |
一样创建一个多行字符串,但是它会对文本进行折叠,移除所有的前导缩进,并且将连续的空白字符压缩成一个空格。例如:
在这个例子中,所有的前导缩进会被移除,而且连续的空白字符(包括空格和制表符)会被压缩成一个空格。
stat
stat
模块用于获取文件或路径的状态信息
path
(必需):要检查状态的文件或路径follow
:如果路径是符号链接,是否跟随链接获取链接指向的文件的状态,默认为no
,不跟随链接get_checksum
:是否获取文件的校验和,默认为no
checksum_algorithm
:用于计算校验和的算法,仅当get_checksum
为yes
时有效,可选的值有md5
、sha1
、sha224
、sha256
、sha384
和sha512
,默认为md5
get_md5
、get_sha1
、get_sha224
、get_sha256
、get_sha384
、get_sha512
:分别指定是否获取特定类型的校验和,这些选项会覆盖get_checksum
和checksum_algorithm
follow_ancestors
:如果路径不存在,是否跟随祖先路径,默认为no
file_type
:用于检查文件类型的选项,可选的值有file
、directory
、symlink
、hard
和socket
,可以指定多个类型,以逗号分隔file_gid
、file_group
:用于检查文件所属组的选项,可以指定组 ID 或组名file_uid
、file_owner
:用于检查文件所有者的选项,可以指定用户 ID 或用户名path_stat
:指定一个变量名,将状态信息存储在该变量中,而不是默认的stat
变量follow_mode
:是否跟随路径获取模式,默认为yes
文件状态属性
exists
:文件是否存在,返回布尔值(true
或false
)isdir
:文件是否是目录,返回布尔值isfile
:文件是否是常规文件,返回布尔值isreg
:文件是否是普通文件,返回布尔值islink
:文件是否是符号链接,返回布尔值uid
:文件的所有者用户 IDgid
:文件的所有者组 IDmode
:文件的权限模式,以八进制表示size
:文件的大小(字节)mtime
:文件的修改时间戳
file
file模块用于管理文件和目录的属性和权限
path
:指定要管理的文件或目录的路径state
:指定文件或目录的状态,可以是file
、directory
、link
、hard
、touch
等mode
:指定文件或目录的权限模式,例如0644
owner
:指定文件或目录的所有者group
:指定文件或目录的所属组recurse
:如果设置为yes
,则递归地应用文件或目录的属性和权限follow
:如果设置为yes
,则会跟随符号链接操作force
:如果设置为yes
,在修改文件或目录属性时会强制执行selevel
:指定SELinux安全标签的级别serole
:指定SELinux安全标签的角色setype
:指定SELinux安全标签的类型seuser
:指定SELinux安全标签的用户
copy
copy模块用于将文件或目录复制到远程主机
src
:指定要复制的源文件或目录的路径dest
:指定目标文件或目录的路径backup
:如果设置为yes
,在复制文件之前会创建备份文件force
:如果设置为yes
,则即使目标文件已存在,也会强制复制文件mode
:指定目标文件的权限模式,例如0644
owner
:指定目标文件的所有者group
:指定目标文件的所属组remote_src
:如果设置为yes
,则将在远程主机上查找源文件validate
:指定一个命令来验证复制的文件,如果验证命令不返回零,则会发出错误follow
:如果设置为yes
,则会跟随源文件的符号链接进行复制content
:将指定的内容复制到目标文件
fetch
fetch模块用于从远程主机复制文件到控制节点
src
:指定要复制的远程主机上的文件路径dest
:指定目标文件或目录的路径flat
:如果设置为yes
,则在目标目录中只创建一个文件,而不是使用远程主机上的完整路径validate_checksum
:如果设置为yes
,则在复制文件之前检查文件的校验和md5sum_file
:指定一个文件路径,用于存储远程主机上文件的校验和backup
:如果设置为yes
,在复制文件之前会创建备份文件force
:如果设置为yes
,则即使目标文件已存在,也会强制复制文件
debug
debug模块用于输出调试信息
msg
:指定要输出的调试信息var
:指定要输出的变量的值verbosity
:指定输出的详细程度,可以是0
(只输出关键信息)、1
(默认,输出一般信息)、2
(输出详细信息)等debugger_on
:如果设置为yes
,则在输出调试信息后启用调试器
lineinfile
lineinfile模块用于在文件中搜索并替换行
path
:指定要操作的文件的路径,line
:指定要插入、修改或删除的行内容state
:指定行的状态,可以是present
(存在)、absent
(不存在)、before
(在指定行之前插入)、after
(在指定行之后插入)等regexp
:指定用于搜索行的正则表达式backrefs
:如果设置为yes
,则在替换行时可以在line
中使用后向引用insertafter
:指定在哪一行之后插入新行insertbefore
:指定在哪一行之前插入新行dest
:指定目标文件的路径,如果设置,则会将匹配的行复制到该文件中firstmatch
:如果设置为yes
,则只匹配第一条满足条件的行
gather_facts
gather_facts模块用于收集目标主机的系统信息。它会自动执行一系列的任务来获取主机的各种属性,如操作系统类型、版本、主机名、IP地址、CPU和内存信息等。
常见的参数选项如下:
gather_subset
:指定要收集的子集。可以是all(默认值)、hardware、network、virtual、ohai、facter等。可以使用逗号分隔多个子集。gather_timeout
:指定收集信息的超时时间,单位为秒。默认为10秒。filter
:指定一个过滤器来选择要收集的主机。可以是一个主机模式,如web*
,也可以是一个主机组名。gather_timeout_msg
:指定超时时打印的错误消息。gather_subset
:指定要收集的信息子集。gather_timeout
:指定收集信息的超时时间。gather_timeout_msg
:指定超时时的错误消息。
become
become功能允许在执行任务时切换到其他用户身份,例如root用户,以便执行需要特权的操作。
常用的参数:
become: true
:表示启用become功能,默认情况下为false,需要手动设置为true才能使用become功能。become_user: <username>
:指定切换到的目标用户,默认为root。可以指定其他具有特权的用户。become_method: <method>
:指定切换用户的方法。常见的方法包括sudo和su,默认为sudo。become_flags: <flags>
:指定切换用户时附加的标志。可用于指定sudo的附加标志。become_exe: <executable>
:指定用于切换用户的可执行文件。默认情况下,根据become_method自动选择适当的可执行文件。ansible_become_pass: <password>
:指定become用户的密码。可以在剧本中明文指定密码,或者使用vault加密密码。
pre_tasks
pre_tasks是一组任务,这些任务会在playbook的主要任务之前执行。pre_tasks通常用于在执行主要任务之前进行一些准备工作,例如设置环境变量、安装前置依赖、检查目标主机状态等。
pre_tasks块可以在playbook的任何地方定义,通常位于playbook的顶层。它可以包含一个或多个任务,每个任务可以是一个单独的模块或一个包含多个模块的任务列表。
以下是一个使用pre_tasks的示例:
在上面的例子中,pre_tasks块包含了两个任务:设置环境变量和安装依赖。这些任务会在执行主要任务之前依次执行。
需要注意的是,pre_tasks块中的任务会在目标主机上按顺序执行,并且不受条件或循环控制的影响。如果pre_tasks中的任何任务失败,整个playbook都将失败,并且不会执行主要任务。
pre_tasks是一个可选项,根据实际需求决定是否使用。它通常用于执行一些必要的准备工作,以确保主要任务能够成功执行。
register
Ansible中的register
关键字用于捕获任务(task)的输出,并将其保存到一个变量中,这样可以在后续的任务中调用这个变量。这种机制允许用户在执行特定操作后,根据操作的结果来决定如何响应,例如执行其他Ansible语句或进行条件判断等。通过使用register
,可以将命令、模块或任务的输出存储到变量中,这不仅限于单个playbook内的使用,而且在不同的playbook之间也可以共享这些变量。例如,我们使用register
将stat
模块的结果保存到file_stat
变量中:
这将执行stat
模块来检查文件是否存在,并将结果保存到file_stat
变量中。然后,可以在后续任务中引用file_stat
变量来获取之前任务的结果。在copy
任务中使用了file_stat
变量,以便根据文件是否存在来决定是否标记任务为”changed”:
- name: Create file if it doesn't exist
copy:
src: /path/to/source
dest: /path/to/file
changed_when: "'file_stat.stat.exists' == 'False'"
使用了file_stat.stat.exists
来访问之前stat
模块的结果中的文件存在信息。如果文件不存在,则任务被标记为”changed”。
changed_when
changed_when
参数用于指定在哪些情况下标记任务为”changed”(已更改)。默认情况下,如果任何模块的返回结果中存在变化,则任务将被标记为”changed”。
为保证ansible代码的规范,在任务中需要明确是否返回对结果或条件的更改。除非任务只读取信息,否则应确保它们以以下方式返回更改:
- 注册结果或条件并使用changed_when子句。
- 使用creates或removes参数。
changed_when
参数可以使用以下方式指定:
- 布尔值:当指定为
True
时,任务总是被标记为”changed”;当指定为False
时,任务总是被标记为”ok”。 - 字符串:任务的输出将与指定的字符串进行比较。如果匹配,则任务被标记为”ok”;如果不匹配,则任务被标记为”changed”。可以使用Jinja2模板语法来引用变量。
- Python表达式:可以使用Python表达式来指定任务的返回结果是否应被标记为”changed”。可以使用Jinja2模板语法来引用变量。
示例:
首先使用stat
模块检查文件是否存在,并将结果存储在file_stat
变量中。然后,使用copy
模块复制文件。如果文件不存在(即file_stat.stat.exists
为False
),则任务被标记为”changed”,否则被标记为”ok”。
fqcn
在Ansible中,Fully Qualified Collection Name(FQCN)是一种用于指定模块、插件或动作的完整集合名称的方法。这种做法有助于避免命名冲突和提高代码的可读性。从Ansible 2.10版本开始,许多插件和模块已经迁移到了Collections上,这意味着它们现在属于特定的命名空间,如ansible.builtin
或自定义命名空间。使用FQCN可以确保操作使用的是正确的命名空间中的代码,从而避免了潜在的歧义和冲突。
例如,如果想要使用shell
模块,而不是简单地写shell
,应该使用其FQCN ansible.builtin.shell
。同样,当引用一个集合的内容时,也可以通过FQCN来指定,如my_namespace.my _collection.my _module
。此外,即使是在ansible-core中,也推荐使用FQCN来明确指出要使用的模块或插件,以避免与其他可能存在的集合发生冲突,并便于链接到模块文档。
在迁移Ansible playbook和角色时,强烈建议使用FQCN以避免意外行为。这是因为FQCN提供了一种更清晰的方式来指定使用的模块或插件的确切来源,尤其是在存在多个集合包含相同名称的模块或插件时。此外,使用FQCN还有助于保持Ansible内容的质量,通过遵循最佳实践,可以预防潜在的问题并维护一致且高效的自动化脚本。
FQCN是Ansible中一个重要的概念,它通过提供一个明确的命名空间来帮助开发者避免命名冲突,提高代码的可维护性和可读性。在编写Ansible剧本时,应当尽可能地使用FQCN来指定所需的模块、插件或动作。
示例:
service
service模块用于管理系统服务的状态
name
:指定要管理的服务的名称state
:指定服务的状态,可以是started
(启动)、stopped
(停止)、restarted
(重新启动)、reloaded
(重新加载)等enabled
:如果设置为yes
,则在系统启动时启用服务disabled
:如果设置为yes
,则在系统启动时禁用服务pattern
:指定用于匹配服务进程的模式,可以是进程名称、进程ID等arguments
:指定启动服务时要传递的附加参数sleep
:指定在重新启动或重新加载服务之前等待的时间,以秒为单位timeout
:指定等待服务状态变化的超时时间,以秒为单位runlevel
:指定服务在哪个运行级别下启动
user
user模块用于管理系统用户,下面是一些常用的参数选项的介绍:
name
:指定要管理的用户的用户名state
:指定用户的状态,可以是present
(存在)、absent
(不存在)、locked
(锁定)等uid
:指定用户的用户IDpassword
:指定用户的密码,可以是明文密码,也可以是加密后的密码group
:指定用户所属的主组groups
:指定用户所属的附加组shell
:指定用户的默认shellhome
:指定用户的家目录路径createhome
:如果设置为yes
,则在创建用户时创建家目录remove
:如果设置为yes
,则在删除用户时同时删除家目录move_home
:如果设置为yes
,则在修改用户家目录路径时同时移动家目录non_unique
:如果设置为yes
,则允许非唯一的用户ID
lvm
lvm模块用于管理逻辑卷管理器(LVM)
vg
:指定要管理的卷组的名称pvs
:指定要创建物理卷的设备lvs
:指定要创建逻辑卷的卷组和逻辑卷的配置state
:指定卷组、物理卷或逻辑卷的状态,可以是present
(存在)、absent
(不存在)等resizefs
:如果设置为yes
,则在调整逻辑卷大小后同时调整文件系统大小force
:如果设置为yes
,则在删除逻辑卷或卷组时强制执行zero
:如果设置为yes
,则在删除物理卷时将其填充为零pvresize
:如果设置为yes
,则在创建或删除物理卷后调整物理卷的大小fstype
:指定逻辑卷上的文件系统类型
mount
Ansible的mount模块主要用于管理被控端设备的挂载,包括挂载和卸载操作。该模块的基本功能是配置文件系统的挂载点,以及与之相关的参数设置。
mount模块主要用于管理被控端设备的挂载,包括挂载和卸载操作。该模块的基本功能是配置文件系统的挂载点,以及与之相关的参数设置。
- state:指定挂载点的状态,可以是
present
(表示挂载点存在)或mounted
(表示挂载点已挂载)。这是执行挂载操作时必须指定的参数之一。 - src:指定要挂载的设备或文件系统的路径。这个参数是必需的,用于明确挂载源的位置。
- path:指定设备挂载至本地的路径,即挂载点。这个参数也是必需的,用于定义挂载的目标位置。
- fstype:指定挂载的文件系统类型,如
ext4
、nfs
等。当state
为present
或mounted
时,此参数是必需的。 - opts:挂载选项,用于指定挂载时的具体参数,如权限、同步模式等。这些选项可以根据需要进行自定义。
- dest:虽然在一些文档中提到,但实际上在官方文档和示例中并未明确提及此参数。它可能是一个误导信息,或者是在特定上下文中使用的非标准参数。
- username和password:在某些情况下,如果挂载源是基于网络的共享(如NFS),可能需要提供用户名和密码来访问共享资源。这些参数用于指定访问共享时的身份验证信息。
- sync:指定将文件系统挂载为同步模式,确保数据立即写入磁盘,适用于需要高数据一致性的场景。
yum
yum模块用于管理CentOS或Red Hat系统上的软件包
name
:指定要安装、卸载或更新的软件包的名称state
:指定软件包的状态,可以是present
(存在)、absent
(不存在)、latest
(最新)等update_cache
:如果设置为yes
,则在安装软件包之前会更新软件包缓存disablerepo
:指定要禁用的软件源enablerepo
:指定要启用的软件源disable_gpg_check
:如果设置为yes
,则会禁用软件包的GPG检查installroot
:指定软件包的安装根目录exclude
:指定要排除的软件包skip_broken
:如果设置为yes
,则会跳过损坏的软件包disable_excludes
:如果设置为yes
,则会禁用软件包的排除规则
示例
pip
pip模块用于管理Python包
name
:指定要安装、卸载或更新的Python包的名称state
:指定Python包的状态,可以是present
(存在)、absent
(不存在)、latest
(最新)等executable
:指定要使用的pip可执行文件的路径extra_args
:指定要传递给pip的额外参数requirements
:指定一个要安装的包的要求文件路径virtualenv
:指定一个虚拟环境的路径,安装包将被限制在该环境中editable
:如果设置为yes
,则使用可编辑模式安装包chdir
:指定要切换到的目录,然后执行pip命令umask
:指定安装包时的umask值proxy
:指定代理服务器的URL
git
git模块用于管理Git仓库
repo
:指定要克隆或更新的Git仓库的URLdest
:指定要克隆或更新的目标目录的路径version
:指定要检出的Git分支、标签或提交的版本号accept_hostkey
:如果设置为yes
,则接受远程主机的SSH密钥force
:如果设置为yes
,则强制执行克隆或更新操作key_file
:指定用于身份验证的SSH私钥文件的路径recursive
:如果设置为yes
,则递归地克隆或更新Git子模块clone
:如果设置为yes
,则会执行克隆操作;如果设置为no
,则只会执行更新操作depth
:指定克隆仓库时的深度,即最近的提交数量bare
:如果设置为yes
,则克隆一个裸仓库
cron
cron模块用于管理定时任务(cron jobs)
name
:指定要管理的定时任务的名称user
:指定定时任务所属的用户job
:指定定时任务的命令state
:指定定时任务的状态,可以是present
(存在)、absent
(不存在)等minute
:指定定时任务执行的分钟数hour
:指定定时任务执行的小时数day
:指定定时任务执行的日期month
:指定定时任务执行的月份weekday
:指定定时任务执行的星期几reboot
:如果设置为yes
,则定时任务将在系统重启后执行special_time
:指定特殊的定时任务执行时间,如@reboot
(系统重启后)、@daily
(每天)、@weekly
(每周)等job_file
:指定定时任务的文件路径backup
:如果设置为yes
,则在修改定时任务时备份原始文件state_file
:指定保存定时任务状态的文件路径
template
template模块用于根据模板文件生成配置文件
src
:指定模板文件的路径dest
:指定生成的配置文件的路径owner
:指定生成的配置文件的所有者group
:指定生成的配置文件的所属组mode
:指定生成的配置文件的权限模式backup
:如果设置为yes
,则在生成配置文件之前备份原始文件validate
:指定一个自定义的命令或脚本来验证生成的配置文件force
:如果设置为yes
,则强制生成配置文件,即使目标文件已经存在become
:如果设置为yes
,则以超级用户身份生成配置文件vars
:指定要传递给模板文件的变量unsafe_writes
:如果设置为yes
,则使用不安全的写入方式生成配置文件
raw
raw
是一种执行原始命令的模块。它允许在目标主机上执行未经过Ansible模块化处理的命令,以实现更灵活的操作。
raw
模块的使用方法是通过在playbook中定义一个任务,并使用raw
关键字指定要执行的命令。以下是一个使用raw
模块的示例:
raw
模块的一些常见参数选项如下:
free_form
:要执行的原始命令。可以是一个字符串,也可以是一个命令列表。executable
:指定要用于执行命令的可执行文件。默认值为/bin/sh。chdir
:指定要在其中执行命令的目录。stdin
:将标准输入传递给命令的内容。
需要注意的是,raw
模块执行的命令在目标主机上执行时,不会像其他Ansible模块那样受到Ansible的幂等性控制。这意味着执行相同的raw
命令可能会导致不同的结果,具体取决于目标主机的状态和环境。
由于raw
模块是直接执行命令,因此在使用时需要谨慎,确保命令的安全性和正确性。
docker_*
docker_*模块用于管理Docker容器和镜像
-
docker_container模块
name
:指定要操作的容器的名称image
:指定要使用的镜像state
:指定容器的状态,可以是started
(启动)、stopped
(停止)、restarted
(重启)、absent
(删除)等restart_policy
:指定容器的重启策略ports
:指定容器的端口映射volumes
:指定容器的卷挂载env
:指定容器的环境变量command
:指定容器的启动命令
-
docker_image模块
name
:指定要操作的镜像的名称source
:指定要使用的镜像源state
:指定镜像的状态,可以是present
(存在)、absent
(不存在)等pull
:如果设置为yes
,则会拉取最新的镜像force
:如果设置为yes
,则会强制拉取镜像,即使已经存在
-
docker_login模块
registry_url
:指定要登录的Docker注册表的URLusername
:指定登录的用户名password
:指定登录的密码email
:指定登录的电子邮件地址