Ansible - Modules

目录


常用模块总览

  • 调试和测试类的模块
    • ping 测试远程主机连通性
    • debug 调试模块,打印一些简单的消息
  • 文件类的模块
    • copy 从本地复制文件到远程节点
    • template 从本地复制文件到远程节点,并进行变量的替换。
    • file 设置文件属性
  • Linux 上的常用操作
    • user: 管理用户账户
    • yum: 安装软件包
    • service: 管理服务
    • firewalld 管理防火墙
  • 执行 shell 命令
    • shell: 在节点上执行 shell 命令,支持 $HOME、"<"、">"、"|"、";" 和 "&"
    • command: 在远程节点上面执行命令,不支持 $HOME、"<"、">"、"|"、";" 和 "&"

command

---
- hosts: bj-web

  tasks:
    - name: return motd to registered var
      command: '/bin/date'
      register: test_var

    - name: print test_var
      debug:
        var: test_var

copy

---
- hosts: bj-web

  tasks:
    - name: test copy file
      copy:
        src: /tmp/leslie
        dest: /home/leslie/qikang
        owner: leslie
        group: leslie
        mode: 0700

如果只是复制文件 copy 就可以了,如果需要修改需要文件的内容,需要使用 template 模块。


debug

debug 模块。

打印动态注入的环境变量。

- name: Print debug infomation eg
  hosts: bj-db

  tasks:
    - name: Command run line
      shell: uptime
      register: result

    - name: Show debug info
      debug: var=result.stdout verbosity=0

file

参考文档: https://docs.ansible.com/ansible/2.5/modules/file_module.html#file-module

设置远程主机上的文件、软连接和文件夹权限,也可以创建和删除它们。

创建权限和设置软连接

---
- hosts: bj-web

  tasks:
    - name: test file module
      file:
        src: /home/leslie/qikang
        dest: /home/leslie/qikang-link
        owner: leslie
        group: leslie
        mode: 0607
        state: link

使用变量

---
- hosts: bj-web

  vars:
    test_var: "__leslie__"

  tasks:
    - name: test file module
      file:
        src: /home/leslie/qikang
        dest: /home/leslie/qika{{ test_var }}nk
        owner: leslie
        group: leslie
        mode: 0607
        state: link

创建文件和文件夹

---
- hosts: bj-web

  vars:
    test_var: "__leslie__"

  tasks:
    - name: test file module
      file:
        src: /home/leslie/qikang
        dest: /home/leslie/qika{{ test_var }}nk
        owner: leslie
        group: leslie
        mode: 0607
        state: link

    - name: create new file
      file:
        path: /tmp/foo.conf
        state: touch
        mode: 'u=rwx,g=r,o=r'

    - name: create new directory
      file:
        path: /tmp/foo_dir
        state: directory
        mode: 0755

service

---
- hosts: sg-entry

  vars:
    http_port: 8000
    max_clients: 3
  remote_user: leslie

  tasks:
    - name: ensure httpd is started.
      service: httpd
      state: restarted

shell

---
- hosts: sg-entry
  remote_user: leslie

  tasks:
    - name: test shell command.
      shell: pwd > /tmp/leslie && id >> /tmp/leslie

template

---
- hosts: bj-web

  vars:
    http_name: 'test_name'

  tasks:
    - name: test template module
      template:
        src: /tmp/leslie
        dest: /home/leslie/qikang
        owner: leslie
        group: leslie
        mode: 0700
        backup: yes
      validate: 'cat %s'

在 /tmp/leslie 文件中直接使用 {{ ansible_default_ipv4.address }} {{ http_name }} {{ ansible_hostname }} 变量。


user

---
- hosts: bj-web

  tasks:
    - name: test user modules
      user:
        name: johnd
        comment: 'John Doe'
        append: yes
        groups: johnd,ec2-user
        uid: 10400

    - user:
        name: jsmith
        generate_ssh_key: yes
        ssh_key_bits: 2048
        ssh_key_file: .ssh/jsmith_key

yum

---
- hosts: sg-entry

  vars:
    http_port: 8000
    max_clients: 3
  remote_user: leslie

  tasks:
    - name: 'install @Development tools'
      yum:
        name: "@Development tools"
      state: persent

async