欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ansible-playbook基本使用

时间:2023-07-17

Playbook:YAML格式 是一个可读性高,用来表达数据序列的格式。
基本数据结构:标量 数组 关联数组

Playbook的核心元素:
Hosts:主机
Tasks:任务列表
Variables
Templates:包含了模板语法的文本文件
Handlers:由特定条件触发的任务

playbook的基础组件:
Hosts:运行指定任务的目标主机
remote_user:在远程主机上执行任务的用户
sudo_user:
tasks:任务列表
        模块,模块参数
        格式:
        1、action:module arguments
        2、module:arguments
注意:shell和command模块后面直接跟命令,而非key=value类的参数列表

1、某任务的状态在运行后为changed时,可通过"notify"通知给相应的handlers
2、任务可以通过"tags"打标签,而后可在ansible-playbook命令上使用-t指定进行调用

运行playbook的方式:
1、测试:
        ansible-playbook --syntax-check
        只检测可能会发生的改变,但不真正执行操作
        ansible-playbook --list-hosts
        列出运行任务的主机
2、运行

编写一个脚本:frist.yaml
- hosts: all
  remote_user: root
  tasks:
  - name: install nginx
    yum: name=nginx state=installed
  - name: start nginx
    service: name=nginx state=started enabled=true

ansible-playbook --syntax-check first.yaml # 检查这个脚本的语法
ansible-playbook --list-hosts first.yaml # 列出受控主机
ansible-playbook --list-tasks first.yaml # 列出脚本中的任务
ansible-playbook -C first.yaml # 干跑
ansible-playbook  first.yaml # 执行playbook
ansible ipaddr(某台受控主机) -m fetch  -a "src=/etc/nginx/nginx.conf dest=./" # 把某台受控主机上文件/etc/nginx/nginx.conf复制到运行ansible的当前主机的当前目录下


handlers:
任务:在特定条件下触发
接收到其它任务的通知时被触发。
编辑second.yaml
- hosts: all
  remote_user: root
  tasks:
  - name: install nginx
    yum: name=nginx state=installed
  - name: copy config file
    copy: src=/root/playbooks/nginx.conf dest=/etc/nginx/nginx.conf owner=nginx
    notify: restart ngnix
    tags: configfile
  - name: start nginx
    service: name=nginx state=started
  handlers:
  - name: restart nginx
    service: name=nginx state=restarted

只运行指定标签的任务: ansible-playbook -t tags second.yaml

# 收集指定的被管控主机的信息
ansible  ipaddress -m setup
variables:
1、facts:可直接调用,注意:可使用setup模块直接获取目标主机的facters。
2、ansible-playbook命令的命令行中的自定义变量
        -e VARS, --extra-vars=VARS
3、通过roles创建变量
4、Host Inventory:
        a、向不同的主机传递不同的变量
                IP/HOSTNAME variable=value var2=value2
        b、向组中的主机传递相同的变量
                [groupname:vars]
                variable=value
        注意:用于定义ansible远程连接目标主机时使用的参数,而非传递给playbook的变量
        ansible_ssh_host
        ansible_ssh_port
        ansible_ssh_user
        ansible_ssh_pass
        ansible_sudo_pass

编辑以下third.yaml:
- hosts: ipaddress
  remote_user: root
  tasks:
  - name: copy file
    copy: content={{ ansible_env }} dest=/tmp/ansible.env

执行:
ansible-playbook --syntax-check third.yaml  # 进行语法检查
ansible-playbook third.yaml # 收集ansible_env块的信息,并保存到受控远程主机的/tmp/ansible.env中

编译以下fourth.yaml
- hosts: all
  remote_user: root
  tasks:
  - name: install package {{ pkgname }}
    yum: name={{ pkgname }} state=installed
在命令行中:ansible-playbook -e pkgname=redis fourth.yaml #在受控主机上安装redis

# 列出在websrvs组中的主机
ansible websrvs --list-hosts

# 在/etc/ansible/hosts定义:
[websrvs]
ipaddr ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_password=xxxx

创建一个创建指定用户名和密码的yaml文件:
[root@bjAli playbooks]# cat createuser.yaml
- hosts: all
  remote_user: root
  tasks:
  - name: add user
    user: name={{ username }} system=no state=present
  - name: set password
    shell: echo {{ username }} | passwd --stdin {{ username }}

执行:ansible-playbook -e username=bl02u2 createuser.yaml # 将在受控主机上创建一个用户名为bl02u2密码为bl02u2的用户

在/etc/ansible/hosts添加以下三行:
[websrvs]
ipaddress1  ansible_ssh_user=bl02u2 ansible_ssh_pass=bl02u2
ipaddress2  ansible_ssh_user=bl02u2 ansible_ssh_pass=bl02u2
ansible websrvs -m ping # 对websrvs组中受控机执行ping模块
ansible websrvs -m command -a "whoami" # 对websrvs组中受控机执行命令whoami
 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。