ansible 基本使用

这篇具有很好参考价值的文章主要介绍了ansible 基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ansible介绍:

   ansible是一种IT自动化工具。可以配置系统、部署软件以及协调高级的IT任务,如持续部署、滚动更新。

  使用文档: https://docs.ansible.com/ 

  安装Ansible:yum install ansible -y

概念:

    Invertory: ansible 管理的主机信息,包括ip、ssh端口、账号、密码等

   modules: 任务都有模块来完成,可以自定义模块。主要有:shell、file、service等

  plugins: 使用插件增加ansible核心功能,自身提供很多插件、可以自定义插件。例如connection插件,用于连接目标主机。

  playbooks: ansiable的核心功能,定义一系列任务、供外部使用。

ansible命令:

    ansible all -m ping

   其中all是invertory, ping是module, -m是指定module

   常用模块查看:

   ansible-doc –l 查看所有模块

   ansible-doc –s copy 查看模块文档

playbook:

   Playbooks是Ansible的配置,部署和编排语言。他们可以描述您希望在远程机器做哪些事或者描述IT流程中一系列步骤。使用易读的YAML格式组织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=httpd.conf dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
  - name: 确保nginx正在运行
    service: name=nginx state=started
  handlers:
    - name: restart nginx
      service: name=nginx state=reloaded
```

```
...
    server {
        listen       {{ inventory_hostname }}:{{ http_port }} default_server;
        server_name  {{ server_name }};
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
    }

...


---
- 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=httpd.conf dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
  - name: 确保nginx正在运行
    service: name=nginx state=started
  handlers:
    - name: restart nginx
      service: name=nginx state=reloaded
```

```
...
    server {
        listen       {{ inventory_hostname }}:{{ http_port }} default_server;
        server_name  {{ server_name }};
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
    }

...
```



### 1、主机和用户

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

### 2、定义变量

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

- **命令行传递**

  ```
  -e VAR=VALUE
  ```

- **主机变量与组变量**

在Inventory中定义变量。

```
[webservers]
192.168.1.100 ansible_ssh_user=root hostname=web1
192.168.1.100 ansible_ssh_user=root hostname=web2

[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.ctnrs.com
```

- **Register变量**

```
- shell: /usr/bin/uptime
  register: result
- debug: var=result
```

### 3、任务列表

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

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

### 4、任务控制

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

```
  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"
```

### 5、流程控制

条件:

```
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"
```

常用循环语句:

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

### 6、模板(template)

 *Jinja*2是基于python的模板引擎 

```
 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 %}
server {
   listen 80;
   server_name {{ domain_name }};
   location / {
        root /usr/share/html;
   }
}
```

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

**定义变量**:

```
{% 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 %}
```

roles:

 Roles是基于已知文件结构自动加载某些变量文件,任务和处理程序的方法。按角色对内容进行分组,适合构建复杂的部署环境。

ansible-galaxy  init 文章来源地址https://www.toymoban.com/news/detail-415166.html

Roles目录结构:

```
site.yml
webservers.yml
fooservers.yml
roles/
   common/
     tasks/
     handlers/
     files/
     templates/
     vars/
     defaults/
     meta/
   webservers/
     tasks/
     defaults/
     meta/
```

- `tasks` -包含角色要执行的任务的主要列表。
- `handlers` -包含处理程序,此角色甚至在此角色之外的任何地方都可以使用这些处理程序。
- `defaults`-角色的默认变量
- `vars`-角色的其他变量
- `files` -包含可以通过此角色部署的文件。
- `templates` -包含可以通过此角色部署的模板。
- `meta`-为此角色定义一些元数据。请参阅下面的更多细节。



通常的做法是从`tasks/main.yml`文件中包含特定于平台的任务:

```
# roles/webservers/tasks/main.yml
- name: added in 2.4, previously you used 'include'
  import_tasks: redhat.yml
  when: ansible_facts['os_family']|lower == 'redhat'
- import_tasks: debian.yml
  when: ansible_facts['os_family']|lower == 'debian'

# roles/webservers/tasks/redhat.yml
- yum:
    name: "httpd"
    state: present

# roles/webservers/tasks/debian.yml
- apt:
    name: "apache2"
    state: present
```

### 2、使用角色

```
# site.yml
- hosts: webservers
  roles:
    - common
    - webservers


定义多个:
- name: 0
  gather_facts: false
  hosts: all 
  roles:
    - common

- name: 1
  gather_facts: false
  hosts: all 
  roles:
    - webservers
```

### 3、角色控制

```
- name: 0.系统初始化
  gather_facts: false
  hosts: all 
  roles:
    - common
  tags: common 
```

到了这里,关于ansible 基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ansible 自动化运维工具的使用

    目录   一、Ansible简介 二、Ansible 的安装和使用 1.下载 2.使用 三、Ansible命令和模块 1.命令格式 2.命令行模块 (1)command 模块 (2)shell 模块 (3)cron 模块 (4)user 模块 (5)group 模块 (6)copy 模块 (7)file 模块 (8)hostname 模块 (9)ping 模块  (10)yum 模块 (11)service/

    2024年02月11日
    浏览(31)
  • 理解和使用Ansible模块,简化自动化任务

    Ansible是一款强大的自动化工具,用于管理和配置IT基础设施。在Ansible的世界中,模块(Module)是至关重要的组成部分。本文将深入探讨Ansible模块,了解它们如何简化自动化任务的执行过程。 Ansible模块是Ansible的核心组件之一,用于在目标主机上执行特定的操作。模块可以是

    2024年02月13日
    浏览(32)
  • Ansible自动化部署工具|各个模块的使用

    1、运维工具特点 Ansible 与 Saltstack 均是基于 Python 语言开发,Ansible 只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为 Ansible 是基于 SSH 远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。 Ansible 安装使用非常

    2024年02月01日
    浏览(83)
  • ansible自动化IT工具安装部署与使用验证

    目录 一、环境配置 1、关闭防火墙 2、免密登录配置 3、同步时区 二、服务端配置 1、安装软件 2、查看版本  3、实现远程控制huyang3  4、测试  结果验证: systemctl stop firewalld iptables -F setenforce0 【huyang3】ssh-keygen 【huyang3】ssh-copy-id 192.168.1.116 ntpdate huyang1 yum -y install ansible ansi

    2024年02月11日
    浏览(34)
  • ansible自动化运维工具及常见模块的使用

    目录 一、ansible概述 二、ansible的特性 三、ansible 环境安装部署 管理端安装 ansible: 配置主机清单: 配置密钥对验证: 四、ansible 常见模块的使用 1.command 模块 2.shell 模块 3.cron 模块 4.user 用户管理模块 5.group 用户组管理模块 6.copy 模块 7.file 设置文件属性模块 8.h

    2024年02月22日
    浏览(36)
  • 五种不同自动化测试模型的基本介绍

    随着移动互联网的发展,软件研发模型逐步完善,软件交付质量越来越受到软件公司的重视,软件测试技术特别是自动化测试技术开始在软件系统研发过程中发挥着越来越重要的作用。 与传统的手工测试技术相比,自动化测试具备了良好的可操作性、可重复性和高效率等特点

    2024年02月16日
    浏览(28)
  • ansible 云计算 自动化

    四台服务器: ansible: 管理端 node01 node02 node03: 被管理节点 1) 安装 [root@ansible ~]# yum install ansible -y 2) 查看帮助 [root@ansible ~]# ansible-doc -l | wc -l    # 查看模块数量 [root@ansible ~]# ansible-doc -s yum        # 查看yum模块的参数 [root@ansible ~]# ansible-doc yum           # 查看相关帮助信息 (搜

    2023年04月08日
    浏览(34)
  • Ansible自动化运维

    目录 前言 一、概述 常见的开源自动化运维工具比较 二、ansible环境搭建 三、ansible模块 (一)、hostname模块 (二)、file模块 (三)、copy模块 (四)、fetch模块 (五)、user模块 (六)、group模块 (七)、cron模块 (八)、yum_repository模块 (九)、yum模块 (十)、service模块

    2024年02月09日
    浏览(39)
  • Ansible 自动化安装软件

    例子如下: 创建一个名为/ansible/package.yml 的 playbook :         将 php 和 mariadb 软件包安装到 dev、test 和 prod 主机组中的主机上         将 RPM Development Tools 软件包组安装到 dev 主机组中的主机上         将 dev 主机组中主机上的所有软件包更新为最新版本 这里使用了 yum模块

    2024年02月11日
    浏览(39)
  • Ansible自动化部署工具

    1、运维工具特点 Ansible 与 Saltstack 均是基于 Python 语言开发,Ansible 只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为 Ansible 是基于 SSH 远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。 Ansible 安装使用非常

    2024年02月01日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包