ansible register

register 说明

在 Ansible 中,register 是一个关键字,用于捕获任务执行结果以及任务执行过程中产生的输出和值。使用 register 关键字可以将任务的执行结果存储到一个变量中,您可以在 playbook 后续的任务中使用这个变量。

register 返回值类型

使用register关键字时,Ansible会将任务的输出存储在指定的变量中。这个变量是一个字典(dictionary),其中包括各种信息:

stdout:任务的标准输出
stderr:任务的标准错误输出
rc:    任务的退出码,通常0表示成功,非0表示失败
failed:一个布尔值,指示任务是否执行失败
changed:一个布尔值,指示是否更改了目标系统的状态
ansible_facts:包含由Ansible模块生成的Tasible模块的事实信息
stdout_lines: 存储了任务的标准输出,并以行为单位组成的列表形式提供访问。
"bash_users": {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "cmd": "awk -F:  '$7 == \"/bin/bash\"  {print $1}' /etc/passwd\n", 
        "delta": "0:00:00.004821", 
        "end": "2024-04-25 01:49:26.473014", 
        "failed": false, 
        "rc": 0, 
        "start": "2024-04-25 01:49:26.468193", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "root\nyunwei", 
        "stdout_lines": [
            "root", 
            "yunwei"
        ]
    }

register 示例

hosts

[centos]
192.168.174.131 ansible_ssh_port=22

Ansible Vault 文件

创建 Ansible Vault 文件

# ansible-vault create passwords.yml
New Vault password:                    # 12345678
Confirm New Vault password:

编辑 Ansible Vault 文件

# ansible-vault edit passwords.yml
Vault password:

passwords.yml

hosts_passwords:
  192.168.174.131:
    yunwei_password: yunwei_131

示例 一

register_test.yaml

- hosts: 192.168.174.131
  remote_user: yunwei
  become: yes
  become_method: sudo
  gather_facts: no
  vars_files:
    - passwords.yml
  vars:
    ansible_ssh_pass: "{{ hosts_passwords[inventory_hostname].yunwei_password }}"
    ansible_become_pass: "{{ hosts_passwords[inventory_hostname].yunwei_password }}"

  tasks:
    - name: Get users with /bin/bash shell excluding specified users
      ansible.builtin.shell:
        cmd: |
          awk -F:  '$7 == "/bin/bash"  {print $1}' /etc/passwd
      register: bash_users
      changed_when: false

    - name: Display  users
      ansible.builtin.debug:
        var: bash_users
        # msg: "{{ bash_users }}"

测试 playbook

# ansible-playbook -i hosts register_test.yaml --ask-vault-pass
Vault password: 

PLAY [192.168.174.131] ********************************************************************************************************************************************************

TASK [Get users with /bin/bash shell excluding specified users] ***************************************************************************************************************
ok: [192.168.174.131]

TASK [Display  users] *********************************************************************************************************************************************************
ok: [192.168.174.131] => {
    "bash_users": {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "cmd": "awk -F:  '$7 == \"/bin/bash\"  {print $1}' /etc/passwd\n", 
        "delta": "0:00:00.004821", 
        "end": "2024-04-25 01:49:26.473014", 
        "failed": false, 
        "rc": 0, 
        "start": "2024-04-25 01:49:26.468193", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "root\nyunwei", 
        "stdout_lines": [
            "root", 
            "yunwei"
        ]
    }
}

PLAY RECAP ********************************************************************************************************************************************************************
192.168.174.131            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

示例 二

register_test-2.yaml

- hosts: 192.168.174.131
  remote_user: yunwei
  become: yes
  become_method: sudo
  gather_facts: no
  vars_files:
    - passwords.yml
  vars:
    ansible_ssh_pass: "{{ hosts_passwords[inventory_hostname].yunwei_password }}"
    ansible_become_pass: "{{ hosts_passwords[inventory_hostname].yunwei_password }}"

  tasks:
    - name: Get users with /bin/bash shell excluding specified users
      ansible.builtin.shell:
        cmd: |
          awk -F:  '$7 == "/bin/bash"  {print $1}' /etc/passwd
      register: bash_users
      changed_when: false

    - name: Check  user
      ansible.builtin.shell: 
        cmd: |
          echo "{{ item }}"
      loop: "{{ bash_users.stdout_lines }}"
      register: list_users

    - name: Display  users
      ansible.builtin.debug:
        var: list_users

测试 playbook

# ansible-playbook -i hosts register_test-2.yaml --ask-vault-pass
Vault password: 

PLAY [192.168.174.131] ********************************************************************************************************************************************************

TASK [Get users with /bin/bash shell excluding specified users] ***************************************************************************************************************
ok: [192.168.174.131]

TASK [Check  user] ************************************************************************************************************************************************************
changed: [192.168.174.131] => (item=root)
changed: [192.168.174.131] => (item=yunwei)

TASK [Display  users] *********************************************************************************************************************************************************
ok: [192.168.174.131] => {
    "list_users": {
        "changed": true, 
        "msg": "All items completed", 
        "results": [
            {
                "ansible_loop_var": "item", 
                "changed": true, 
                "cmd": "echo \"root\"\n", 
                "delta": "0:00:00.003384", 
                "end": "2024-04-25 02:29:06.758282", 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "_raw_params": "echo \"root\"\n", 
                        "_uses_shell": true, 
                        "argv": null, 
                        "chdir": null, 
                        "creates": null, 
                        "executable": null, 
                        "removes": null, 
                        "stdin": null, 
                        "stdin_add_newline": true, 
                        "strip_empty_ends": true, 
                        "warn": true
                    }
                }, 
                "item": "root", 
                "rc": 0, 
                "start": "2024-04-25 02:29:06.754898", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "root", 
                "stdout_lines": [
                    "root"
                ]
            }, 
            {
                "ansible_loop_var": "item", 
                "changed": true, 
                "cmd": "echo \"yunwei\"\n", 
                "delta": "0:00:00.003156", 
                "end": "2024-04-25 02:29:07.081986", 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "_raw_params": "echo \"yunwei\"\n", 
                        "_uses_shell": true, 
                        "argv": null, 
                        "chdir": null, 
                        "creates": null, 
                        "executable": null, 
                        "removes": null, 
                        "stdin": null, 
                        "stdin_add_newline": true, 
                        "strip_empty_ends": true, 
                        "warn": true
                    }
                }, 
                "item": "yunwei", 
                "rc": 0, 
                "start": "2024-04-25 02:29:07.078830", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "yunwei", 
                "stdout_lines": [
                    "yunwei"
                ]
            }
        ]
    }
}

PLAY RECAP ********************************************************************************************************************************************************************
192.168.174.131            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

示例 三

register_test-3.yaml

- hosts: 192.168.174.131
  remote_user: yunwei
  become: yes
  become_method: sudo
  gather_facts: no
  vars_files:
    - passwords.yml
  vars:
    ansible_ssh_pass: "{{ hosts_passwords[inventory_hostname].yunwei_password }}"
    ansible_become_pass: "{{ hosts_passwords[inventory_hostname].yunwei_password }}"

  tasks:
    - name: Get users with /bin/bash shell excluding specified users
      ansible.builtin.shell:
        cmd: |
          awk -F:  '$7 == "/bin/bash"  {print $1}' /etc/passwd
      register: bash_users
      changed_when: false

    - name: Check  user
      ansible.builtin.shell: 
        cmd: |
          echo "{{ item }}"
      loop: "{{ bash_users.stdout_lines }}"
      register: list_users

    - name: Display  users
      ansible.builtin.debug:
        msg: "{{ list_users }}"

    - name: print user
      ansible.builtin.debug:
        msg: "user info: { list_users.results | map(attribute='item') | list }}"

测试 playbook

# ansible-playbook -i hosts register_test-3.yaml --ask-vault-pass
Vault password: 

PLAY [192.168.174.131] ********************************************************************************************************************************************************

TASK [Get users with /bin/bash shell excluding specified users] ***************************************************************************************************************
ok: [192.168.174.131]

TASK [Check  user] ************************************************************************************************************************************************************
changed: [192.168.174.131] => (item=root)
changed: [192.168.174.131] => (item=yunwei)

TASK [Display  users] *********************************************************************************************************************************************************
ok: [192.168.174.131] => {
    "msg": {
        "changed": true, 
        "msg": "All items completed", 
        "results": [
            {
                "ansible_loop_var": "item", 
                "changed": true, 
                "cmd": "echo \"root\"\n", 
                "delta": "0:00:00.003570", 
                "end": "2024-04-25 02:40:58.620563", 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "_raw_params": "echo \"root\"\n", 
                        "_uses_shell": true, 
                        "argv": null, 
                        "chdir": null, 
                        "creates": null, 
                        "executable": null, 
                        "removes": null, 
                        "stdin": null, 
                        "stdin_add_newline": true, 
                        "strip_empty_ends": true, 
                        "warn": true
                    }
                }, 
                "item": "root", 
                "rc": 0, 
                "start": "2024-04-25 02:40:58.616993", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "root", 
                "stdout_lines": [
                    "root"
                ]
            }, 
            {
                "ansible_loop_var": "item", 
                "changed": true, 
                "cmd": "echo \"yunwei\"\n", 
                "delta": "0:00:00.004940", 
                "end": "2024-04-25 02:40:58.974209", 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "_raw_params": "echo \"yunwei\"\n", 
                        "_uses_shell": true, 
                        "argv": null, 
                        "chdir": null, 
                        "creates": null, 
                        "executable": null, 
                        "removes": null, 
                        "stdin": null, 
                        "stdin_add_newline": true, 
                        "strip_empty_ends": true, 
                        "warn": true
                    }
                }, 
                "item": "yunwei", 
                "rc": 0, 
                "start": "2024-04-25 02:40:58.969269", 
                "stderr": "", 
                "stderr_lines": [], 
                "stdout": "yunwei", 
                "stdout_lines": [
                    "yunwei"
                ]
            }
        ]
    }
}

TASK [print user] *************************************************************************************************************************************************************
ok: [192.168.174.131] => {
    "msg": [
        "root", 
        "yunwei"
    ]
}

PLAY RECAP ********************************************************************************************************************************************************************
192.168.174.131            : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  
posted @ 2024-04-27 09:58  小吉猫  阅读(436)  评论(0编辑  收藏  举报