飞天使-linux操作的一些技巧与知识点4

文章目录

        • ansible
        • 配置文件的优先级
        • 尝试开始进行操作
        • ansible常用模块
        • ansible 的playbook
        • 示例
        • 安装php
        • playbook中变量的引用

ansible
yum install -y ansible 
测试是否可用 ansible localhost -m ping
/etc/ansible/ansible.cfg :主配置文件,配置 ansible 工作特性
/etc/ansible/hosts :配置主机清单文件
/etc/ansible/roles/ :存放 ansible 角色的目录

主配置文件存在 /etc/anible/ansible.cfg
指定特权用户
[privilege_escalation]
become=True
become_method=sudo
become_user=user
become_ask_pass=False



ansible;adhoc;playbook;tasks;Roles;Roles方式编排web集群架构;

配置文件的优先级
1) 最先查找 $ANSIBLE_CONFIG 变量
2) 其次查找当前项目目录下 ansible.cfg
3) 然后查找用户家目录下的 .ansible.cfg
4) 最后查找 /etc/ansible/ansible.cfg

Inventory 文件主要用来填写被管理主机以及主机组信息;(逻辑上定义);
默认 Inventory 文件为 /etc/ansible/hosts ;
当然也可以自定义一个文件,当执行 ansible 命令时使用 -i 选项指定 Inventory
文件位置;
配置主机清单
[webservers]
172.16.1.7
172.16.1.8 ansible_become=yes

ansible_become=yes 这个的意思是加上sudo
尝试开始进行操作
ad-hoc执行步骤
1.加载自己的配置文件,默认 /etc/ansible/ansible.cfg ;
2.查找对应的主机配置文件,找到要执行的主机或者组;
3.加载自己对应的模块文件,如 command ;
4.通过 ansible 将模块或命令生成对应的临时 py 文件,并将该文件传输至远
程服务器对应执行用户 $HOME/.ansible/tmp/ansible-tmp-number/XXX.PY ;
5.执行用户家目录的 `` 文件;
6.给文件 +x 执行;
7.执行并返回结果;
8.删除临时 py 文件, sleep 0 退出;

使用 ad-hoc 执行一次远程命令,注意观察返回结果的颜色;
绿色: 代表被管理端主机没有被修改
黄色: 代表被管理端主机发现变更
红色: 代表出现了故障,注意查看提示

在这里插入图片描述

ansible常用模块
command模块
[root@manger ~]# ansible localhost -m command -a 'chdir=/root
echo $PWD'
 ansible localhost -m command -a
'creates=/data/file ifconfig eth0'

shell 模块
参数 选项 含义
chdir chdir /opt 执行ansible时,切换到指定的目录
creates creates /data/file 如果文件存在,则跳过执行
removes removes /data/file 如果文件存在,则执行
ansible localhost -m shell -a "ifconfig eth0|awk
'NR==2' "

scripts 模块
 ansible webservers -m script -a "/data/yum.sh"

copy模块
ansible webservers -m copy -a "src=./httpd.conf
dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"

file模块
 ansible webservers -m file -a
"path=/tmp/foo.conf state=touch mode=666"

ansible webservers -m file -a "path=/tmp/foo
state=directory mode=777"
ansible webservers -m file -a "path=/tmp/foo
state=directory owner=root group=root mode=777 recurse=yes"

等模块,有很多平时用不到,这里做一个大概记录
ansible 的playbook
playbook 是一个 由 yaml 语法编写的文本文件,它由 play 和 task 两部分组
成。
play : 主要定义要操作主机或者主机组
task :主要定义对主机或主机组具体执行的任务,可以是一个任务,也可以是多个
任务(模块)
总结: playbook 是由一个或多个 play 组成,一个 play 可以包含多个 task 任
务。
可以理解为: 使用多个不同的模块来共同完成一件事情。

1) playbook 是对 AD-Hoc 的一种编排方式。
2) playbook 可以持久运行,而 Ad-Hoc 只能临时运行。
3) playbook 适合复杂的任务,而 Ad-Hoc 适合做快速简单的任务。
4) playbook 能控制任务执行的先后顺序。

语法 描述
缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能
使用tabs
冒号 以冒号结尾的除外,其他所有冒号后面所有必须有空格。
短横
线
表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别
作为同一列表。
示例
$cat installed_httpd.yml
#1.定义play
#2.定义task、(Installed、Configure、Init、Systemd)


- hosts: webservers
  tasks:
    - name: Installed Httpd Server
      yum:
        name: httpd
        state: present

    - name: Configure Httpd Server
      copy:
        src: ./httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf
        owner: "root"
        group: "root"
        mode: '0644'
        backup: yes
      notify: Restart Httpd Server

    - name: Init Httpd Server
      copy:
        src: ./index.html.j2
        dest: /var/www/html/test.html

    - name: Systemd Httpd Server
      systemd:
        name: httpd
        state: started
        enabled: yes

  handlers:
    - name: Restart Httpd Server
      systemd:
        name: httpd
        state: restarted


上面是用root 用户执行的
下面是用普通用户执行
- hosts: webservers
  become: true
  become_user: root
  tasks:
    - name: Installed Httpd Server
      yum:
        name: httpd
        state: present

    - name: Configure Httpd Server
      copy:
        src: ./httpd.conf.j2
        dest: /etc/httpd/conf/httpd.conf
        owner: "nouser"
        group: "nouser"
        mode: '0644'
        backup: yes
      notify: Restart Httpd Server

    - name: Init Httpd Server
      copy:
        src: ./index.html.j2
        dest: /var/www/html/test.html
        owner: "nouser"
        group: "nouser"
        mode: '0644'

    - name: Systemd Httpd Server
      systemd:
        name: httpd
        state: started
        enabled: yes

  handlers:
    - name: Restart Httpd Server
      systemd:
        name: httpd
        state: restarted


检查语法 :ansible-playbook installed_httpd.yml --
syntax-check

执行命令: ansible-playbook installed_httpd.yml 
安装php
cat install_nginx_php.yml
#1.安装nginx
#2.安装php
#3.添加nginx虚拟主机,触发重启
#4.配置php,连接redis;触发重启
#5.部署phpadmin;、


- hosts: webservers
  vars:
    web_site_directory: /ansible/admin2

  tasks:
    - name: Installed Nginx PHP Server
      yum:
        name: "{{ item }}"
        state: present
      loop:
        - nginx
        - php71w
        - php71w-cli
        - php71w-common
        - php71w-devel
        - php71w-embedded
        - php71w-gd
        - php71w-mcrypt
        - php71w-mbstring
        - php71w-pdo
        - php71w-xml
        - php71w-fpm
        - php71w-mysqlnd
        - php71w-opcache
        - php71w-pecl-memcached
        - php71w-pecl-redis
        - php71w-pecl-mongodb
      tags: Install

    - name: Create Nginx Process Runtime Group
      group:
        name: www
        gid: 666
      tags: Install

    - name: Create Nginx Process Runtime User
      user:
        name: www
        uid: 666
        create_home: no
      tags:
        - Install
        - Configure

    - name: Configure Nginx Nginx.conf
      copy:
        src: ./conf/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        owner: 'root'
        group: 'root'
        mode: '0644'
      notify: Restart Nginx Server
      tags: Configure

    - name: Configure Nginx VHosts ansible.oldxu.com;
      template:
        src: ./conf/ansible.oldxu.com.conf.j2
        dest: /etc/nginx/conf.d/ansible.oldxu.com.conf
      notify: Restart Nginx Server

    - name: Check Web Configure
      shell:
        cmd: /usr/sbin/nginx -t
      register: Check_Nginx
      changed_when:
        - Check_Nginx.stdout.find('successful')
        - false

    - name: Configure php php.ini
      copy:
        src: "{{ item.src }}"
        dest: "{{ item.dest }}"
        mode: "{{ item.mode }}"
      loop:
        - { src: "./conf/php.ini.j2", dest: "/etc/php.ini" , mode: "0644" }
        - { src: "./conf/php-fpm.d.www.conf.j2", dest: "/etc/php-fpm.d/www.conf" , mode: "0644" }
      notify: Restart PHP Server

    - name: Systemd Nginx And PHP Server
      systemd:
        name: "{{ item }}"
        state: started
        enabled: yes
      loop:
        - nginx
        - php-fpm


# download code

    - name: Create Web Site Directory
      file:
        path: "{{ web_site_directory }}"
        state: directory
        owner: 'www'
        group: 'www'
        mode: '0755'

    - name: Unarchive Myadmin Code
      unarchive:
        src: file/phpmyadmin.zip
        dest: "{{ web_site_directory }}"
        owner: 'www'
        group: 'www'


  handlers:
    - name: Restart Nginx Server
      systemd:
        name: nginx
        state: restarted

    - name: Restart PHP Server
      systemd:
        name: php-fpm
        state: restarted
playbook中变量的引用
变量提供了便捷的方式来管理 ansible 项目中的动态值。 比如 nginx-1.12 ,可能
后期会反复的使用到这个版本的值,那么如果将此值设置为变量,后续使用和修改都
将变得非常方便。这样可以简化项目的创建和维护;

在 Ansible 中定义变量分为如下三种方式:
1) 通过命令行传递变量参数定义
2) 在play文件中进行定义变量
2.1) 通过vars定义变量
2.2) 通过vars_files定义变量
3) 通过inventory在主机组或单个主机中设置变量
3.1) 通过host_vars对主机进行定义
3.2) 通过group_vars对主机组进行定义


vars 形式的变量
- hosts: webservers
  vars:
    web_packages: httpd
    ftp_packages: vsftpd
  tasks:
    - name: Output Variables
      debug:
        msg:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"


输出结果为
    "msg": [
        "httpd",
        "vsftpd"
    ]

在 playbook 中使用 vars_files 指定文件作为变量文件,好处就是其他的
playbook 也可以调用;
[root@ansible project1]# cat vars.yml
web_packages: httpd
ftp_packages: vsftpd

- hosts: webservers
  vars_files:
    - ./vars.yml
  tasks:
    - name: Output Variables
      debug:
        msg:
          - "{{ web_packages }}"
          - "{{ ftp_packages }}"



playbook 传送多个变量
ansible-playbook f5.yml -i hosts -e
"web_packages=GeoIP" -e "ftp_packages=telnet"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/233605.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【金融数据分析】计算沪深300指数行业权重分布并用饼图展示

前言 前面的文章我们已经介绍了如何获取沪深300成分股所述行业以及权重的数据,想要了解这部分内容的小伙伴可以阅读上一篇文章 springbootjdbcTemplatesqlite编程示例——以沪深300成分股数据处理为例-CSDN博客 那么有了上文获取的数据,我们实际上可以…

FL Studio20版本水果软件永久免费激活码

FL Studio21水果编曲软件汉化版是一款专业的音乐制作软件,被广泛地应用于电子音乐、hip-hop、流行乐等多种音乐类型的制作。该软件提供了丰富的音频编曲工具和音乐效果器,让用户可以轻松地创作出高品质的音乐作品。同时,这也是一款非常易于上…

CMake是什么

文章目录 一.什么是CMake二.CMake安装三.CMake一个HelloWord-的语法介绍3.1 PROJECT关键字3.2 SET关键字3.3 MESSAGE关键字3.4 ADD_EXECUTABLE关键字3.5 include_directories关键字3.6 aux_source_directory 四.语法的基本原则4.1 语法注意事项 五.内部构建和外部构建5.1 外部构…

C++『异常』

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2022 版本 17.6.5 文章目录 🌇前言🏙️正文1.异常基本概念1.1.C语言异常处理方式1.2.C异常处理方式 2.异常的使用2.1.异常…

2023济南大学acm新生赛题解

通过答题情况的难度系数&#xff1a; 签到&#xff1a;ACI 铜牌题&#xff1a;BG 银牌题&#xff1a;EF 金牌题&#xff1a;DHJKO 赛中暂未有人通过&#xff1a;LMNP A - AB Problem 直接根据公式计算就行。 #include<stdio.h> int main(){int a,b;scanf("%…

综合练习(OSPF+BGP+ISIS+单臂路由)

一、知识补充 1、链路聚合 为了满足不同服务器之间的数据交互&#xff0c;交换机之间必须具有更高的带宽&#xff0c;同时需要具备链路的冗余备份&#xff1b; 通常可以增加核心交换机之间的物理链路数量&#xff0c;以提高核心交换机之间的链路带宽&#xff1b;在启用STP的…

Flutter视频播放器在iOS端和Android端都能实现全屏播放

Flutter开发过程中&#xff0c;对于视频播放的三方组件有很多&#xff0c;在Android端适配都挺好&#xff0c;但是在适配iPhone手机的时候&#xff0c;如果设置了UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationLandscapeRight都为false的情况下&#xff0c;无法…

怎么用vue创建一个项目,并使用Element组件

要使用element组件的话要先安装一个node&#xff0c;然后再输入下面一系列指令安装vue脚手架&#xff0c;这样比较方便 然后输入vue iu指令进入可视化界面创建项目&#xff0c;创建项目的操作流程我已经做好放在下面了&#xff0c;此处省略..............N个字...............&…

【USB、串口、COM口、TTL、RS-232、RS-485区别详解】

USB&#xff0c;串口&#xff0c;COM口&#xff0c;TTL&#xff0c;RS-232&#xff0c;RS-485区别详解 1. USB&#xff0c;串口&#xff0c;COM口&#xff0c;TTL&#xff0c;RS-232&#xff0c;RS-485区别详解2 USB转TTL2 RS-232转TTL3 USB4 UART5 STM32串口异步通讯需要定义的…

Stable Diffusion 系列教程 - 2 WebUI 参数详解

Stable Diffusion 的整个算法组合为&#xff1a; UNet VAE 文本编码器 UNet&#xff1a;就是我们大模型里的核心。 文本编码器&#xff1a;将我们的prompt进行encoder为算法能理解的内容&#xff08;可以理解为SD外包出去的项目CLIP&#xff09;。 VAE&#xff1a;对UNet生…

Linux权限理解

文章目录 前言概述Linux下的权限Linux权限管理文件访问者的分类&#xff1a;属性&#xff1a;文件权限值表示方法&#xff1a; 文件类型&#xff1a; 权限的修改chmod对 text.txt 文件的权限进行修改法1&#xff1a;法2&#xff1a; chownchgrpumaskfile指令目录权限粘滞位 前言…

socket 套接字

1、套接字介绍 socket起源于Unix&#xff0c;遵循“一切皆文件”出发点&#xff0c;都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。 在设计模式中&#xff0c;Socket把复杂的TCP/IP协议族隐藏在Socket接口后面&#xff0c;Socket去组织数据&#xf…

端口复用和重映射

一、端口复用 &#xff08;1&#xff09;端口复用概念 端口复用是将一个I/O赋予多个功能&#xff0c;通过设置I/O的工作模式来切换不同的功能。 STM32有很多的内置外设&#xff0c;这些外设的外部引脚都是与GPIO复用的。也就是说&#xff0c;一个GPIO如果可以复用为内置外设的…

【rabbitMQ】rabbitMQ用户,虚拟机地址(添加,修改,删除操作)

rabbitMQ的下载&#xff0c;安装和配置 https://blog.csdn.net/m0_67930426/article/details/134892759?spm1001.2014.3001.5502 rabbitMQ控制台模拟收发消息 https://blog.csdn.net/m0_67930426/article/details/134904365?spm1001.2014.3001.5502 目录 用户 添加用户…

simulink MATLABFunction模块中实时函数调用函数的使用

样例 function Predyy matlabceshi(input, Time_s) input1 input; Time_s1 Time_s; Predyy ee(input1) mm(Time_s1); end 上面是主要部分&#xff0c;下面是被调用部分 function A ee(input1) A input1 * 100; end function B mm(Time_s1) B Time_s1 * 100; end 模型…

jvm内存分配机制

内存分配机制 1.一般机制 ​ 如果对象在Eden出生并且经过第一次Minor后仍然存活,并且能被survivor容纳的话,将被移动到survivor空间中,并将对象年龄设为1 对象每熬过一次MinnorGC,年龄就增加一岁,当他的年龄增加到一定程度(默认15岁)就会被晋升到老年代 直接进入老年代的情…

sap增强

四代增强 2种显示增强1种隐式增强 隐式增强 光标放在增强点或其中的代码点击修改即可修改代码 显示增强 1.ENHANCEMENT-POINT 在代码修改界面选择空行 光标所在位置 可以创建多个增强实施且激活后都会执行. 2.ENHANCEMENT-SECTION 1,选中程序中空行 2.编辑->创建选项 …

「JavaScript每日一练」系列——提高你的JS技能(第三天)

有什么不懂可以去看我前两天的笔记 https://blog.csdn.net/weixin_70007095/article/details/134905674 目录 有什么不懂可以去看我前两天的笔记 JavaScript 进阶 - 第3天笔记 编程思想 面向过程 面向对象 构造函数 原型对象 constructor 属性 对象原型 原型继承 原型链 JavaSc…

肾精不足,湿浊难去!老中医教你简单1招,藏养肾精、祛寒祛湿!

前言 冬季祛湿养肾精&#xff0c;做好2件事能事半功倍 湿毒是慢病的温床 有「七十二变」的法力 如果我们善于观察大自然&#xff0c;那么就会发现&#xff0c;在阴雨天&#xff0c;尤其在南方的回南天之时&#xff0c;那些隐蔽的草丛或者腐朽的木桩之上&#xff0c;会长出很…

排序算法-选择/堆排序(C语言)

1基本思想&#xff1a; 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的 数据元素排完 。 2 直接选择排序: 在元素集合 array[i]--array[n-1] 中选择关键码最大 ( 小 ) 的数据元素…