ansible 模块
Ansible是一个开源IT配置管理和自动化平台。 它使用人类可读的YAML模板,因此用户可以对重复性任务进行编程以自动执行,而无需学习高级编程语言。
Ansible是无代理的,这意味着它管理的节点不需要在其上安装任何软件。 这样可以消除潜在的安全漏洞,并使整体管理更加顺畅。
Ansible 模块是可以在Ansible剧本中使用的独立脚本。 剧本由戏剧组成,而戏剧由任务组成。 如果您是Ansible的新手,这些概念可能会让人感到困惑,但是随着您开始编写和使用更多的剧本,它们将变得越来越熟悉。
Ansible具有三个主要文件,您需要考虑:
- 主机/清单文件:包含需要管理的节点的条目
- Ansible.cfg文件:默认情况下位于/etc/ansible/ansible.cfg ,它具有必要的特权升级选项和清单文件的位置
- 主文件:具有包含可在清单或主机文件中列出的主机上执行各种任务的模块的剧本
模块1:包管理
有一个适用于大多数流行软件包管理器的模块,例如DNF和APT,使您可以在系统上安装任何软件包。 功能完全取决于软件包管理器,但是通常这些模块可以安装,升级,降级,删除和列出软件包。 相关模块的名称很容易猜到。 例如,DNF模块是dnf_module ,旧的YUM模块(要求与Python 2兼容)是yum_module ,而APT模块是apt_module ,Slackpkg模块是slackpkg_module ,依此类推。
范例1:
- name
: install the latest version of Apache and MariaDB
dnf :
name
:
- httpd
- mariadb-server
state
: latest
这将安装Apache Web服务器和MariaDB SQL数据库。
范例2:
- name
: Install a list of packages
yum :
name
:
- nginx
- postgresql
- postgresql-server
state
: present
这将安装软件包列表,并帮助下载多个软件包。
模块2:服务
安装软件包后,需要一个模块来启动它。 该服务模块使您可以启动,停止和重新加载已安装的软件包。 这非常方便。
范例1:
- name
: Start service foo, based on running process /usr/bin/foo
service :
name
: foo
pattern
: /usr/bin/foo
state
: started
这将启动服务foo 。
范例2:
- name
: Restart network service for interface eth0
service :
name
: network
state
: restarted
args
: eth0
这将重新启动接口eth0的网络服务。
单元3:复制
复制模块将文件从本地或远程计算机复制到远程计算机上的某个位置。
范例1:
- name
: Copy a new
"ntp.conf file into place, backing up the original if it differs from the copied version
copy:
src: /mine/ntp.conf
dest: /etc/ntp.conf
owner: root
group: root
mode: '0644'
backup: yes
范例2:
- name
: Copy file with owner and permission, using symbolic representation
copy :
src
: /srv/myfiles/foo.conf
dest
: /etc/foo.conf
owner
: foo
group
: foo
mode
: u=rw,g=r,o=r
模块4:调试
调试模块在执行过程中打印语句,对于调试变量或表达式而无需停止剧本很有用。
范例1:
- name
: Display
all variables/facts known for a host
debug :
var
: hostvars
[ inventory_hostname
]
verbosity
: 4
这将显示清单文件中定义的主机的所有变量信息。
范例2:
- name
: Write some content in a file /tmp/foo.txt
copy :
dest
: /tmp/foo.txt
content
: |
Good Morning!
Awesome sunshine today.
register
: display_file_content
- name
: Debug display_file_content
debug :
var
: display_file_content
verbosity
: 2
这将注册复制模块输出的内容,并且仅在将详细程度指定为2时才显示它。例如:
ansible-playbook demo.yaml -vv
ansible-playbook demo.yaml -vv
模块5:文件
文件模块管理文件及其属性。
- 它设置文件,符号链接或目录的属性。
- 它还会删除文件,符号链接或目录。
范例1:
- name
: Change file ownership, group and permissions
file :
path
: /etc/foo.conf
owner
: foo
group
: foo
mode
: '0644'
这将创建一个名为foo.conf的文件,并将权限设置为0644 。
范例2:
- name
: Create a directory if it does not exist
file :
path
: /etc/some_directory
state
: directory
mode
: '0755'
这将创建一个名为some_directory的目录,并将权限设置为0755 。
模组6:Lineinfile
lineinfile模块管理文本文件中的行。
- 它确保特定行位于文件中,或使用向后引用的正则表达式替换现有行。
- 当您只想更改文件中的一行时,它主要有用。
范例1:
- name
: Ensure SELinux is set to enforcing mode
lineinfile :
path
: /etc/selinux/config
regexp
: '^SELINUX='
line
: SELINUX=enforcing
这将设置SELINUX = enforcing的值。
范例2:
- name
: Add a line to a file if the file does not exist, without passing regexp
lineinfile :
path
: /etc/resolv.conf
line
: 192.168.1.99 foo.lab.net foo
create
:
yes
这将在resolv.conf文件中添加IP和主机名的条目。
单元7:Git
git模块管理存储库的git checkout,以部署文件或软件。
范例1:
# Example Create git archive from repo
- git :
repo
: https://github.com/ansible/ansible-examples.git
dest
: /src/ansible-examples
archive
: /tmp/ansible-examples.zip
范例2:
- git :
repo
: https://github.com/ansible/ansible-examples.git
dest
: /src/ansible-examples
separate_git_dir
: /src/ansible-examples.git
这将用一个单独的Git目录克隆一个仓库。
模组8:Cli_command
com/ansible/latest/modules/cli_command_module.html">cli_command模块 (最早在Ansible 2.7中可用)提供了一种平台无关的方式,可通过network_cli连接插件将基于文本的配置推送到网络设备。
范例1:
- name
: commit with comment
cli_config :
config
: set system host-name foo
commit_comment
: this is a test
这将设置交换机的主机名,并以提交消息退出。
范例2:
- name
: configurable backup path
cli_config :
config
:
"{{ lookup('template', 'basic/config.j2') }}"
backup
:
yes
backup_options :
filename
: backup.cfg
dir_path
: /home/user
这会将配置备份到其他目标文件。
单元9:封存
存档模块创建一个或多个文件的压缩存档。 默认情况下,假定目标上存在压缩源。
范例1:
- name
: Compress directory /path/to/foo/ into /path/to/foo.tgz
archive :
path
: /path/to/foo
dest
: /path/to/foo.tgz
范例2:
- name
: Create a bz2 archive of multiple files, rooted at /path
archive :
path
:
- /path/to/foo
- /path/wong/foo
dest
: /path/file.tar.bz2
format
: bz2
模块10:命令
命令模块是最基本但最有用的模块之一,它使用命令名称,后跟一个用空格分隔的参数列表。
范例1:
- name
: return motd to registered var
command
: cat /etc/motd
register
: mymotd
范例2:
- name
: Change the working directory to somedir/ and run the command as db_owner if /path/to/database does not exist.
command
: /usr/bin/make_database.sh db_user db_name
become
:
yes
become_user
: db_owner
args :
chdir
: somedir/
creates
: /path/to/database
结论
Ansible中有大量可用的模块,但是这十个模块是您可以用于自动化工作的最基本,最强大的模块。 随着需求的变化,您可以通过在命令行上输入ansible-doc <module-name>或参考官方文档来了解其他有用的模块。