Ansible自动化运维工具使用详解(3)

2) 每一行是一个键值数据 k ey :v alue ,冒号隔开。若想在一行标识需要用 { } , 分隔格式

3) 列表用 - 标识

2. inventory参数 :主机库 ssh 参数设置

ansible基于ssh连接inventory中指定的远程主机时,将以此处的参数指定的属性进行;

ansible_ssh_port

 

指定 ssh 端口

 

ansible_ssh_user

 

指定 ssh 用户

 

ansible_ssh_pass

 

指定 ssh 用户登录是认证密码,明文密码不安全

 

ansible_sudo_pass

 

指明 sudo 时候的密码

 

实例:

[websrvs]

192.168.0.101  ansible_ssh_port=22  ansible_ssh_user=root  ansible_ssh_pass=xuding

192.168.0.102

注意:在 /etc/ansible/hosts 中直接定义连接时候的密码不安全,一般建议基于 ssh 的密钥认证方式实现

3.playbooks

(1) 核心元素

Tasks 任务、 Variables 变量、 Templates 模板、 Handlers 处理器、 Roles 角色

(2)playbooks 定义任务:

- name: task description     注释 描述信息

module_name: module_args   声明模块:定义 ansible 模块参数

Ansible自动化运维工具使用详解

(3) ansible-playbook 执行 命令:

ansible-playbook  <filename.yml> ...  [options]

Ansible自动化运维工具使用详解

4.playbook--- 变量

(1)变量命名:字母、数字和下划线组成,仅能以字母开头;

(2)变量种类:

1) facts:由远程主机发回的主机 特有的 属性信息,这些信息被保存在ansible变量中;无须 声明 ,可直接调用;

2)自定义变量:

通过命令行传递:ansible-playbook  test.yml  --extra-vars "host=www user=test"

通过roles传递

3) 主机变量:定义在inventory中的主机之后的变量; 直接传递给单个主机的变量

实例:

[root@localhost ~]# vim /etc/ansible/hosts 中直接定义在主机之后

[web]

192.168.0.101    host=mail

192.168.0.102

192.168.0.103

4) 组变量:定义在inventory中的组上的变量 ( 例如在默认的文件 /etc/ansible/hosts 上编辑 )

[group_name:vars]

var1=value

var2=value

注意:组名要事先存在,实例如下:

[websrvs]

192.168.0.101

192.168.0.102

[websrvs:vars]

host=mail

变量使用示例:

[root@localhost~]# vim useradd.yml

-    hosts: websrvs

remote_user: root

vars:

username: testuser

password: xuding

tasks:

-name: add user

user: name={{ username }} state=present

-name: set password

shell: /bin/echo {{ password }} |/usr/bin/passwd --stdin {{ username }}

注释:

1) {{ }} 调用变量

2) #ansible-playbook /PATH/TO/SOME_YAML_FILE  { -eVARS|--extra-vars=VARS}     变量的重新赋值调用方法

[root@localhost ~]# ansible-playbookuseradd.yml --extra-vars "username=Ubuntu"

5.playbook---  tasks

(1) 条件测试:

在某task后面添加when子句即可实现条件测试功能;when语句支持Jinja2语法;

    实例 当时 RedHat 系列系统时候调用 yum 安装

tasks:

-name: install web server package

yum: name=httpd state=present

when: ansible_os_family == "RedHat"

(2) 迭代: item

在task中调用内置的item变量;在某task后面使用with_items语句来定义元素列表;

tasks:

-name: add four users

user: name={{ item }}  state=present

with_items:

-testuser1

-testuser2

-testuser3

-testuser4

注意:迭代中,列表中的每个元素可以为字典格式;

实例:

-name: add two users

user: name={{ item.name }}  state=present groups={{ item.groups }}

with_items:

- { name: 'testuser5', groups: 'wheel' }

- { name: 'testuser6', groups: 'root' }

6.playbook--- handlers: 处理器;触发器

只有其关注的条件满足时,才会被触发执行 的任务;

实例:配置文件发生改变触发重启服务

-hosts: websrvs

remote_user: root

tasks:

-name: install httpd

yum:name=httpd state=present

-name: install config file

copy: src=https://www.linuxidc.com/root/httpd.confdest=/etc/httpd/conf/httpd.conf

notify: restart httpd

-name: start httpd service

service: name=httpd state=started

handlers:

-name: restart httpd

service: name=httpd state=restarted

7.playbook 模板

templates:

用于生成文本文件(配置文件);模板文件中可使用jinja2表达式,表达式要定义在{{}},也可以简单地仅执行变量替换;

roles:

roles用于实现“代码复用”;

roles以特定的层次型格式组织起来的playbook元素(variables,tasks, templates, handlers);

可被playbook以role的名字直接进行调用;

用法 :在 roles/ 下建立 [group_name] 子目录,并非全部都要创建;例如:

/etc/ansible/roles/ (在 /etc/ansible/ansible.cfg 定义 roles 目录)

webserver/

files/:此角色中用到的所有文件均放置于此目录中;

templates/:Jinja2模板文件存放位置;

tasks/:任务列表文件;可以有多个,但至少有一个叫做main.yml的文件;

handlers/:处理器列表文件;可以有多个,但至少有一个叫做main.yml的文件;

vars/:变量字典文件;可以有多个,但至少有一个叫做main.yml的文件;

meta/:此角色的特殊设定及依赖关系;

使用 Ansible 高效交付 Docker 容器 

使用Ansible批量管理远程服务器 

Ansible安装配置与简单使用 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/1b053cd0cb16020cfbbbdaaf434be1ae.html