Ansible playbooks常用模块案例操作

打开git bash 连接ansible服务器,然后进入deploy用户

#ssh [email protected]

进入python3.6虚拟环境

#su - deploy

#source .py3-a2.5-env/bin/activate

加载ansible 2.5版本

#source .py3-a2.5-env/ansible/hacking/env-setup -q

验证ansible加载效果

#ansible-playbook --version

1、File模块

登录到目标主机进行预配置工作

#ssh [email protected]

创建两个系统用户

# useradd foo
# useradd deploy

登出,回到ansible的主机,进入到test_playbooks目录。编辑主任务文件,添加测试任务。保存退出

# vi roles/testbox/tasks/main.yml

?

- name: create a file            # 创建文件file
  file: ‘path=/root/foo.txt state=touch mode=0755 owner=foo group=foo‘

#path为文件路径 #state为所用命令 #mode 为文件权限 #owner 为设置的系统用户名称 #group 为宿主

执行测试任务

# ansible-playbook -i inventory/testenv ./deploy.yml

?

查看文件是否创建成功

# ssh [email protected] ls -l /root/foo.txt

创建安装nginx需要的文件,复制下面的脚本,进行保存

# vi roles/testbox/files/nginx.repo

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

2、Copy模块

先创建一个files目录,在目录下创建一个脚本文件,添加一下内容,保存退出

# mkdir roles/testbox/files

# vi roles/testbox/files/foo.sh

echo "This is a test script"

编辑主任务配置文件,保存退出。

# vi roles/testbox/tasks/main.yml

?

- name: copy a file
  copy: ‘remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes‘

#remote_src 定义当前拷贝任务是将ansible本地server文件传送到目标主机中

#src 本地文件 传送  #dest 目标主机文件

#mode 设置文件权限  #force 定义拷贝任务强制执行

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

?

3、Stat模块、Debug模块

编辑主任务配置文件,添加以下内容

#  vi roles/testbox/tasks/main.yml

# 获取远程foo.sh的文件状态信息
- name: check if foo.sh exists
  stat: ‘path=/root/foo.sh‘
  register: script_stat
# 将stat文件信息,放到when的判断语句中,如果判断成功,dubug输出foo.sh exists
- debug: msg="foo.sh exists"
  when: script_stat.stat.exists

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

?

4、Command/Shell模块

编辑主任务配置文件,添加以下内容

#  vi roles/testbox/tasks/main.yml

# 远程执行foo.sh脚本
- name: run the script
  command: ‘sh /root/foo.sh‘

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

?

5、Template模块、Packaging模块、Service模块

添加一些参数到testenv的文件当中,添加如下参数

# vi vi inventory/testenv

?

server_name=test.example.com
port=80
user=deploy
worker_processes=4
max_open_file=65505
root=/www

创建templates目录,然后创建一个nginx.conf.j2的模块文件,添加配置信息

# mkdir roles/testbox/templates

# vi roles/testbox/templates/nginx.conf.j2

# For more information on configuration, see:
user              {{ user }};                  # user变量
worker_processes  {{ worker_processes }};      # 变量

error_log  /var/log/nginx/error.log;

pid        /var/run/nginx.pid;

events {
    worker_connections  {{ max_open_file }};   #变量
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                      ‘$status $body_bytes_sent "$http_referer" ‘
                      ‘"$http_user_agent" "$http_x_forwarded_for"‘;

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    # Load config files from the /etc/nginx/conf.d directory
    # The default server is in conf.d/default.conf
    #include /etc/nginx/conf.d/*.conf;
    server {
        listen       {{ port }} default_server;      # 端口变量
        server_name  {{ server_name }};          #服务器名称变量

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   {{ root }};          # root变量
            index  index.html index.htm;
        }

        error_page  404              /404.html;
        location = /404.html {
            root   /usr/share/nginx/html;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

    }

}

编辑主任务配置文件,添加以下下内容

#  vi roles/testbox/tasks/main.yml

# 将模板写入目标主机配置文件
- name: write the nginx config file
  template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/conf.d/default.conf

# yum安装nginx
- name: ensure nginx is at the latest version
  yum: pkg=nginx state=latest

# 启动nginx服务
- name: start nginx service
  service: name=nginx state=started

编辑好文件之后,执行任务

# ansible-playbook -i inventory/testenv ./deploy.yml

?

检查nginx.conf.j2文件的参数变量,是否写入nginx主配置文件

# ssh [email protected] cat /etc/nginx/conf.d/default.conf

?

检查远程主机nginx是否启动

# ssh [email protected] ps -ef  | grep nginx

?

main.yml文件

- name: Print server name and user to remote testbox
  shell: "echo ‘Currently {{ user }} is logining {{ server_name }}‘ > {{ output }}"
- name: create a file
  file: ‘path=/root/foo.txt state=touch mode=0755 owner=foo group=foo‘
- name: copy a file
  copy: ‘remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes‘
- name: check if foo.sh exists
  stat: ‘path=/root/foo.sh‘
  register: script_stat
- debug: msg="foo.sh exists"
  when: script_stat.stat.exists
- name: run the script
  command: ‘sh /root/foo.sh‘
- name: Create a directory if it does not exist
  file: ‘path=/etc/nginx state=directory mode=0755‘
- name: write the nginx config file
  template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: copy a file
  copy: ‘remote_src=no src=roles/testbox/files/nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0644 force=yes‘
- name: ensure nginx is at the latest version
  yum: pkg=nginx state=latest
- name: start nginx service
  service: name=nginx state=started

- name: Print server name and user to remote testbox
  shell: "echo ‘Currently {{ user }} is logining {{ server_name }}‘ > {{ output }}"

  # 远程创建文件
- name: create a files
  file: ‘path=/root/foo.txt state=touch mode=0755 owner=foo group=foo‘

  # 将本地的文件拷贝到远程主机
- name: copy a files
  copy: ‘remote_src=no src=roles/testbox/files/foo.sh dest=/root/foo.sh mode=0644 force=yes‘

  # 获取文件状态
- name: check if foo.sh exists
  stat: ‘path=/root/foo.sh‘
  register: script_stat

  # 判断文件是否存在
- debug: msg="foo.sh exists"
  when: script_stat.stat.exists

  # 远程执行脚本文件
- name: run the script
  command: ‘sh /root/foo.sh‘

  # 创建一个nginx的目录
- name: Create a directory if it does not exist
  file: ‘path=/etc/nginx state=directory mode=0755‘

  # 从本地模板中写入nginx.conf文件
- name: write the nginx config file
  template: src=roles/testbox/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf

  # 拷贝本地nginx安装需要的脚本
- name: copy a file
  copy: ‘remote_src=no src=roles/testbox/files/nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0644 force=yes‘

  # yum安装nginx
- name: ensure nginx is at the latest version
  yum: pkg=nginx state=latest

  # 启动nginx
- name: start nginx service
  service: name=nginx state=started

原文地址:https://www.cnblogs.com/joy-sir/p/12164914.html

时间: 2024-10-09 23:13:12

Ansible playbooks常用模块案例操作的相关文章

ansible api常用模块与参数

###ansibleAPI 常用模块 用于读取yaml,json格式的文件 from ansible.parsing.dataloader import DataLoader #用于管理变量的类,包括主机,组,扩展等变量 from ansible.vars.manager import VariableManager #用于创建和管理inventory,倒入inventory文件 from ansible.inventory.manager import InventoryManager #ad

02.ansible的常用模块

可以从ansible-doc -l | grep来找出想要的模块.再使用ansible-doc -s module_name来查看此模块的用法.官方模块列表和说明:https://docs.ansible.com/ansible/latest/modules_by_category.html 关于模块的使用方法,需要注意的是"state".很多模块都会有该选项,且其值几乎都包含有"present"和"absent",表示肯定和否定的意思. ans

自动化运维Ansible之常用模块

目录 0.Ansible模块语法 1.Command模块 2.Shell模块 3.Scripts模块 4.Copy模块 5.File模块 6.Yum模块 7.Service模块 8.Cron模块 9.Group模块 10.User模块 11.Mount模块 12.Unarchive模块 13.Git模块 14.Systemd模块 0.Ansible模块语法 在ansible中是指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook 查看模块帮助:ansible-doc

ansible使用一(ansible的安装及ansible常用模块的使用)

1.ansible概述        Ansible是一款基于Python开发的自动化运维工具,它不需要安装客户端,使用SSH进行通信,同时可支持系统账号认证或秘钥认证,也支持windows客户端. Ansible主要组成部分: (1)ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件: (2)INVENTORY:Ansible管理主机的清单: (3)MODULES:Ansible执行命令的

Ansible 之 概念和常用模块介绍

1  概述 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括如下的特性: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

ansible 常用模块

执行前设定 它的Config文件呢,默认在/etc/ansible/ansible.cfg 第一步,就是我们的ansible的机器,需要链接上被它控制的机器.因为ansible的ssh是默认有个检查key的设置,我们第一次使用它,肯定对面机器没有Public key啊,所以我们要关闭配置文件内的private key的检查: host_key_checking = False 生成ssh-key 生成ssh-key这部分,就不再多说了. 创建你的hosts 设置控制的主机清单在/etc/ansi

Ansible自动化运维的安装及常用模块详解

Ansible作为今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个.更为重要的是,它操作简单,但提供的功能又非常丰富,在运维领域,几乎可以做任何事..Ansible自2012年发布以来,很快在全球流行,其特点如下: 1.Ansible基于Python开发,运维工程师对其二次开发相对比较容易2.Ansible丰富的内置模块,几乎可以满足一切要求3

ansible基础—安装与常用模块

ansible介绍: ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排.它通过ssh协议来连接主机,省去了在每一台主机安装客户端的麻烦,相对比puppet和saltstack,显得更为简单和轻量. ansible命令参数: Usage: ansible <host-pattern> [options] Options:   -a MODULE_ARGS, --args=MODULE_ARGS