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>或参考官方文档来了解其他有用的模块。