企業——saltstack自動化部署軟件值JINJIA模塊的使用

一.JINJA在STATES中的使用   能夠用於管理文件

 

默認的Jinja分隔符配置以下

  {% ... %}  對於聲明python

  {{ ... }}  對於表達式打印到模板輸出mysql

  {# ... #}for Comments  不包含在模板輸出中nginx

   #  ... ##  對於行語句web

模板變量由傳遞給模板的上下文字典定義。sql

若是應用程序傳入變量,您可使用模板中的變量。變量可能具備您能夠訪問的屬性或元素。變量的屬性很大程度上取決於提供該變量的應用程序數據庫

  {{ ... }} 重要的是要知道外部雙花括號不是變量的一部分,而是print語句。若是訪問標記內的變量,請不要在它們周圍放置大括號。apache

  {{% ... %}} 測試可用於針對公共表達式測試變量。要測試變量或表達式,請在變量後添加 is 加上測試的名稱編程

 

JINJIA的控制結構:

1.若是 if vim

  Jinja中的 if 語句與 Python if 語句至關。在最簡單的形式中,您可使用它來測試變量是否已定義,而不是空或不是false服務器

  對於多個分支,elif 和 else 能夠像Python同樣使用。您也能夠在那裏使用更復雜的表達式。

  示例下面有。

2.宏定義

  宏與常規編程語言中的函數至關。它們有助於將常常使用的習語放入可重複使用的功能中,而不是重複本身(「幹」)。示例是下面的saltstack用文件推nginx的服務同樣。

3.做業

  做業的語法示例:{% set key, value = call_something() %}

  在代碼塊內部,您還能夠爲變量賦值。頂級(塊,宏或循環以外)的分配從頂層宏等模板導出,並可由其餘模板導入。

4.導入和導入上下文行文

 

 

二.修改 sls 文件內容,添加相應的 jinjia 模塊

1.在編寫好的 sls 文件中添加相應的 jinjia 模塊

cd /srv/salt/apache
   vim install.sls
        - template: jinja
        - context:
          port: 8080
          bind: 172.25.254.2
   vim files/httpd.conf
     Listen {{ bind }}:{{ port }}
   salt wf2 state.sls apache.install  ##經過推送的 sls 文件修改配置文件內的某些參數(或者參數的格式)
   
   測試:
   wf2上: netstat -antlp     ##端口格式被修改
        vim /etc/httpd/conf/httpd.conf     ##配置文件中的格式也被修改了


2.上面的方法的不足:bind信息是手動加進去的。若是有不少的服務器(意味着有不少不一樣的IP),不可能一個一個手動添加

 改進:
   vim install.sls
    bind: {{ grains['fqdn_ip4']}}     ##將bind處修改,經過 grains 得到某臺服務器的IP,而後填入bind 中。這個在服務器不少的時候,不用一個一個手動添加

   salt wf2 state.sls apache.install

   測試:
   wf2上: netstat -antlp     ##端口格式被修改
        vim /etc/httpd/conf/httpd.conf     ##配置文件中的格式也被修改了
        可是顯示出來的內容,倒是列表的形式,須要進一步的改進。改進以下。


 接着改進:

  vim install.sls
         bind: {{ grains['ipv4'][1] }}

   測試:
   wf2上: netstat -antlp     ##端口格式被修改
        vim /etc/httpd/conf/httpd.conf     ##配置文件中的格式也被修改了

 

 

三.利用JINJIA的控制結構實現

1.利用導入

   vim files/httpd.conf  ##給配置文件的最上面空白處添加如下的語句
    {% from 'apache/lib.sls' import port with context%}  ## 將 apache/lib.sls 文件中的端口號,填寫入配置文件中。
    {% from 'apache/lib.sls' import bind with context%}  ## 將 apache/lib.sls 文件中的IP地址,填寫入配置文件中。
   
   cd /srv/salt/apache  ##在剛纔寫的目錄的路徑下,建立相應的文件
   vim lib.sls  ##編輯須要填寫的內容信息,set至關於開啓一個容器,而後給容器賦值
    {% set port = 8080 %}
    {% set bind = '172.25.254.2' %} 

 

2.利用 若是if 實現

   vim /srv/pillar/web/install.sls
  {% if grains['fqdn'] == 'ww2' %}
      webserver: httpd
      port: 80
      bind: 172.24.254.2
     {% elif grains['fqdn'] == 'ww3' %}
      webserver: nginx
     % endif %}

   vim files/httpd.conf
     Listen {{ pillar['bind'] }}:{{ pillar['port'] }}

3.配置 nginx 服務

  cat install.sls
    {% set nginx_ver = '1.15.8' %}

    nginx-install:
     pkg.installed:
      - pkgs:
      - pcre-devel
      - zlib-devel
      - gcc
      - make

    file.managed:
      - name: /mnt/nginx-{{ nginx_ver }}.tar.gz
      - source: salt://nginx/files/nginx-{{ nginx_ver }}.tar.gz

    cmd.run:
      - name: cd /mnt && tar zxf nginx-{{ nginx_ver }}.tar.gz && cd nginx-{{ nginx_ver }} && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx &> /dev/null && make &> /dev/null && make install &> /dev/null && cd .. && rm -fr nginx-{{ nginx_ver }}
- creates: /usr/local/nginx


  cat service.sls
    include:
      - nginx.install
      - users.nginx

    /usr/local/nginx/conf/nginx.conf:
     file.managed:
      - source: salt://nginx/files/nginx.conf
      - template: jinja


    nginx-service:
     file.managed:
      - name: /etc/systemd/system/nginx.service
      - source: salt://nginx/files/nginx.service

 

    service.running:
      - name: nginx
      - reload: True
      - watch:
       - file: /usr/local/nginx/conf/nginx.conf

  ls  ## 在 /mnt 下
    nginx-1.15.8.tar.gz
  rm -fr *    ##再次推送就過來了
  salt server3 state.sls nginx.service
  ls
    nginx-1.15.8.tar.gz

 

四.利用數據庫記錄 saltstack 執行過的命令

方法一:常規方法,執行的命令會被保存在cache目錄下

   cd /var/cache/salt/master/jobs
   salt-run jobs.list_jobs   ##查看執行過的命令

 

方法二:利用數據庫保存

 wf2上:使遠程的用戶能夠登陸數據庫
   yum install MySQL-python -y
   cd /etc/salt
   vim minion
     mysql.host: '172.25.254.1'
     mysql.user: 'salt'
     mysql.pass: 'westos'
     mysql.db: 'salt'
     mysql.port: 3306
   /etc/init.d/salt-minion restart

 wf1上:
   yum install mysql-server -y
   /etc/init.d/mysqld start
   mysql < add.sql
   mysql    ##給用戶受權
   mysql> grant all on salt.* to salt@'%' identified by 'westos';
   mysql> grant all on salt.* to salt@'localhost' identified by 'westos';
   
==================================================================================
下面是 add.sql 文件中的東西:

CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

USE `salt`;

--
-- Table structure for table `jids`
--

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#CREATE INDEX jid ON jids(jid) USING BTREE;

--
-- Table structure for table `salt_returns`
--

DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
  `fun` varchar(50) NOT NULL,
  `jid` varchar(255) NOT NULL,
  `return` mediumtext NOT NULL,
  `id` varchar(255) NOT NULL,
  `success` varchar(10) NOT NULL,
  `full_ret` mediumtext NOT NULL,
  `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  KEY `id` (`id`),
  KEY `jid` (`jid`),
  KEY `fun` (`fun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Table structure for table `salt_events`
--

DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar(255) NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
==================================================================================

   salt '*' test.ping --return mysql     ##執行一條return命令
   mysql
   mysql> use salt;
   mysql> show tables;
   mysql> select * from salt_returns;     ##會有剛纔測試的 test.ping 的記錄

 wf1上:
   yum install MySQL-python -y
   cd /etc/salt
   vim master
     master_job_cache: mysql
     mysql.host: 'localhost'
     mysql.user: 'salt'
     mysql.pass: 'westos'
     mysql.db: 'salt'
     mysql.port: 3306
   /etc/init.d/salt-master restart
   
   測試:
   salt wf3 cmd.run hostname     ##執行一條return命令
   mysql
   mysql> use salt;
   mysql> show tables;
   mysql> select * from salt_returns;     ##會有剛纔測試的 test.ping 的記

相關文章
相關標籤/搜索