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 

模块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

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

翻译自: https://opensource.com/article/19/9/must-know-ansible-modules

ansible 模块

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐