2015-08-18 74 views
3

我有兩臺機器適合我的兩種環境。如何將NODE_ENV永久設置爲ansible?

第一個主持分段環境。它需要有NODE_ENV設置爲dev

第二個主機生產環境。它需要有NODE_ENV設置爲prod

我提供給我的服務器Ansible。

我該怎麼做?

回答

3

我解決了這樣的問題。

roles/node-env/tasks/main.yml

--- 
- name: Configure NODE_ENV 
    lineinfile: dest=/etc/environment regexp="^NODE_ENV=" line="NODE_ENV={{ node_env }}" 
    when: node_env is defined 

hosts/staging

[webserver] 
staging-server-hostname 

[webserver:vars] 
node_env=dev 

hosts/production

[webserver] 
production-server-hostname 

[webserver:vars] 
node_env=prod 

playbook.yml

--- 
- name: Provision web server 
    hosts: webserver 
    sudo: true 
    roles: 
    - { role: Stouts.nodejs, tags: nodejs } 
    - ... 
    - { role: node-env, tags: nodejs } 

然後,我提供我的分期環境:

ansible-playbook -i hosts/staging playbook.yml 

我的生產環境:

ansible-playbook -i hosts/production playbook.yml 

注意,我存儲在我的環境變量/etc/environment,因爲我想這個變量設置爲人人併爲每個用戶。

這也可以根據您的需要存儲在~/.profile/etc/profile.d。有關更多信息,請參閱this answer

這可能是矯枉過正,但它很靈活。如果有人有簡單的建議,請不要猶豫分享!

5

另一個選項是設置NODE_ENV/etc/environment文件。

在ansible任務:

- lineinfile: dest=/etc/environment line="NODE_ENV=dev"

+0

我有這個答案的問題是,它會在每次的劇本運行時追加NODE_ENV =開發。這最終會導致一個大的環境文件 –