2016-10-12 1 views
1

Я могу создавать VPC в AWS, используя состояния соли, используя boto.vpc. Но мне также нужно создать создание (в дополнение к самим VPC) подсетей, интернет-шлюзов, таблиц маршрутов на основе исходного VPC, который я могу создать.Создайте полный VPC, используя стек соли и boto.vpc

Таким образом, если определение VPC выглядит следующим образом:

Create VPC: 
    boto_vpc.present: 
     - name: dlab-new 
     - cidr_block: 10.0.0.1/24 
     - dns_hostnames: True 
     - region: us-east-1 
     - keyid: keyid 
     - key: key 

Как я могу обратиться к оригинальному VPC в последующих частях конфигурации VPC? Поскольку я не буду знать vpc_id VPC, пока он не будет создан. Есть ли переменная, которую я мог бы использовать в последующих определениях подсетей, IGW и таблиц маршрутов с использованием переменной?

Create subnet: 
     boto_vpc.subnet_present: 
     - name: dlab-new-subnet 
     - vpc_id: ????? 
     - cidr_block: 10.0.0.1/24 
     - region: us-east-1 
    - keyid: keyid 
     - key: key 

Create internet gateway: 
     boto_vpc.internet_gateway_present: 
     - name: dlab-igw 
     - vpc_name: ???? 
    - keyid: keyid 
     - key: key 

    Create route: 
     boto_vpc.route_table_present: 
     - name: my_route_table 
     - vpc_id: ??? 
     - routes: 
      - destination_cidr_block: 10.0.0.1/24 
      instance_id: i-123456 
     - subnet_names: 
      - dlab-new-subnet 
     - region: us-east-1 
     - profile: 
      keyid: keyid 
      key: key 

Есть ли способ, чтобы использовать переменные в месте - vpc_id значения, которое позволило бы определение для подсети, IGW и т.д., чтобы получить имя VPC порожденного Создания процесса VPC?

ответ

1

Теперь вы можете использовать «vpc_name» для boto_vpc.subnet_present. Вам не нужно использовать «vpc_id» по крайней мере с версии salt 2016.11.3 (Carbon)

1

Для того, чтобы получить VPC идентификатор существующего VPC вы можете использовать boto_vpc execution module

Первая часть вашего государства создаст VPC с именем dlab-new, то вы можете проверить это из командной строки salt minion_name boto_vpc.get_id dlab-new, который будет верните идентификатор VPC, если он найдет совпадение.

модули исполнения можно назвать внутри государств, как это:

{% set vpc_id = salt.boto_vpc.get_id(name='dlab-new', region='us-east-1', keyid=keyid, key=key)['id'] %} 

Более подробную информацию и примеры JINJA IN STATES

  • vpc_id переменная будет содержать результат, который будет являться VPC Идентификатор dlab-new в этом случае и то вы можете передать его другим государствам.
  • VPC name, region, aws keys и другие могут быть установлены как переменные в верхней части вашего состояния для более легкой модификации в будущем вместо того, чтобы пройти через все состояние, ищущее их.
  • Чтобы получить правильную версию vpc_id, вам необходимо создать VPC с помощью исполняющего модуля, потому что сначала будет оценен код jinja.

Полное состояние должно быть как этот

{% set custom_vpc_name = 'dlab-new' %} 
{% set custom_keyid = keyid %} 
{% set custom_key = key %} 
{% set custom_region = 'us-east-1' %} 
{% set cidr_block = '10.0.0.1/24' %} 
{% set instance_id = 'i-123456' %} 

{% set create_vpc = salt.boto_vpc.create(vpc_name=custom_vpc_name,cidr_block=cidr_block,enable_dns_hostnames=True,region=custom_region,keyid=custom_keyid,key=custom_key) %} 


#this line is using boto_vpc execution module and get_id function which will return the VPC id if a match is found and your vpc will be created as described above with the name 'dlab-new' 
{% set vpc_id = salt.boto_vpc.get_id(name=custom_vpc_name, region=custom_region, keyid=custom_keyid, key=custom_key)['id'] %} 

Create subnet: 
    boto_vpc.subnet_present: 
    - name: {{ custom_vpc_name }}-subnet 
    - vpc_id: {{ vpc_id }} 
    - cidr_block: {{ cidr_block }} 
    - region: {{ custom_region }} 
    - keyid: {{ custom_keyid }} 
    - key: {{ custom_key }} 

Create internet gateway: 
    boto_vpc.internet_gateway_present: 
    - name: {{ custom_vpc_name }}-igw 
    - vpc_id: {{ vpc_id }} # I have changed this line from vpc_name into vpc_id, is that what you meant ? 
    - keyid: {{ custom_keyid }} 
    - key: {{ custom_key }} 

Create route: 
    boto_vpc.route_table_present: 
    - name: my_route_table 
    - vpc_id: {{ vpc_id }} 
    - routes: 
     - destination_cidr_block: {{ cidr_block }} 
      instance_id: {{ instance_id }} 
    - subnet_names: 
     - {{ custom_vpc_name }}-subnet 
    - region: {{ custom_region }} 
    - profile: 
     keyid: {{ custom_keyid }} 
     key: {{ custom_key }} 

Это непроверенный код, но я делал подобные состояния, как это с помощью соли.

+0

Это потрясающе! Благодаря! Я попробую в ближайшее время. Один вопрос. Какова цель создания экземпляра instance_id в процессе создания маршрута? Предполагается, что это шлюз NAT? – bluethundr

+0

Привет, Мостафа, еще раз спасибо за ваш вклад. Я попробовал ваше решение, и похоже, что шаблоны jinja не разбираются. Вот отладочный вывод этой команды: [link] (https://gist.github.com/bluethundr/6ccf4b62dd8cfae4bd0c0cefec9212fb) Любые идеи о том, как мы можем заставить это работать? – bluethundr

+0

Проблема заключалась в отсутствии пропущенной аутентификации, поскольку ошибка говорила: 'Нет учетных данных аутентификации, обнаруженных при попытке подключиться к vpc-подключению к региону« us-east-1 »', я обновил ответ –