{% ... %}
對於聲明python
{{ ... }}
對於表達式打印到模板輸出mysql
{# ... #}
for Comments 不包含在模板輸出中nginx
# ... ##
對於行語句web
模板變量由傳遞給模板的上下文字典定義。sql
若是應用程序傳入變量,您可使用模板中的變量。變量可能具備您能夠訪問的屬性或元素。變量的屬性很大程度上取決於提供該變量的應用程序數據庫
{{ ... }} 重要的是要知道外部雙花括號不是變量的一部分,而是print語句。若是訪問標記內的變量,請不要在它們周圍放置大括號。apache
{{% ... %}} 測試可用於針對公共表達式測試變量。要測試變量或表達式,請在變量後添加 is 加上測試的名稱編程
1.若是 if vim
Jinja中的 if 語句與 Python if 語句至關。在最簡單的形式中,您可使用它來測試變量是否已定義,而不是空或不是false服務器
對於多個分支,elif 和 else 能夠像Python同樣使用。您也能夠在那裏使用更復雜的表達式。
示例下面有。
2.宏定義
宏與常規編程語言中的函數至關。它們有助於將常常使用的習語放入可重複使用的功能中,而不是重複本身(「幹」)。示例是下面的saltstack用文件推nginx的服務同樣。
3.做業
做業的語法示例:{% set key, value = call_something() %}
在代碼塊內部,您還能夠爲變量賦值。頂級(塊,宏或循環以外)的分配從頂層宏等模板導出,並可由其餘模板導入。
4.導入和導入上下文行文
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 ##配置文件中的格式也被修改了
改進:
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 ##配置文件中的格式也被修改了
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' %}
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'] }}
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
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 的記