State Modules#
State modules provide idempotent functions to configure your cloud. State modules generally use functions from related Exec modules to check for the current status of resources and make the necessary changes.
Common State Module Functions#
There are two functions that are generally used for Idem State functions,
present and absent.
Present State Function#
The present state function will ensure that your resource exists.
The present function will use the related get or list Exec function
to determine if the resource already exists or not. If the resource already
exists, then it will return immediately with a successful response. If the
resource doesn’t exist, it will use the corresponding Exec function to create
the missing resource and then return a successful response if the create
function succeeds.
Absent State Function#
In a similar manner the absent function will ensure that your specified
resource does not exist.
It will use the related get or list function to determine if the
resource exists or not. If the resource doesn’t exist the function will return
immediately with a successful status. If the resource does exist the function
will use the related Exec module delete function to remove the resource.
State Modules and SLS Files#
Generally, you will define how you want your infrastructure configured in yaml
files with an .sls extension. These are often refered to as sls files
or state files. These sls files will contain yaml datastructures that
will use your Idem State Functions to define how your infrastructure is
configured.
Here is an example of an sls file that configures an AWS VPC:
vpc-07fa1462:
aws.ec2.vpc.present:
- name: vpc-07fa1462
- resource_id: vpc-07fa1462
- instance_tenancy: default
- cidr_block_association_set:
- AssociationId: vpc-cidr-assoc-b2ba2fdb
CidrBlock: 172.31.0.0/16
CidrBlockState:
State: associated
- enable_dns_hostnames: true
- enable_dns_support: true
Now we can apply this sls file in an idempotent operation like this:
idem state ~/my_idem_files/my_vpc.sls
Create Present State Function#
Let’s create our present state function for our idem-sqlite-demo
provider plugin.
mkdir idem_sqlite_demo/states/demo
touch idem_sqlite_demo/states/demo/sqlite.py