• Ansible playbooks常用模块案例操作


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

    #ssh root@192.168.96.188

    进入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 root@test.example.com

    创建两个系统用户

    # 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 root@test.example.com 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 root@test.example.com cat /etc/nginx/conf.d/default.conf

    检查远程主机nginx是否启动

    # ssh root@test.example.com 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
  • 相关阅读:
    CentOS 7 安装Hadoop前的SSH免密码登录配置
    CentOS 7.1下SSH远程登录服务器详解-转
    Linux系统下如何配置SSH_Centos7 ssh连接配置 CentOS7下安全配置
    如何在CentOS 7上修改主机名
    【转】CentOS 6.3(x86_64)下安装Oracle 10g R2
    【转】CentOS 6.3(x86_32)下安装Oracle 10g R2
    【转】Linux Oracle服务启动&停止脚本与开机自启动
    Cacti在selinux开启的情况下使用
    Nagios在selinux开启的情况下使用
    Nagios状态长时间处于Pending的解决方法
  • 原文地址:https://www.cnblogs.com/joy-sir/p/12164914.html
Copyright © 2020-2023  润新知