Ansible-playbook

root
233
文章
0
评论
2020年7月21日01:50:29 评论 3277字阅读10分55秒

Ansible-playbook

Playbooks是Ansible的配置,部署和编排语言。他们可以描述您希望在远程机器做哪些事或者描述IT流程中一系列步骤。使用易读的YAML格式组织Playbook文件。

如果Ansible模块是您工作中的工具,那么Playbook就是您的使用说明书,而您的主机资产文件就是您的原材料。

与adhoc任务执行模式相比,Playbooks使用ansible是一种完全不同的方式,并且功能特别强大。

---
- hosts: webservers
  vars:
    http_port: 80
    server_name: www.ctnrs.com
  remote_user: root
  gather_facts: false
  tasks:
  - name: 安装nginx最新版
    yum: pkg=nginx state=latest
  - name: 写入nginx配置文件
    template: src=/srv/httpd.j2 dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
  - name: 确保nginx正在运行
    service: name=httpd state=started
  handlers:
    - name: restart nginx
      service: name=nginx state=reloaded

1、主机和用户

- hosts: webservers
  remote_user: lizhenliang
  become: yes
  become_user: root

become: yes 提权

become_user: 提权的用户是谁

命令行执行:

ansible-playbook nginx.yaml -u lizhenliang -k -b -K

-k 普通用户输入密码

-b 提权

-K 提权用户输入密码

2、定义变量

变量是应用于多个主机的便捷方式; 实际在主机执行之前,变量会对每个主机添加,然后在执行中引用。

  • 命令行传递

-e VAR=VALUE

  • 主机变量与组变量

在Inventory,主机清单中定义变量。

[webservers]
192.168.1.100 
192.168.2.100 

[webservers:vars]
ansible_ssh_user=root 
hostname=web1
  • 单文件存储

如果变量过多就可以使用一个文件进行定义变量

Ansible中的首选做法是不将变量存储在Inventory中。

除了将变量直接存储在Inventory文件之外,主机和组变量还可以存储在相对于Inventory文件的单个文件中。

组变量:【要自己创建】

group_vars 存放的是组变量目录 

group_vars/all.yml 表示所有主机有效,等同于[all:vars]

grous_vars/etcd.yml 表示etcd组主机有效,等同于[etcd:vars]

# vi /etc/ansible/group_vars/all.yml
work_dir: /data
# vi /etc/ansible/host_vars/webservers.yml
nginx_port: 80
  • 在Playbook中定义
- hosts: webservers
  vars:
    http_port: 80
    server_name: www.hebbao.com

Register变量

-  name:
    shell:  |
        netstat -lntup | grep 80
    register: result  #注册变量,把结果注册到result变量里
-  debug:   #把result变量内容打印出来
       var: result

3、任务列表

每个play包含一系列任务。这些任务按照顺序执行,在play中,所有主机都会执行相同的任务指令。play目的是将选择的主机映射到任务。

  tasks:
  - name: 安装nginx最新版
    yum: pkg=nginx state=latest

4、语法检查与调试

语法检查:ansible-playbook --check /path/to/playbook.yaml

测试运行,不实际操作:ansible-playbook -C /path/to/playbook.yaml

debug模块在执行期间打印语句,对于调试变量或表达式,而不必停止play。与'when:'指令一起调试更佳。

  - debug: msg={{group_names}}
  - name: 主机名
    debug:
      msg: "{{inventory_hostname}}"

5、任务控制【标签功能】

如果你有一个大的剧本,那么能够在不运行整个剧本的情况下运行特定部分可能会很有用。

  tasks:
  - name: 安装nginx最新版
    yum: pkg=nginx state=latest
    tags: install
  - name: 写入nginx配置文件
    template: src=/srv/httpd.j2 dest=/etc/nginx/nginx.conf
    tags: config

使用:

ansible-playbook example.yml --tags "install"
ansible-playbook example.yml --tags "install,config"
ansible-playbook example.yml --skip-tags "install"

6、流程控制

条件判断:

tasks:
- name: 只在192.168.1.100运行任务
  debug: msg="{{ansible_default_ipv4.address}}"
  when: ansible_default_ipv4.address == '192.168.1.100'

循环执行:

tasks:
- name: 批量创建用户
  user: name={{ item }} state=present groups=wheel
  with_items:
     - testuser1
     - testuser2
- name: 解压
  copy: src={{ item }} dest=/tmp
  with_fileglob:
     - "*.txt"
     - "*.html"

常用循环语句:

语句描述
with_items标准循环
with_fileglob遍历目录文件
with_dict遍历字典

7、模板

 vars:
    domain: "www.ctnrs.com"
 tasks:
  - name: 写入nginx配置文件
    template: src=/srv/server.j2 dest=/etc/nginx/conf.d/server.conf
# server.j2
{% set domain_name = domain %}   #set是设置一个变量,domain变量要在ansible-playbook中定义
server {
   listen 80;
   server_name {{ domain_name }};
   location / {
        root /usr/share/html;
   }
}

在jinja里使用ansible变量直接 {{ }}引用。使用ansible变量赋值jinja变量不用{{ }}引

也可在jinja里使用ansible变量直接 {{ }}引用。使用ansible变量赋值jinja变量不用{{ }}引以不在ansible-playbook中指定

# server.j2
{% set domain_name = 123 %}
server {
   listen 80;
   server_name {{ domain_name }};
   location / {
        root /usr/share/html;
   }
}

定义变量

{% set local_ip = inventory_hostname %}

条件和循环

{% set list=['one', 'two', 'three'] %}
{% for i in list %}
	{% if i == 'two' %}
		-> two
	{% elif loop.index == 3 %}
		-> 3
	{% else %}
		{{i}}
	{% endif %}
{% endfor %}

例如:生成连接etcd字符串

{% for host in groups['etcd'] %}
	https://{{ hostvars[host].inventory_hostname }}:2379
	{% if not loop.last %},{% endif %}
{% endfor %}

 

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2020年7月21日01:50:29
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Ansiable-ploybook LVM Ansible

Ansiable-ploybook LVM

Ansiable-ploybook LVM Ansible 配置文件修改 位置在:vim /etc/ansible/ansible.cfg host_key_checking = False # 首次...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: