# 1. Playbooks

* It is the core of ansible
* It contain instructions to configure the nodes
* They are written in YAML, a language used to describe data

***

### Structure

#### 1. Name

We have the name of play like play1 and play 2

#### 2. Host

It is the target of the play

#### 3. Tasks

Each play has a list of tasks which contain following sections

**name**

Each element in the list of tasks is given a name like "install apache" and "start apache"

**set of instructions**

The name is followed by instructions to execute the task

***

### Other Params

#### become

used to escalate privleges to specific user to execute tasks. become\_user parameter is required to specify the user. `remote_user` is another way to escalate privleges

#### vars

used to define variables to be used later on in playbook

#### notfiy

used to refer handlers

#### gather\_facts

used to gather files or keys which can be used in different playbook

***

### Sample Playbook 1

```yaml
- name: install apache, php & mysql
  hosts: test-servers
  become: true
  become_user: root
  gather_facts: true
  tasks:
  - name: "Install Apache2"
    #present is used since we are installing this package for first time
    package: name=apache2 state=present

  - name: "Install PHP Cli"
    package: name=php-cli state=present

  - name: "Install PHP Mysql"
    package: name=php-mysql state=present
```

***

### Sample Playbook 2

```yaml
- hosts: all
  remote_user: root

  tasks:
    - name: "Install PIP"
      apt: name=python-pip state=present

    - name: "Install Python MySQL module"
      pip: name=MySQL-python

    - name: "Create db user noman"
      mysql_user: user=noman password=aziz priv=*.*:ALL state=present

    - name: "Create db ansible"
      mysql_db: db=ansible state=present

    - name: "Create table reg"
      command: mysql -u noman -p aziz -e 'CREATE TABLE reg (name varchar(30), email varchar(30));' ansible

```

***

### Sample Playbook 3

```yaml
- name: copy
  hosts: test-servers
  become: true
  become_true: root
  gather_facts: true
  tasks:
    - name: "copy file"
      copy: src=/home/noman/index.html dest=/var/www/html/index.html
```

***

### Sample Playbook 4

In Ansible, handlers are typically used to start, reload, restart, and stop services

```yaml
- hosts: webservers
  tasks:
    - name: install apache2
	  apt: name=apache2 update_cache=yes latest=yes

	  notify:
	    - restart apache2

  handlers:
    - name: restart apache2
	  service: name=apache2 state=restarted
```

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://notes.nomanaziz.me/devops/infrastructure-as-a-code-iac/ansible/1.-playbooks.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
