# register, Tags and Blocks — Ansible: Automate Servers with Playbooks

Source: https://www.geekswithgeeks.com/en/ansible/flow-register-tags

> Capture results, run selected tasks with tags and handle errors with blocks.

## Results, selection, recovery

`register:` stores a task's result in a variable (stdout, return code, changed status) for later tasks. **Tags** label tasks so you can run or skip subsets with `--tags` and `--skip-tags`. A **`block:`** groups tasks, and `rescue:` / `always:` sections give try/catch/finally behaviour for recoverable failures. Use `changed_when:` and `failed_when:` to tell Ansible what counts as a change or failure for command-style tasks.

## Registered output, run

Running only the `info` tag shows the registered stdout of a harmless command.

```bash
ansible-playbook -i inventory.ini vars.yml --tags info
```

Output:

```
"out.stdout": "hello"
```

## A block with rescue

If the risky task fails, the rescue task runs and the play continues. (Illustrative; not run here.)

```yaml
- name: Deploy with rollback
  block:
    - name: Switch to new release
      ansible.builtin.command: /opt/app/switch_release.sh {{ release }}
  rescue:
    - name: Roll back to previous release
      ansible.builtin.command: /opt/app/switch_release.sh {{ previous_release }}
  always:
    - name: Record the attempt
      ansible.builtin.debug:
        msg: "deploy attempt finished"
```

**Quiz:** What does `--tags info` do?

- [x] Runs only tasks tagged info
- [ ] Deletes tasks tagged info
- [ ] Skips tasks tagged info
- [ ] Encrypts tags

*Answer:* Runs only tasks tagged info. Tag selection narrows a run to chosen tasks.
